树莓派 Pico 支持两种串口通信方式:UART 和 USB CDC (USB serial). 接下来通过一个 Hello World 的示例程序来演示如何使用串口来收发数据。

USB CDC 方式

树莓派 Pico 自带一个 Micro USB 接口,所以我们很方便的直接使用 USB CDC 功能。

Hello USB 代码

首先,我们创建一个 Hello World 工程。

  1. mkdir hello_usb
  2. cd hello_usb

创建 CMakeLists.txt 和 hello_usb.c 文件

  1. touch hello_usb.c CMakeLists.txt
  2. cp $PICO_SDK_PATH/external/pico_sdk_import.cmake .

在 CMakeLists.txt 中配置打开 USB CDC 功能:

  1. # 设置Cmake 最小依赖版本
  2. cmake_minimum_required(VERSION 3.17)
  3. # 设置c/c++ 编译版本
  4. set(CMAKE_C_STANDARD 11)
  5. set(CMAKE_CXX_STANDARD 17)
  6. set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
  7. # 导入 pico sdk cmake
  8. include(pico_sdk_import.cmake)
  9. # ====================================================================================
  10. # 设置开发板为 pico w (如果你的开发板是 pico 可以注释这行)
  11. set(PICO_BOARD pico_w CACHE STRING "Board type")
  12. # 设置项目名
  13. project(hello_usb C CXX ASM)
  14. # 初始化sdk
  15. pico_sdk_init()
  16. # 添加执行文件
  17. add_executable(hello_usb
  18. hello_usb.c
  19. )
  20. # 设置项目名称字符串
  21. pico_set_program_name(hello_usb "hello_usb")
  22. # 设置项目版本号
  23. pico_set_program_version(hello_usb "0.1")
  24. # Modify the below lines to enable/disable output over UART/USB
  25. # 是否打开 UART 串口
  26. pico_enable_stdio_uart(hello_usb 0)
  27. # 是否打开USB 串口
  28. pico_enable_stdio_usb(hello_usb 1)
  29. # 添加依赖库 (pico w 必须加入 pico_cyw43_arch_none )
  30. target_link_libraries(hello_usb
  31. pico_stdlib # for core functionality
  32. )
  33. # 设置输出文件
  34. pico_add_extra_outputs(hello_usb)

可以使用 CMake 指令更改 stdout 的目标输出,输出指向 UART 或 USB CDC,或同时指向两者。

pico_enable_stdio_usb(hello_world 1) pico_enable_stdio_uart(hello_world 0) 1.启用通过 USB CDC printf输出(USB串行) 2.禁用 通过 UART printf 输出

编写 hello_usb.c 输出打印 “Hello, world” 的代码,如下:

  1. #include <stdio.h>
  2. #include "pico/stdlib.h"
  3. int main() {
  4. stdio_init_all();
  5. while (true) {
  6. printf("Hello, world!\n");
  7. sleep_ms(1000);
  8. }
  9. }

代码很简单,在一个死循环里面每隔 1000 毫秒输出打印 “Hello, world” 。

编译生成 uf2 文件

  1. mkdir build && cd build
  2. cmake ..
  3. make -j4

串口通信 - 图1

拖拽 hello_usb.uf2 文件到 RPi-RP2 文件夹,烧录程序。

串口通信 - 图2

安装 Mac 桌面端串口工具

Mac 用户可以安装免费图形化串口工具 CoolTerm 或者 minicom 命令行工具,这两个工具是我测试可以直接使用 USB 连接上树莓派串行端口的,有些工具可以找到串口,但是连接不上,比如: 国产工具 WCHSerialPort (具体原因未知)。

串口通信 - 图3

使用 CoolTerm

打开 CoolTerm 点击 Options 打开配置菜单

串口通信 - 图4

选择 usb 端口(我这边显示的是 usbmodem 1201,可能会不一致),波特率选择 115200,其他默认就好,点击 ok 保存。

点击 connect 连接,即可看到如下打印信息。

串口通信 - 图5

UART 方式

UART 即 通用异步收发传输,是串口的一种,可以用来通信,包括单片机和电脑,单片机和单片机,单片机和其它带串口的外设。 UART是全双工的,也就是说发送的发送的同时可以接收数据,UART需要三根线,一根TX(发送),一根RX(接收)和一根GND(共地)。

购买硬件

串口通信 - 图6

网上很容易买到这样的USB转串口模块,只需几块钱,用的是CH340芯片。

接线

需要使用杜邦线将 USB转串口模块和树莓派 Pico 连接,连接方式为:

串口模块的 RXD 连接 Pico UART0_TX ,TXD 连接 Pico UART0_RX,即将串口的读取端口连接到树莓派 Pico 的发送端口,发送端口连接树莓派读取端口,实现数据的收发。(一开始我 RXD 连 UART0_RX ,TXD 连 UART0_TX 了 🥲

串口的 GND 连接到 Pico 的 GND (Pin 3),实现共地连接。

串口通信 - 图7

按照如上图所示将 USB TO TTL 模块连接到树莓派 Pico。

USB TO TTL Raspberry Pi Pico
GND GND (Pin 3)
RXD GP0 (UART0_TX, Pin 1)
TXD GP1 (UART0_RX, Pin 2)

串口通信 - 图8

Hello Serial 代码

代码和 hello_usb.c 是一致的,只需要修改 CMakeLists.txt 配置文件打开 UART 串口输出即可。

  1. # 设置Cmake 最小依赖版本
  2. cmake_minimum_required(VERSION 3.17)
  3. # 设置c/c++ 编译版本
  4. set(CMAKE_C_STANDARD 11)
  5. set(CMAKE_CXX_STANDARD 17)
  6. set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
  7. # 导入 pico sdk cmake
  8. include(pico_sdk_import.cmake)
  9. # ====================================================================================
  10. # 设置开发板为 pico w (如果你的开发板是 pico 可以注释这行)
  11. set(PICO_BOARD pico_w CACHE STRING "Board type")
  12. # 设置项目名
  13. project(hello_serial C CXX ASM)
  14. # 初始化sdk
  15. pico_sdk_init()
  16. # 添加执行文件
  17. add_executable(hello_serial
  18. hello_serial.c
  19. )
  20. # 设置项目名称字符串
  21. pico_set_program_name(hello_serial "hello_serial")
  22. # 设置项目版本号
  23. pico_set_program_version(hello_serial "0.1")
  24. # Modify the below lines to enable/disable output over UART/USB
  25. # 是否打开 UART 串口
  26. pico_enable_stdio_uart(hello_serial 1)
  27. # 是否打开USB 串口
  28. pico_enable_stdio_usb(hello_serial 0)
  29. # 添加依赖库 (pico w 必须加入 pico_cyw43_arch_none )
  30. target_link_libraries(hello_serial
  31. pico_stdlib # for core functionality
  32. )
  33. # 设置输出文件
  34. pico_add_extra_outputs(hello_serial)

和上面一样的步骤编译烧录程序。

使用 CoolTerm

打开 CoolTerm 点击 Options 打开配置菜单,选择 UART 串口模块端口。

串口通信 - 图9