我的前几个贴子中有介绍如何编译BSP,也有普通TTL串口输出的例子
初始化基本串口
stdio_init_all();
输出数据
puts("Hello, world!");
上边这种方式需要外接USB转串口模块才能接收数据,
即然RP2040本身带有USB功能,当然要玩内置USB通信,不需要其它串口转接模块
在一切准备就绪后(GIT,PYTHON,GCC,VS2019,CMAKE),还要单独下载 【tinyusb】
这个tinyusb默认是不含在官方SDK中的,需要到另一位置下载,然后解压到【pico-sdk\lib\tinyusb】
下载地址是:https://github.com/hathach/tinyusb
这个模块下载并放到指令位置后才能使用RP2040的USB功能
并且官方SDK是有几个BUG的,需要修改:
问题1:
D:\ZL\RP2040\pico-sdk\src\rp2_common\pico_stdio_usb\stdio_usb.c 文件
第91行,修改为 bool stdio_usb_init(void) {,去除左边的static标记
问题2:
D:\ZL\RP2040\pico-sdk\src\rp2_common\pico_stdio_usb\include\pico\stdio_usb.h
增加两个函数的申明:
void stdio_usb_out_chars(const char *buf, int length);
int stdio_usb_in_chars(char *buf, int length);
这个stdio_usb.h中只有bool stdio_usb_init()申明,但没有stdio_usb_out_chars和stdio_usb_in_chars
问题3:
D:\ZL\RP2040\pico-sdk\src\host\pico_stdio\include\pico\stdio.h第14行,注释掉
//static inline void stdio_usb_init() {}
以上3个问题点在最新的SDK(2021/02/05)中仍然存在,
修改以上几个问题点后,再写主程序:
#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/stdio_usb.h"
#define LED 25
int main()
{
//stdio_init_all();
stdio_usb_init();
gpio_init(LED);
gpio_set_dir(LED,GPIO_OUT);
gpio_put(LED,1);
sleep_ms(5000);
for(int i=0;i<10;i++){
sleep_ms(100);
gpio_put(LED,0);
sleep_ms(100);
gpio_put(LED,1);
}
while(1){
stdio_usb_out_chars("hello\n",6);
sleep_ms(500);
gpio_put(LED,0);
sleep_ms(500);
gpio_put(LED,1);
}
return 0;
}
代码比较简单,就没加注释了
然后编译,下载
运行,然后设备管理器此时已经有个串口了,打开串口软件,查看效果
纳尼?没接收到数据?
是的,我本人重试波特率,停止位,奇偶校验无数次还是收不到,准备再次查看源码时,试了下DTR,勾上了终于出来数据了
我把我修改好的SDK及程序示例发布出来
可以直接编译测试
引用: dcexpert 发表于 2021-2-6 08:34 还需要DTR/CTS这些控制信号吗?
是的,否则就接收不到数据
我直接使用官方SDK,编译是没问题的,使用putty读写串口也没问题,但tiny-usb cdc缺省的波特率是115200,不是9600,我找不到改变这个缺省波特率的方法,不知道答主是如何在9600波特率下工作的。
引用: flyox 发表于 2021-2-16 22:15 我直接使用官方SDK,编译是没问题的,使用putty读写串口也没问题,但tiny-usb cdc缺省的波特率是115200,不 ...
我是在windows下玩的,linux下没试过