實(shí)現(xiàn)Python與STM32通信方式
斷斷續(xù)續(xù)學(xué)了幾周Stm32后,突然想實(shí)現(xiàn)上位機(jī)和下位機(jī)的通信,恰好自己學(xué)過一點(diǎn)python,便想通過python實(shí)現(xiàn)通信.
在網(wǎng)上看見python庫pyserial可以實(shí)現(xiàn)此功能,便去官網(wǎng)找了一下 ,附上官網(wǎng)pyserial檔鏈 接:https://pyserial.readthedocs.io/en/latest/pyserial.html#overview
首先在windows的CMD命令管理器中安裝pyserial,直接在CMD中鍵入如下字符
pip install pyserial
再將Stm32用USB連接到電腦,打開設(shè)備管理器顯示端口為COM14,然后在python中寫下
import serial
#連接串口
serial = serial.Serial('COM14',115200,timeout=2) #連接COM14,波特率位115200
if serial.isOpen():
print ('串口已打開')
else:
print ('串口未打開')
#關(guān)閉串口
serial.close()
if serial.isOpen():
print ('串口未關(guān)閉')
else:
print ('串口已關(guān)閉')
運(yùn)行后出現(xiàn)下圖,記住在代碼要在最后要用 serial.close() 函數(shù)去關(guān)閉串口,否則下次會打不開串口,會報(bào)錯(cuò).

之后我們在Stm32的代碼中寫入如下示例代碼,模板來自正點(diǎn)原子的示例代碼:
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,提示系統(tǒng)正在運(yùn)行.
delay_ms(10);
}
}
該32的代碼實(shí)現(xiàn)的功能為USART接受數(shù)據(jù)并返還給發(fā)送數(shù)據(jù)方.
在python編譯器中寫下數(shù)據(jù)接收與發(fā)送的完整代碼:
import serial
#連接串口
serial = serial.Serial('COM14',115200,timeout=2)
if serial.isOpen():
print ('串口已打開')
data = b'Beking\r\n' #發(fā)送的數(shù)據(jù)
serial.write(data) #串口寫數(shù)據(jù)
print ('You Send Data:',data)
while True:
data = serial.read(20) #串口讀20位數(shù)據(jù)
if data != b'':
break
print ('receive data is :',data)
else:
print ('串口未打開')
#關(guān)閉串口
serial.close()
if serial.isOpen():
print ('串口未關(guān)閉')
else:
print ('串口已關(guān)閉')
運(yùn)行結(jié)果為下圖,發(fā)送的數(shù)據(jù)為 b'Beking\r\n' 接收數(shù)據(jù)為 b'Beking' .( 在正點(diǎn)原子的數(shù)據(jù)接受數(shù)據(jù)中要有\(zhòng)r\n字符,否則會接收不到(可以在代碼中更改))

如此就可以實(shí)現(xiàn)python與Stm32的簡單數(shù)據(jù)接發(fā),要是想實(shí)現(xiàn)更為復(fù)雜,更為實(shí)用的上位機(jī)與下位機(jī)通信,可以參考文首給出的pyserial文檔鏈接.
以上這篇實(shí)現(xiàn)Python與STM32通信方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python基礎(chǔ)之模塊相關(guān)知識總結(jié)
今天帶大家復(fù)習(xí)Python基礎(chǔ)知識,文中對模塊相關(guān)知識介紹的非常詳細(xì),對正在學(xué)習(xí)python基礎(chǔ)的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
Keras:Unet網(wǎng)絡(luò)實(shí)現(xiàn)多類語義分割方式
本文主要利用U-Net網(wǎng)絡(luò)結(jié)構(gòu)實(shí)現(xiàn)了多類的語義分割,并展示了部分測試效果,希望對你有用!2020-06-06
淺談keras 模型用于預(yù)測時(shí)的注意事項(xiàng)
這篇文章主要介紹了淺談keras 模型用于預(yù)測時(shí)的注意事項(xiàng),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
PyGame實(shí)現(xiàn)初始化導(dǎo)入所有模塊方法詳解
pygame安裝是為了開發(fā)小游戲,在下新手在經(jīng)過許多嘗試后,為大家避雷,給大家分享一個(gè)簡單有效的方法,下面這篇文章主要給大家介紹了關(guān)于Python中Pygame的詳細(xì)安裝過程的相關(guān)資料,需要的朋友可以參考下2022-11-11
matplotlib如何設(shè)置坐標(biāo)軸刻度的個(gè)數(shù)及標(biāo)簽的方法總結(jié)
這里介紹兩種設(shè)置坐標(biāo)軸刻度的方法,一種是利用pyplot提交的api去進(jìn)行設(shè)置,另一種是通過調(diào)用面向?qū)ο蟮腶pi, 即通過matplotlib.axes.Axes去設(shè)置,需要的朋友可以參考下2021-06-06
Python利用PyExecJS庫執(zhí)行JS函數(shù)的案例分析
這篇文章主要介紹了Python利用PyExecJS庫執(zhí)行JS函數(shù),本文通過案例分析給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12

