
UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一种通用的串行通信协议,用于在两个设备之间进行异步数据传输。它不需要时钟信号同步,而是通过预先约定的波特率(数据传输速率)来保证数据正确传输。
在嵌入式系统中,UART 常用于:
与传感器、GPS 模块等外设通信
与电脑进行数据交互
两个微控制器之间的通信
UART 通信使用两根线实现双向通信:
TX(Transmit):发送数据
RX(Receive):接收数据
通信过程中,每个数据帧通常包含:
起始位:表示数据传输开始
数据位:实际传输的数据(通常 8 位)
校验位(可选):用于简单的错误检测
停止位:表示数据传输结束
树莓派 Pico 的 RP2040 芯片内置了两个 UART 控制器(UART0 和 UART1),可以灵活地映射到不同的 GPIO 引脚。
Pico 的 UART 引脚可以灵活配置,默认常用的引脚分配:
UART0: GP0(TX)和 GP1(RX)
UART1: GP4(TX)和 GP5(RX)
实际上,通过软件配置,UART 可以映射到 Pico 上的几乎任何 GPIO 引脚。
要在树莓派pico上测试 UART 通信,你可以:
方法 1:与电脑通信
使用 USB 转 TTL 模块(如 CH340)
连接方式:
Pico 的 GP0(TX)→ USB 转 TTL 的 RX
Pico 的 GP1(RX)→ USB 转 TTL 的 TX
Pico 的 GND → USB 转 TTL 的 GND
将 USB 转 TTL 模块连接到电脑,使用串口调试工具(如 Putty、TeraTerm)打开对应串口,波特率 9600
方法 2:两个 Pico 之间通信
Pico A 的 GP0(TX)→ Pico B 的 GP1(RX)
Pico A 的 GP1(RX)→ Pico B 的 GP0(TX)
两个 Pico 的 GND 相连
运行下面代码后,你将看到 Pico 定期发送消息,同时可以通过串口工具或另一个 Pico 向它发送消息并查看接收结果。
下面是一个使用树莓派 Pico 进行 UART 通信的示例,包括发送和接收数据的功能。
from machine import Pin, UART
import time
# 初始化UART0,波特率9600
# TX = GP0, RX = GP1
uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
# 发送数据函数
def send_data(message):
uart.write(message + '\n') # 添加换行符作为结束标志
print(f"发送: {message}")
# 接收数据函数
def receive_data():
if uart.any(): # 检查是否有数据可接收
data = uart.readline() # 读取一行数据
if data:
try:
# 解码字节数据为字符串并去除首尾空白
message = data.decode('utf-8').strip()
print(f"接收: {message}")
return message
except UnicodeError:
print("接收的数据不是有效的UTF-8编码")
return None
# 主循环
while True:
# 发送测试消息
send_data("Hello from Pico!")
# 尝试接收数据
receive_data()
# 延时1秒
time.sleep(1)
代码说明:
导入必要的模块:Pin用于引脚配置,UART用于 UART 通信,time用于延时
初始化 UART0,设置波特率为 9600,TX 引脚为 GP0,RX 引脚为 GP1
send_data()函数:发送字符串数据,并添加换行符作为结束标志
receive_data()函数:检查并接收数据,将字节数据解码为字符串
主循环:每秒发送一条消息,并检查是否有接收的数据