树莓派 Pico 支持两种串口通信方式:UART 和 USB CDC (USB serial). 接下来通过一个 Hello World 的示例程序来演示如何使用串口来收发数据。
USB CDC 方式
树莓派 Pico 自带一个 Micro USB 接口,所以我们很方便的直接使用 USB CDC 功能。
Hello USB 代码
首先,我们创建一个 Hello World 工程。
mkdir hello_usbcd hello_usb
创建 CMakeLists.txt 和 hello_usb.c 文件
touch hello_usb.c CMakeLists.txtcp $PICO_SDK_PATH/external/pico_sdk_import.cmake .
在 CMakeLists.txt 中配置打开 USB CDC 功能:
# 设置Cmake 最小依赖版本cmake_minimum_required(VERSION 3.17)# 设置c/c++ 编译版本set(CMAKE_C_STANDARD 11)set(CMAKE_CXX_STANDARD 17)set(CMAKE_EXPORT_COMPILE_COMMANDS ON)# 导入 pico sdk cmakeinclude(pico_sdk_import.cmake)# ====================================================================================# 设置开发板为 pico w (如果你的开发板是 pico 可以注释这行)set(PICO_BOARD pico_w CACHE STRING "Board type")# 设置项目名project(hello_usb C CXX ASM)# 初始化sdkpico_sdk_init()# 添加执行文件add_executable(hello_usbhello_usb.c)# 设置项目名称字符串pico_set_program_name(hello_usb "hello_usb")# 设置项目版本号pico_set_program_version(hello_usb "0.1")# Modify the below lines to enable/disable output over UART/USB# 是否打开 UART 串口pico_enable_stdio_uart(hello_usb 0)# 是否打开USB 串口pico_enable_stdio_usb(hello_usb 1)# 添加依赖库 (pico w 必须加入 pico_cyw43_arch_none )target_link_libraries(hello_usbpico_stdlib # for core functionality)# 设置输出文件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” 的代码,如下:
#include <stdio.h>#include "pico/stdlib.h"int main() {stdio_init_all();while (true) {printf("Hello, world!\n");sleep_ms(1000);}}
代码很简单,在一个死循环里面每隔 1000 毫秒输出打印 “Hello, world” 。
编译生成 uf2 文件
mkdir build && cd buildcmake ..make -j4

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

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

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

选择 usb 端口(我这边显示的是 usbmodem 1201,可能会不一致),波特率选择 115200,其他默认就好,点击 ok 保存。
点击 connect 连接,即可看到如下打印信息。

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

接线
需要使用杜邦线将 USB转串口模块和树莓派 Pico 连接,连接方式为:
串口模块的 RXD 连接 Pico UART0_TX ,TXD 连接 Pico UART0_RX,即将串口的读取端口连接到树莓派 Pico 的发送端口,发送端口连接树莓派读取端口,实现数据的收发。(一开始我 RXD 连 UART0_RX ,TXD 连 UART0_TX 了 🥲)
串口的 GND 连接到 Pico 的 GND (Pin 3),实现共地连接。
按照如上图所示将 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) |

Hello Serial 代码
代码和 hello_usb.c 是一致的,只需要修改 CMakeLists.txt 配置文件打开 UART 串口输出即可。
# 设置Cmake 最小依赖版本cmake_minimum_required(VERSION 3.17)# 设置c/c++ 编译版本set(CMAKE_C_STANDARD 11)set(CMAKE_CXX_STANDARD 17)set(CMAKE_EXPORT_COMPILE_COMMANDS ON)# 导入 pico sdk cmakeinclude(pico_sdk_import.cmake)# ====================================================================================# 设置开发板为 pico w (如果你的开发板是 pico 可以注释这行)set(PICO_BOARD pico_w CACHE STRING "Board type")# 设置项目名project(hello_serial C CXX ASM)# 初始化sdkpico_sdk_init()# 添加执行文件add_executable(hello_serialhello_serial.c)# 设置项目名称字符串pico_set_program_name(hello_serial "hello_serial")# 设置项目版本号pico_set_program_version(hello_serial "0.1")# Modify the below lines to enable/disable output over UART/USB# 是否打开 UART 串口pico_enable_stdio_uart(hello_serial 1)# 是否打开USB 串口pico_enable_stdio_usb(hello_serial 0)# 添加依赖库 (pico w 必须加入 pico_cyw43_arch_none )target_link_libraries(hello_serialpico_stdlib # for core functionality)# 设置输出文件pico_add_extra_outputs(hello_serial)
和上面一样的步骤编译烧录程序。
使用 CoolTerm
打开 CoolTerm 点击 Options 打开配置菜单,选择 UART 串口模块端口。

