實現Python與STM32通訊
阿新 • • 發佈:2018-12-16
斷斷續續學了幾周Stm32後,突然想實現上位機和下位機的通訊,恰好自己學過一點python,便想通過python實現通訊.
首先在windows的CMD命令管理器中安裝pyserial,直接在CMD中鍵入如下字元
pip install pyserial
再將Stm32用USB連線到電腦,開啟裝置管理器顯示埠為COM14,然後在python中寫下
import serial #連線串列埠 serial = serial.Serial('COM14',115200,timeout=2) #連線COM14,波特率位115200 if serial.isOpen(): print ('串列埠已開啟') else: print ('串列埠未開啟') #關閉串列埠 serial.close() if serial.isOpen(): print ('串列埠未關閉') else: print ('串列埠已關閉')
執行後出現下圖,記住在程式碼要在最後要用 serial.close() 函式去關閉串列埠,否則下次會打不開串列埠,會報錯.
之後我們在Stm32的程式碼中寫入如下示例程式碼,模板來自正點原子的示例程式碼:
while(1) { if (USART_RX_STA&0x8000) { len = USART_RX_STA&0x3FFF; for (t=0;t<len;t++) { USART_SendData(USART1,USART_RX_BUF[t]); while (USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET); } USART_RX_STA=0; } else { times++; if(times%30==0)LED0=!LED0;//閃爍LED,提示系統正在執行. delay_ms(10); } }
該32的程式碼實現的功能為USART接受資料並返還給傳送資料方.
在python編譯器中寫下資料接收與傳送的完整程式碼:
import serial #連線串列埠 serial = serial.Serial('COM14',115200,timeout=2) if serial.isOpen(): print ('串列埠已開啟') data = b'Beking\r\n' #傳送的資料 serial.write(data) #串列埠寫資料 print ('You Send Data:',data) while True: data = serial.read(20) #串列埠讀20位資料 if data != b'': break print ('receive data is :',data) else: print ('串列埠未開啟') #關閉串列埠 serial.close() if serial.isOpen(): print ('串列埠未關閉') else: print ('串列埠已關閉')
執行結果為下圖,傳送的資料為 b'Beking\r\n' 接收資料為 b'Beking' .( 在正點原子的資料接受資料中要有\r\n字元,否則會接收不到(可以在程式碼中更改))
如此就可以實現python與Stm32的簡單資料接發,要是想實現更為複雜,更為實用的上位機與下位機通訊,可以參考文首給出的pyserial文件連結.
若覺文章有助於你,可以在下面留言點贊哦 (<_>)!
若轉載本文請註明出處.