树莓派资料
显示屏资料
系统下载
树莓派Pico
首页 动态 发帖 版块 我的
 退出
游客  
等级:
金币:
经验值:

UART(异步收发传输器) 树莓派Pico RP2040【入门级教程】

  10144 
 0
 2
RASPI   RASPI 

Image


一:UART异步收发传输介绍

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一种通用的串行通信协议,用于在两个设备之间进行异步数据传输。它不需要时钟信号同步,而是通过预先约定的波特率(数据传输速率)来保证数据正确传输。


在嵌入式系统中,UART 常用于:

与传感器、GPS 模块等外设通信

与电脑进行数据交互

两个微控制器之间的通信


1.UART 的工作原理

UART 通信使用两根线实现双向通信:

TX(Transmit):发送数据

RX(Receive):接收数据

通信过程中,每个数据帧通常包含:

起始位:表示数据传输开始

数据位:实际传输的数据(通常 8 位)

校验位(可选):用于简单的错误检测

停止位:表示数据传输结束

树莓派 Pico 的 RP2040 芯片内置了两个 UART 控制器(UART0 和 UART1),可以灵活地映射到不同的 GPIO 引脚。


2.树莓派Pico的UART 引脚

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()函数:检查并接收数据,将字节数据解码为字符串

主循环:每秒发送一条消息,并检查是否有接收的数据


标签:
作者签名: www.raspi.cc   楼主  2025-08-25 15:34:38
回复列表
Powered by RASPI _VERSION
© 2017-2025 树莓派极客版权
您的IP: 18.97.9.171 , 2025-11-12 19:32:33
Powered by RASPI _VERSION
© 2017-2025 树莓派极客版权