樹莓派和STM32通過USB和串口通信記錄


不管怎樣,為了簡便開發,通信選擇串口通信。

推薦文章:https://blog.csdn.net/magnetoooo/article/details/53564797

推薦測試工具:https://blog.csdn.net/u011625775/article/details/99681560(這個發送數據好像有點問題?)

采用的方案是python的pyserial。

pip insatll pyserial

 

 

查找可用端口

硬件連接:stm32使用ch340g的串口輸出,接入到樹莓派的USB口上。

通過如下代碼查找端口,通過拔插觀察實際端口。一般來說,是一個ttyUSB的標號

python3 -m serial.tools.list_ports

 

 

最簡測試代碼

進入python3環境后,該代碼實現了讀取數據(這里stm32端一直在發送數據,接收到數據表示正常)

發送數據通過dev.write即可,但是需要發送編碼數據如:b'\xd5\xbd\xbd\xa2STM32\xbf\xaa\xb7\xa2\xb0\xe5(什么什么的)

 

import serial
dev=serial.Serial('/dev/ttyUSB1',115200,timeout=0.5)
dev.readlines()

最后可以用剛開始提供的測試工具直接測試

 

提供一段測試代碼

使用的時候,注意修改COM4為指定的端口即可。這里開了兩個線程,進行數據測試。

額外參閱:https://blog.csdn.net/grubberbin/article/details/96476672

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()

  

附解碼示例代碼

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'))

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM