树莓派和STM32通过USB和串口通信记录
不管怎样,为了简便开发,通信选择串口通信。
推荐文章:https://blog.csdn.net/magnetoooo/article/details/53564797
推荐测试工具:https://blog.csdn.net/u011625775/article/details/99681560(这个发送数据好像有点问题?)
采用的方案是python的pyserial。
1 | pip insatll pyserial |
查找可用端口
硬件连接:stm32使用ch340g的串口输出,接入到树莓派的USB口上。
通过如下代码查找端口,通过拔插观察实际端口。一般来说,是一个ttyUSB的标号
1 | python3 - m serial.tools.list_ports |
最简测试代码
进入python3环境后,该代码实现了读取数据(这里stm32端一直在发送数据,接收到数据表示正常)
发送数据通过dev.write即可,但是需要发送编码数据如:b'\xd5\xbd\xbd\xa2STM32\xbf\xaa\xb7\xa2\xb0\xe5(什么什么的)
1 2 3 | import serial dev = serial.Serial( '/dev/ttyUSB1' , 115200 ,timeout = 0.5 ) dev.readlines() |
最后可以用刚开始提供的测试工具直接测试
提供一段测试代码
使用的时候,注意修改COM4为指定的端口即可。这里开了两个线程,进行数据测试。
额外参阅:https://blog.csdn.net/grubberbin/article/details/96476672
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | import serial import time import threading global ser def thread_recv(): global ser while True : read = ser.readall() if len (read) > 0 : print (read) def thread_send(): global ser while True : ser.write( 'AT+POWER_OFF\r\n' .encode()) #print(ser.readline()) time.sleep( 10 ) def usart_ctrl(): global ser ser = serial.Serial( "COM4" , 115200 ,timeout = 0.5 ) recv_data = threading.Thread(target = thread_recv) send_data = threading.Thread(target = thread_send) recv_data.start() send_data.start() usart_ctrl() |
附解码示例代码
1 2 3 4 5 6 7 | import chardet s = b '\r\n\xd5\xbd\xbd\xa2STM32\xbf\xaa\xb7\xa2\xb0\xe5 \xb4\xae\xbf\xda\xca\xb5\xd1\xe9\r\n\xd5\xfd\xb5\xe3\xd4\xad\xd7\xd3@ALIENTEK\r\n\r\nplease input the message for communication test..\r\n' print (chardet.detect(s)) print (s.decode( 'GB2312' )) str = b '\xe5\xae\x9d\xe9\xb8\xa1\xe5\xb8\x82' print ( str .decode( 'utf-8' )) |
Le vent se lève! . . . il faut tenter de vivre!
Le vent se lève! . . . il faut tenter de vivre!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步