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