一. 前言
相比树莓派零、1、2 以及 3 的双串口 UART0(PL011)和 UART1(mini UART),树莓派 4B 中新增了 4 个 PL011 串口共计有 6 个 UART。
6个UART,其中5个是硬件UART。可以使用这5个硬件UART稳定地与外部的设备进行通讯。
二. 打开另外4路串口
2.1 查看4B上所有的串口资源
2.2 查看某个串口的信息
2.3 开启另外4路硬件UART
执行命令
sudo gedit /boot/config.txt
在config.txt文件的最下方加入4行
dtoverlay=uart2
dtoverlay=uart3
dtoverlay=uart4
dtoverlay=uart5
然后"ctrl+s"保存文件, 执行sudo reboot重启树莓派,使修改生效。
2.4 查看配置是否生效
可以看到,有5个硬件UART。
各个UART与GPIO的对应关系:
(BCM)GPIO14 = TXD0 -> ttyAMA0
(BCM)GPIO0 = TXD2 -> ttyAMA1
(BCM)GPIO4 = TXD3 -> ttyAMA2
(BCM)GPIO8 = TXD4 -> ttyAMA3
(BCM)GPIO12 = TXD5 -> ttyAMA4
(BCM)GPIO15 = RXD0 -> ttyAMA0
(BCM)GPIO1 = RXD2 -> ttyAMA1
(BCM)GPIO5 = RXD3 -> ttyAMA2
(BCM)GPIO9 = RXD4 -> ttyAMA3
(BCM)GPIO13 = RXD5 -> ttyAMA4
三. 示例程序
# -*- coding: utf-8 -*
#! /usr/bin/env python
import serial
import time
ser = serial.Serial('/dev/ttyAMA0', 115200) # 设置端口和波特率
if ser.isOpen == False: # 检查串口是否打开
ser.open() # 打开串口
ser.write(b"Raspberry pi is ready")
try:
while True:
size = ser.inWaiting() # 获得缓冲区字符
if size != 0:
response = ser.read(size) # 读取内容并显示
print(response)
ser.flushInput() # 清空接收缓存区
time.sleep(0.5) # 软件延时
except KeyboardInterrupt:
ser.close()