当前位置:   article > 正文

树莓派4B的串口配置与接收发送16进制数据_树莓派uart配置

树莓派uart配置

一、原理

1、树莓派 4B 有 UART0(PL011)、UART1(mini UART)和 4 个 PL011 串口共计有 6 个 UART

2、默认情况下,树莓派会将 /dev/ttyAMA0 用作终端串口,而不是普通的串口设备。可以通过编辑 /boot/cmdline.txt 文件来禁用终端串口。找到以 console=serial0 开头的行,并将其修改为 console=tty1,如下图所示

 二、 其他串口配置

2.1 展示所有串口命令

输出下面的命令可以看到所有的串口

dtoverlay -a | grep uart

在这里插入图片描述

2.2 查看特定串口信息

使用下面的命令会展示串口的配置信息

dtoverlay -h uart3

在这里插入图片描述

2.3 配置开启串口 UART2-5

在/boot/config.txt的末尾添加如下的代码,保存重启树莓派

dtoverlay=uart2
dtoverlay=uart3
dtoverlay=uart4
dtoverlay=uart5
 

查看是否生效

ls /dev/ttyAMA*

结果如下图

 

到这里就打开了所有的串口了

三、验证结果
UART 串口与 GPIO 对应关系:

GPIO14 = TXD0 -> ttyAMA0
GPIO0  = TXD2 -> ttyAMA1
GPIO4  = TXD3 -> ttyAMA2
GPIO8  = TXD4 -> ttyAMA3
GPIO12 = TXD5 -> ttyAMA4

GPIO15 = RXD0 -> ttyAMA0
GPIO1  = RXD2 -> ttyAMA1
GPIO5  = RXD3 -> ttyAMA2
GPIO9  = RXD4 -> ttyAMA3
GPIO13 = RXD5 -> ttyAMA4

3.1这里进行两个验证

UART2的自环测试,UART2和3的串口间通信,以及一个究极测试:同时打开所有的串口(包括USB转的,看看树莓派的CPU使用率有多少)

杜邦线短接 GPIO4 和 GPIO5
编写下面的 python 程序

import serial

ser1 = serial.Serial(port='/dev/ttyAMA2',baudrate=115200)
ser1.write(b'Hello, World!\n')

data = ser1.readline()
print(data)

3.2 UART2和3的串口间通信

使用杜邦线按照下图的方式进行连接

  1. GPIO4(TXD3)-------GPIO9(RXD2)
  2. GPIO5(RXD3)-------GPIO8(TXD2)

然后编写如下的程序

import serial

ser2 = serial.Serial(port='/dev/ttyAMA2',baudrate=115200)
ser3 = serial.Serial(port='/dev/ttyAMA3',baudrate=115200)

ser2.write(b'hello ser3,I am ser2\n')
ser3.write(b'hello ser2,I am ser3\n')
line2 = ser2.readline()
line3 = ser3.readline()
print('ser2Rec:'+str(line2))
print('ser3Rec:'+str(line3)

结果如下图,说明串口生效,实验成功:
在这里插入图片描述

四、串口接受发送16进制数据

1、打开串口usart2、3

使用 nano 编辑器:

sudo nano /boot/config.txt

这将使用 nano 编辑器打开 /boot/config.txt 文件。你需要使用超级用户权限(sudo)运行该命令,以便能够编辑 /boot 目录下的文件。

使用 vi 编辑器:

sudo vi /boot/config.txt

这将使用 vi 编辑器打开 /boot/config.txt 文件。同样,你需要使用超级用户权限(sudo)来编辑该文件。

修改完成后,按下相应编辑器的保存快捷键(通常是 Ctrl+O),然后按下退出快捷键(通常是 Ctrl+X)来保存并退出编辑器。

/boot/config.txt的末尾添加如下的代码,保存重启树莓派 sudo reboot

查看是否生效

ls /dev/ttyAMA*

 结果如下图

 各 UART 串口与 GPIO 对应关系:

  1. GPIO14 = TXD0 -> ttyAMA0
  2. GPIO0  = TXD2 -> ttyAMA1
  3. GPIO4  = TXD3 -> ttyAMA2
  4. GPIO8  = TXD4 -> ttyAMA3
  5. GPIO12 = TXD5 -> ttyAMA4
  6. GPIO15 = RXD0 -> ttyAMA0
  7. GPIO1  = RXD2 -> ttyAMA1
  8. GPIO5  = RXD3 -> ttyAMA2
  9. GPIO9  = RXD4 -> ttyAMA3
  10. GPIO13 = RXD5 -> ttyAMA4

 

 在树莓派上,引脚的编号可以使用两种方式:物理引脚编号(Physical Pin Numbering)和BCM引脚编号(BCM GPIO Numbering)。

  1. # -*- coding: UTF-8 -*-
  2. #!/usr/bin/python3 python3
  3. import serial
  4. def init_usart1(baudrate):
  5. ser = serial.Serial('/dev/ttyAMA2', baudrate, timeout=1) # 打开 ttyUSB0 设备,指定波特率
  6. return ser
  7. def send_hex_data(ser, data):
  8. hex_data = bytearray.fromhex(data)
  9. ser.write(hex_data) # 将16进制数据转换成字节并发送到串口
  10. print('发送的数据:', ' '.join(format(byte, '02X') for byte in hex_data))
  11. def read_hex_data(ser):
  12. try:
  13. while True:
  14. if ser.in_waiting > 0: # 如果串口有数据可读
  15. data_recv = ser.read(ser.in_waiting) # 读取所有可用的数据
  16. hex_data = data_recv.hex() # 将数据以16进制格式打印出来
  17. print(hex_data) # 将数据以16进制格式打印出来
  18. except KeyboardInterrupt:
  19. # Ctrl+C被按下,执行异常处理
  20. ser.close()
  21. print("程序终止,关闭串口")
  22. # 在主程序中调用函数
  23. baudrate = 115200
  24. usart1 = init_usart1(baudrate)
  25. send_data = "AA 55 01 01 55 AA" # 要发送的16进制数据
  26. send_hex_data(usart1, send_data)
  27. read_hex_data(usart1)

运行结果如下

参考链接:https://blog.csdn.net/FuckerGod/article/details/131232138

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/911632
推荐阅读
  

闽ICP备14008679号