今日继续我的Jetsonnano学习之路,今日学习使用Jetson硬件驱动之UART串口通信:
目录
简议串口通信:
硬件连接:
串口配置:
安装串口函数库:
设置权限:
Python代码配置:
下载测试:
简议串口通信:
对于串口通信的基础知识这里不多讲,就简议一下,具体了解可以自行百度学习。
嵌入式系统、微控制器和计算机大多使用 UART 作为设备到设备硬件通信协议的一种形式。在可用的通信协议中,UART仅使用两条线作为其发送端和接收端。尽管是一种广泛使用的硬件通信协议方法,但它并没有一直得到充分优化。在微控制器内部使用 UART 模块时,通常会忽略帧协议的正确实现。根据定义,UART是一种硬件通信协议,它使用可配置速度的异步串行通信。异步意味着没有时钟信号来同步从发送设备到接收端的输出位。
硬件连接:
查阅引脚图可知,串口TX是P8,RX是P10
串口配置:
安装串口函数库:
如果是官方镜像,应该是安装好了的:
sudo pip3 install pyserial
如果你也有类似的报错如下:
那就说明用户没有对缓存目录'/home/jetson/.cache/pip'或其父目录的所有权或写入权限。
此时可以尝试将命令改为:
sudo -H pip3 install pyserial
这样就安装好了,下面的警告不用管,感兴趣了解的翻译就放在下面了:
警告:以“root”用户运行pip可能导致权限损坏,
并与系统包管理器发生冲突。
建议使用虚拟环境:https://pip.pypa.io/warnings/venv
设置权限:
sudo chmod 777 /dev/ttyTHS1
此处的 777 表示 你想要设置的权限:
这样配置完全后,就能正常运行串口文件了~~
Python代码配置:
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,
)
time.sleep(1)
try:
#发送了两条消息给设备:
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)
#接下来进入一个循环,不断检查串口是否有数据传入,
#如果有,就读取并打印出来,并将接收到的数据发送回设备。
#如果接收到的数据是回车符 "\r",则发送换行符 "\n"回设备。
if data == "\r".encode():
# For Windows boxen on the other end
serial_port.write("\n".encode())
#当按下键盘上的Ctrl+C中断程序时,或者其他异常出现时,
#程序会捕捉异常并打印错误信息。最后,程序会关闭串口连接。
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
下载测试:
发现上位机串口能接收Jetson传来的数据,也能发送数据给jetson