亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

RM-串口的讀取

edgardeng / 2999人閱讀

摘要:關(guān)于串口的讀取是有固定套路的,所以這里多帶帶拉出來講一下,后面用到串口時候,直接復(fù)制粘貼就可以了。

關(guān)于串口的讀取是有固定套路的,所以這里多帶帶拉出來講一下,后面用到串口時候,直接復(fù)制粘貼就可以了。
本文從cubmax配置到代碼的編寫


點開串口8(其他串口一樣)
點開asynchronous
點開中斷,這個必須要點

點開dma,循環(huán)模式 數(shù)據(jù)長度炫byte(這些參數(shù)需要自己網(wǎng)上查,還有dma的作用這些基礎(chǔ)的東西都要了解一下)

看要用多少波特率的串口,發(fā)送端接收端要一樣不然接收不到

時鐘點到最高,這里是168hz

1是項目名稱
2路徑不能有中文
3炫mdk右邊那個電5


四個點上去

生成代碼

main函數(shù)內(nèi)2句話初始化一下
其中可以去查查UART_IT_IDLE空閑中斷跟其他幀中斷之間的區(qū)別,這里一半用空閑中斷
XYZ_BUFFER是數(shù)組首地址
串口收到的消息會放到這個數(shù)組內(nèi)
因為陀螺儀數(shù)據(jù)是11位所以這邊11位11位地收數(shù)據(jù)

	unsigned char  XYZ_BUFFER[20];//陀螺儀

中斷內(nèi)的函數(shù):

void UART8_IRQHandler(void){  /* USER CODE BEGIN UART8_IRQn 0 */	  uint16_t temp;		uint8_t   j=0,sum=0;	if(__HAL_UART_GET_FLAG(&huart8,UART_FLAG_IDLE)==SET)//標(biāo)志位:如果檢測到收到數(shù)據(jù)了就進(jìn)入這個if	{	__HAL_UART_CLEAR_IDLEFLAG(&huart8);//清除標(biāo)志位,方便下次收數(shù)據(jù)	HAL_UART_DMAStop(&huart8);//    1	temp=11-hdma_uart8_rx.Instance->NDTR;//    2	HAL_UART_Transmit_DMA(&huart8,XYZ_BUFFER,temp);   //3			for(j=0;j<10;j++)					sum+=XYZ_BUFFER[j];					if(sum==XYZ_BUFFER[10]&&XYZ_BUFFER[1]==0x53)					{								Roll=(float)((XYZ_BUFFER[3]<<8)|XYZ_BUFFER[2])/32768*180;//						Pich=(float)((XYZ_BUFFER[5]<<8)|XYZ_BUFFER[4])/32768*180;						Yaw =(float)((XYZ_BUFFER[7]<<8)|XYZ_BUFFER[6])/32768*180;					}}						HAL_UART_Receive_DMA(&huart8,XYZ_BUFFER,11);  //4  /* USER CODE END UART8_IRQn 0 */  HAL_UART_IRQHandler(&huart8);  /* USER CODE BEGIN UART8_IRQn 1 */  /* USER CODE END UART8_IRQn 1 */}

代碼中分為1234部
1:前面說了,單片機(jī)接收到串口的數(shù)據(jù)之后,會通過dma直接把數(shù)據(jù)送到cpu,這樣操作大大提高了信息傳輸速度,但是有一個小問題,就是串口可能沒發(fā)夠11位數(shù)據(jù),所以第一步要暫停dma接收,
2:因為我們要11byte數(shù)據(jù),所以用11減去ndtr寄存器(這個寄存器記錄當(dāng)前代碼收到幾個數(shù)據(jù))比如收到5個,temp就=11-5=6
3:湊齊11個byte數(shù)據(jù),所以向CPU再發(fā)送temp個,比如前面只有5個,這里發(fā)送6個

至此,CPU內(nèi)也就是XYZ_BUFFER這個數(shù)組內(nèi)已經(jīng)有11個數(shù)據(jù)了,但是,還沒完,我們是隨便抽取了一段連續(xù)的11字節(jié)數(shù)據(jù),所以會遇到這種情況,就是這11位數(shù)據(jù)不是一段有效幀,而是無效幀(無效幀:比如傳感器的數(shù)據(jù)為1 2 3 4 … 11 ,而我們接收到的數(shù)據(jù)卻是:8 9 10 11 1 …7;也就是截取到前一半和后一半)為了判斷這一幀數(shù)據(jù)是不是有效數(shù)據(jù),在3和4之間做的就是判斷,具體如何判斷有效幀一般產(chǎn)品介紹書會說,陀螺儀這11幀數(shù)據(jù)有個數(shù)據(jù)校驗幀

懶得找說明書,我直接貼了:從第一個數(shù)據(jù)到底10個數(shù)據(jù)累加會等于底11個數(shù)據(jù)校驗幀
串口讀取結(jié)束,我們拿到了需要的數(shù)據(jù),并且將它存入結(jié)構(gòu)體xyz

4:重新發(fā)送11幀

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/120920.html

相關(guān)文章

  • 樹莓派學(xué)習(xí)筆記(五)串口通信

    摘要:觀看學(xué)習(xí)上官可編程陳立臣老師的樹莓派視頻,在其過程中所記錄的學(xué)習(xí)筆記一串口通信概念串口通信用于多機(jī)通信串口通信屬于全雙工通信,即雙方可以同時進(jìn)行交流半雙工通信,一次只允許一方進(jìn)行通信樹莓派進(jìn)行串口通信一般要連接兩根線和 ...

    levinit 評論0 收藏0
  • STM32CubeMX學(xué)習(xí)教程之硬件I2C讀取光照度

    摘要:使用庫讀寫環(huán)境光照度傳感器本文將教大家如何快速使用庫讀取光照度數(shù)據(jù)。五實驗樣機(jī)測試展示通過之前配置好的面板,通過涂鴉智能進(jìn)行配網(wǎng)實時采集光照度傳感器的數(shù)據(jù)。 使用STM32 HAL庫讀寫環(huán)境光照度傳感器(BH1750) 本文將教大家如何快速使用STM32HAL庫讀取光照度數(shù)據(jù)。 實現(xiàn)功能:通...

    tinylcy 評論0 收藏0
  • Java–串口之間通信及掃描槍讀取

    摘要:串口通信以自己剛做的功能做為核心記錄這篇博客是基于通信協(xié)議之間的通信是十六進(jìn)制進(jìn)行通信的可選波特率,數(shù)據(jù)位停止位采用校驗功能和代碼的實現(xiàn)界面是用窗體表現(xiàn)的界面的實現(xiàn)就不過多的貼代碼和說怎么去實現(xiàn)了,有個很好用的工具,可以直接拖控件,跟做很像 串口通信以自己剛做的功能做為核心記錄這篇博客①. 是基于modbus通信協(xié)議之間的通信②. 是十六進(jìn)制進(jìn)行通信的③. 可選波特率,數(shù)據(jù)位 停止位④...

    EsgynChina 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<