649|5

756

帖子

16

资源

纯净的硅(中级)

【树莓派Pico测评】- USB CDC串口通信(BSP编译,非MicroPython) [复制链接]

我的前几个贴子中有介绍如何编译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,勾上了终于出来数据了

企业微信截图_20210205164809.png

 

 

 

赞赏

1

查看全部赞赏


回复

756

帖子

16

资源

纯净的硅(中级)

我把我修改好的SDK及程序示例发布出来

可以直接编译测试

pico-sdk.7z (3.04 MB, 下载次数: 1)


回复

1万

帖子

13

资源

版主

还需要DTR/CTS这些控制信号吗?

点评

是的,否则就接收不到数据  详情 回复 发表于 2021-2-7 08:37

回复

756

帖子

16

资源

纯净的硅(中级)

dcexpert 发表于 2021-2-6 08:34 还需要DTR/CTS这些控制信号吗?

是的,否则就接收不到数据


回复

2

帖子

0

资源

一粒金砂(初级)

我直接使用官方SDK,编译是没问题的,使用putty读写串口也没问题,但tiny-usb cdc缺省的波特率是115200,不是9600,我找不到改变这个缺省波特率的方法,不知道答主是如何在9600波特率下工作的。

点评

我是在windows下玩的,linux下没试过  详情 回复 发表于 2021-2-20 17:13

回复

756

帖子

16

资源

纯净的硅(中级)

flyox 发表于 2021-2-16 22:15 我直接使用官方SDK,编译是没问题的,使用putty读写串口也没问题,但tiny-usb cdc缺省的波特率是115200,不 ...

我是在windows下玩的,linux下没试过


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/6 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表