赞
踩
博主的树莓派4B烧录的系统为Raspberry Pi OS (64-bit)
首先贴出树莓派的引脚定义。
下面贴出树莓派4B的串口内容。相比树莓派0、1、2、3的双串口UART0(PL011)和UART1(mini UART),树莓派4B新增了 4 个 PL011 串口共计有6个 UART。对于树莓派0-3使用串口,由于本身串口不够用,故需要禁用下蓝牙(默认配置好的两串口一个用于蓝牙(UART0)另一个是miniUART)。但对树莓派4B来说并不需要,因为有额外 4 个串口可以利用。
按下面操作开始配置串口:
sudo nano /boot/firmware/config.txt
在结尾添加:
dtoverlay=uart2
dtoverlay=uart3
dtoverlay=uart4
dtoverlay=uart5
重启后查看是否生效:
ls /dev/ttyAMA*
观察到:
pi@pi:~ $ ls /dev/ttyAMA*
/dev/ttyAMA2 /dev/ttyAMA3 /dev/ttyAMA4 /dev/ttyAMA5
下面给出各 UART 串口与 GPIO 对应关系,一般使用建议UART2-5。
UART0: GPIO14 = TXD0 GPIO15 = RXD0
UART2: GPIO0 = TXD2 -> ttyAMA2 GPIO1 = RXD2 -> ttyAMA2
UART3: GPIO4 = TXD3 -> ttyAMA3 GPIO5 = RXD3 -> ttyAMA3
UART4: GPIO8 = TXD4 -> ttyAMA4 GPIO9 = RXD4 -> ttyAMA4
UART5: GPIO12 = TXD5 -> ttyAMA5 GPIO13 = RXD5 -> ttyAMA5
测试代码如下,不知道为什么我加了注释后命令行运行会报错,把注释删掉就行了。注意下面我使用的是ttyAMA2,按上面进行接线。
import serial import time # 配置串口参数 ser = serial.Serial( port='/dev/ttyAMA2', # 更改为 ttyAMA2 端口,需要确认对应的GPIO引脚 baudrate=115200, # 设置波特率 parity=serial.PARITY_NONE, # 无校验位 stopbits=serial.STOPBITS_ONE, # 1个停止位 bytesize=serial.EIGHTBITS, # 8位数据位 timeout=1 # 超时时间 ) try: # 发送'lpf'字符串 ser.write(b'lpf\n') # 发送数据,b表示字节字符串 print("Message sent: lpf") time.sleep(0.1) # 稍微等待,确保数据完全发送 except Exception as e: print("Error sending message:", e) finally: ser.close() # 关闭串口
运行后在接收端可以收到 lpf ,结果正常。
后记:年少不知通信好,错把IO当成宝。我现在越来越觉得单片机、边缘板卡等等之间的通信是至关重要的。以前只是点灯大师罢了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。