1. 程式人生 > >實現Python與STM32通訊

實現Python與STM32通訊

  斷斷續續學了幾周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文件連結.

若覺文章有助於你,可以在下面留言點贊哦 (<_>)!

若轉載本文請註明出處.