目录
1.UART通信介绍
2.电脑端准备工作
2.1 安装串口调试助手
2.2 硬件接线
3.Jetson Nano端准备工作
3.1安装库文件
3.2修改主板上电启动串口权限
4.示例程序-发送及接收
4.1 开启串口调试助手
4.2 导入示例程序
4.3 执行程序
4.4 查看效果
4.4.1 串口调试端
4.4.2 Jetson Nano端
5.串口通信代码
目录
1.UART通信介绍
2.电脑端准备工作
2.1 安装串口调试助手
2.2 硬件接线
3.Jetson Nano端准备工作
3.1安装库文件
3.2修改主板上电启动串口权限
4.示例程序-发送及接收
4.1 开启串口调试助手
4.2 导入示例程序
4.3 执行程序
4.4 查看效果
4.4.1 串口调试端
4.4.2 Jetson Nano端
1.UART通信介绍
通信协议在组织设备之间的通信方面起着重要作用。它根据系统要求以不同的方式设
计,并且这些协议具有在设备之间达成一致的特定规则以实现成功的通信。
嵌入式系统、微控制器和计算机大多使用UART 作为设备到设备硬件通信协议的一种
形式。在可用的通信协议中,UART仅使用两条线作为其发送端和接收端。
尽管是一种广泛使用的硬件通信协议方法,但它并没有一直得到充分优化。在微控制器
内部使用UART 模块时,通常会忽略帧协议的正确实现。
根据定义,UART是一种硬件通信协议,它使用可配置速度的异步串行通信。异步意味
着没有时钟信号来同步从发送设备到接收端的输出位。
每个UART 设备的两个信号命名为:
- 发射机(Tx)
- 接收器(Rx)
每个设备的发送器和接收器线的主要目的是发送和接收用于串行通信的串行数据。
发送UART 连接到以并行形式发送数据的控制数据总线。由此,数据现在将在传输线
(线)上逐位串行传输到接收UART。反过来,这会将串行数据转换为接收设备的并行数
据。
UART 线用作通信介质,将一个数据发送和接收到另一个数据。请注意,UART 设备
具有专用于发送或接收的发送和接收引脚。
对于UART 和大多数串行通信,需要在发送和接收设备上设置相同的波特率。波特率
是信息传输到通信信道的速率。在串行端口上下文中,设置的波特率将作为每秒传输的最大
位数。
在UART 中,传输方式是数据包的形式。连接发送器和接收器的部分包括创建串行数
据包并控制这些物理硬件线路。数据包由起始位、数据帧、奇偶校验位和停止位组成。
- 起始位
UART 数据传输线在不传输数据时通常保持在高电压电平。为了开始数据传输,发送
UART 将传输线从高拉低一(1) 个时钟周期。当接收UART 检测到从高到低的电压转换
时,它开始以波特率的频率读取数据帧中的位。
- 数据框
数据帧包含正在传输的实际数据。如果使用奇偶校验位,它可以是五(5) 位,最多八(8)
位。如果不使用奇偶校验位,则数据帧可以是九(9) 位长。在大多数情况下,首先发送的
数据是最低有效位。
- 平价
奇偶性描述了一个数字的偶数或奇数。奇偶校验位是接收UART 判断数据在传输过程
中是否发生变化的一种方式。位可以通过电磁辐射、不匹配的波特率或长距离数据传输来改
变。
接收端UART 读取数据帧后,计算值为1 的位数,并检查总数是偶数还是奇数。如
果奇偶校验位为0(偶校验),则数据帧中的1 或逻辑高位应总计为偶数。如果奇偶校验
位为1(奇校验),则数据帧中的1 位或逻辑高电平应总计为奇数。
当奇偶校验位与数据匹配时,UART 知道传输没有错误。但如果奇偶校验位为0,总
数为奇数,或者奇偶校验位为1,总数为偶数,则UART 知道数据帧中的位发生了变化。
- 停止位
为了发出数据包结束的信号,发送UART 将数据传输线从低电压驱动到高电压,持续
一(1) 到两(2) 位持续时间。
2.电脑端准备工作
2.1 安装串口调试助手
本节以友善串口助手为例,进行说明。
双击打开本目录下的“serial5.2.3.exe”安装程序。然后按照下方图示步骤,依次进行。
2.2 硬件接线
根据Jetson Nano引脚图,会用到以下引脚:
注意:Jetson Nano使用5V 4A供电,因此无需对接VCC。
使用USB转TTL模块将Jetson Nano与PC通过母对母的杜邦线连接,连线如下所示:
Jetson Nano引脚8(TXD)<-->USB转TTL模块RXD
Jetson Nano引脚10(RXD)<-->USB转TTL模块TXD
Jetson Nano引脚6(GND)<-->USB转TTL模块GND
3.Jetson Nano端准备工作
3.1安装库文件
启动Jetson Nano主板,然后打开命令行终端,输入下方指令来安装串口函数库。
sudo apt-get install python3-serial
3.2修改主板上电启动串口权限
我们需要设置Jetson Nano开机后自启动串口,打开命令行终端,输入下方指令来打开串
口权限。
sudo chmod 777 /dev/ttyTHS1
4.示例程序-发送及接收
本节示例以电脑上的串口调试助手显示接收到Jetson Nano发送过来的说明字符串。
电脑端通过串口调试助手发送字符也可以在Jetson Nano终端上显示。
4.1 开启串口调试助手
将USB转TTL工具插入电脑任意一个USB接口后,打开电脑的设备管理器,查看端口是
否被识别,如下图:
如果未出现带有CH340标识的端口,可检查电脑是否安装了CH340驱动(驱动包在本节
目录下可找到),若安装了驱动却无法识别,可更换USB接口进行排查。
双击安装好的“Serial Port Utility”。
打开后,选择带有CH340标识的端口,波特率、数据位等属性按照下图设置后,点击红
框按钮即可。
4.2 导入示例程序
1) 启动Jetson Nano,将其连接至远程控制软件NoMachine。
2) 缩小NoMachine窗口,将同目录下的“UART.py”文件通过鼠标左键拖拽到
NoMachine系统桌面。
3) 输入指令“chmod a+x /home/hiwonder/Desktop/UART.py ”,为程序增加执行权
限。
这里“hiwonder”为本机创建的,用户根据实际情况对上方指令进行改写。
4.3 执行程序
1) 启动Jetson Nano,将其连接至远程控制软件NoMachine。
2) 双击系统桌面的图标,打开命令行终端。
3) 输入指令“cd Desktop/”,切换桌面。
4) 输入指令“python3 UART.py”,运行测试代码。
4.4 查看效果
4.4.1 串口调试端
在串口调试助手上面可以收到Jetson Nano发来的消息,如下:
我们可以在下方输入,例如“nihao”,然后点击发送。
4.4.2 Jetson Nano端
在Jetson Nano端的命令行界面内,可以收到来自电脑端发来的消息。
5.串口通信代码
#!/usr/bin/python3
import time
import serial
print("UART Demonstration Program")
print("NVIDIA Jetson Nano Developer Kit")
serial_port = serial.Serial(
port="/dev/ttyTHS1",
baudrate=115200,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
)
# Wait a second to let the port initialize
time.sleep(1)
try:
# Send a simple header
serial_port.write("UART Demonstration Program\r\n".encode())
serial_port.write("NVIDIA Jetson Nano Developer Kit\r\n".encode())
while True:
if serial_port.inWaiting() > 0:
data = serial_port.read()
print(data)
serial_port.write(data)
# if we get a carriage return, add a line feed too
# \r is a carriage return; \n is a line feed
# This is to help the tty program on the other end
# Windows is \r\n for carriage return, line feed
# Macintosh and Linux use \n
if data == "\r".encode():
# For Windows boxen on the other end
serial_port.write("\n".encode())
except KeyboardInterrupt:
print("Exiting Program")
except Exception as exception_error:
print("Error occurred. Exiting Program")
print("Error: " + str(exception_error))
finally:
serial_port.close()
pass