整理自B站树小悉https://www.bilibili.com/video/BV16U4y1879Q?p=12
树莓派zero 2w有两个uart串口
一个是硬件串口(/dev/ttyAMA0),另一个是mini串口(/dev/ttyS0)
Mini UART没有时钟源,必须由内核提供时钟源,而内核频率本身是变化的,导致Mini UART速率不稳,无法正常使用。
树莓派串口:
主串口------>可以通过引脚实现通讯
辅助串口--------->不能使用GPIO引脚通信,默认被分配给蓝牙端
注意:默认情况下,迷你串口是禁用的,无论将它指定为主UART还是辅助UART
现在我们需要把硬件串口设置为主串口,并解除蓝牙功能对硬件串口的占用
在树莓派的官方描述中可以看到,mini串口的的代号为ttyS0,硬件串口的代号为ttyAMA0,主串口的标识符为serial0,辅助串口的标识符为serial1 :
1、在终端使用命令 [Asm] 纯文本查看 复制代码 ls /dev -al 查看串口打开情况
我们可以看到并没有serial0,说明主串口没有打开;而且硬件串口ttyAMA0被分配到了serial1作为辅助串口
mini串口ttyS0并没有显示,因为mini串口在默认情况下是禁用/关闭的
所以接下来需要打开mini 串口ttyS0
2、打开mini UART
①点击左上角树莓图标
②点击首选项
③点击 Raspberry Pi Configuration 选项
在弹出的设置窗口中选择第三个lnterfaces按钮,将Serial Port设置为开启,Serial Console设置为关闭
点击ok保存设置,这时会提示是否重启树莓派,选择yes立即重启
重启完成后在来看一下串口的打开情况,打开终端输入[Asm] 纯文本查看 复制代码 ls /dev -al
现在可以看到mini串口ttyS0已经显示了,说明已经打开
但是硬件串口ttyAMA0依然是作为辅助串口serial1
所以接下来需要将硬件串口设置为主串口serial0
3、编辑config.txt文件,将硬件串口设置为主串口
打开终端输入命令[Asm] 纯文本查看 复制代码 sudo nano /boot/config.txt 编辑文件
在文件末尾加入两行代码
[Asm] 纯文本查看 复制代码 dtoverlay=pi3-miniuart-bt
force_tubo=1
将蓝牙分配到mini uart串口
编辑好后
Ctrl+s 保存文件
Ctrl+x 退出编辑
再次重启树莓派,设置完成。
4、查看设置完后的串口信息
上一步树莓派重启完成后,打开终端输入 [Asm] 纯文本查看 复制代码 ls /dev -al 再次查看串口信息
这时可以看到硬件串口ttyAMA0和mini串口ttyS0都已经显示出来,这代表两个串口都已经打开
并且硬件串口ttyAMA0分配到了serial0作为主串口,mini串口ttyS0分配到serial1作为辅助串口
说明我们的设置已经完成
接下来连接实物进行测试
5、实际编写测试串口是否能用
首先在树莓派引脚图的网站可以看到zero的GPIO14和GPIO15分别是UART串口的 TX和RX (参考 https://pinout.xyz/ ) 树莓派引脚详情
然后用一根 母-母 的杜邦线将GPIO14和GPIO15两个引脚相连接(自发自收,方便调试)
打开编程软件,这里用的是thonny,输入代码:
[Python] 纯文本查看 复制代码 import serial
portx = '/dev/ttyAMA0'
bps = 9600 #波特率设置为9600
ser = serial.Serial(portx,baudrate=bps)
ser.write('Hello world\n'.encode('gbk')) #将字符串转换为字节才能写入
data = ser.readline()
print(data.decode('gbk'))
可以看到输出的数据与写入的数据一致
|