![]() |
在機器人控制中,單片機(Arduino/STM32)與上位機(Raspberry Pi/NVIDIA Jetson nano)之間的通信經(jīng)常采用串口通信的方式,那應(yīng)該如何使用STM32的串口通信以及根據(jù)自己定義的協(xié)議來完成數(shù)據(jù)的接收與發(fā)送呢? 確定串口的數(shù)據(jù)協(xié)議 "e" 反饋兩個電機的編碼器脈沖計數(shù)值,該計數(shù)值達到Z大值或Z小值時自動清零。 "m" l_speed r_speed "m"為控制標(biāo)志,l_speed為左輪的速度值,r_speed為右輪的速度值,該值單位為 cm/s 配置串口 為了提G串口通信的效率,減少因為字節(jié)傳輸而不斷引起中斷導(dǎo)致資源的浪費,可以采用DMA+串口空閑中斷的方式對數(shù)據(jù)進行接收。 DMA DMA:Direct Memory Access,可以實現(xiàn)一個數(shù)據(jù)從一個地址空間拷貝到另一個地址空間,并且在數(shù)據(jù)拷貝過程中無需CPU的干預(yù),在數(shù)據(jù)拷貝結(jié)束后才告知CPU進行處理。因此使用DMA功能可以釋放CPU資源。 串口空閑中斷 普通的串口處理數(shù)據(jù)方式為單字節(jié)接收,并且接收一幀數(shù)據(jù)時,需要自行判斷幀頭幀尾確定是否為一幀完整數(shù)據(jù),并且當(dāng)數(shù)據(jù)量大會導(dǎo)致頻繁進入中斷。而采用串口空閑中斷,在串口空閑時(發(fā)送完一幀數(shù)據(jù))產(chǎn)生中斷,并且可以在中斷服務(wù)函數(shù)中計算得到的數(shù)據(jù)長度,對整幀數(shù)據(jù)進行處理。 STM32CubeMX中的配置 在串口1配置中打開DMA功能,其余配置可參考之前的工程
|
版權(quán)所有 © 北京創(chuàng)澤智慧機器人科技有限公司 地址:北京 清華科技園C座五樓 電話:4006-937-088 京ICP備20010582號-2 |