摘要:關于串口的讀取是有固定套路的,所以這里多帶帶拉出來講一下,后面用到串口時候,直接復制粘貼就可以了。
關于串口的讀取是有固定套路的,所以這里多帶帶拉出來講一下,后面用到串口時候,直接復制粘貼就可以了。
本文從cubmax配置到代碼的編寫
點開串口8(其他串口一樣)
點開asynchronous
點開中斷,這個必須要點
點開dma,循環模式 數據長度炫byte(這些參數需要自己網上查,還有dma的作用這些基礎的東西都要了解一下)
看要用多少波特率的串口,發送端接收端要一樣不然接收不到
時鐘點到最高,這里是168hz
1是項目名稱
2路徑不能有中文
3炫mdk右邊那個電5
四個點上去
生成代碼
main函數內2句話初始化一下
其中可以去查查UART_IT_IDLE空閑中斷跟其他幀中斷之間的區別,這里一半用空閑中斷
XYZ_BUFFER是數組首地址
串口收到的消息會放到這個數組內
因為陀螺儀數據是11位所以這邊11位11位地收數據
unsigned char XYZ_BUFFER[20];//陀螺儀
中斷內的函數:
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)//標志位:如果檢測到收到數據了就進入這個if { __HAL_UART_CLEAR_IDLEFLAG(&huart8);//清除標志位,方便下次收數據 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:前面說了,單片機接收到串口的數據之后,會通過dma直接把數據送到cpu,這樣操作大大提高了信息傳輸速度,但是有一個小問題,就是串口可能沒發夠11位數據,所以第一步要暫停dma接收,
2:因為我們要11byte數據,所以用11減去ndtr寄存器(這個寄存器記錄當前代碼收到幾個數據)比如收到5個,temp就=11-5=6
3:湊齊11個byte數據,所以向CPU再發送temp個,比如前面只有5個,這里發送6個
至此,CPU內也就是XYZ_BUFFER這個數組內已經有11個數據了,但是,還沒完,我們是隨便抽取了一段連續的11字節數據,所以會遇到這種情況,就是這11位數據不是一段有效幀,而是無效幀(無效幀:比如傳感器的數據為1 2 3 4 … 11 ,而我們接收到的數據卻是:8 9 10 11 1 …7;也就是截取到前一半和后一半)為了判斷這一幀數據是不是有效數據,在3和4之間做的就是判斷,具體如何判斷有效幀一般產品介紹書會說,陀螺儀這11幀數據有個數據校驗幀
懶得找說明書,我直接貼了:從第一個數據到底10個數據累加會等于底11個數據校驗幀
串口讀取結束,我們拿到了需要的數據,并且將它存入結構體xyz
4:重新發送11幀
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/120920.html
摘要:觀看學習上官可編程陳立臣老師的樹莓派視頻,在其過程中所記錄的學習筆記一串口通信概念串口通信用于多機通信串口通信屬于全雙工通信,即雙方可以同時進行交流半雙工通信,一次只允許一方進行通信樹莓派進行串口通信一般要連接兩根線和 ...
摘要:使用庫讀寫環境光照度傳感器本文將教大家如何快速使用庫讀取光照度數據。五實驗樣機測試展示通過之前配置好的面板,通過涂鴉智能進行配網實時采集光照度傳感器的數據。 使用STM32 HAL庫讀寫環境光照度傳感器(BH1750) 本文將教大家如何快速使用STM32HAL庫讀取光照度數據。 實現功能:通...
摘要:串口通信以自己剛做的功能做為核心記錄這篇博客是基于通信協議之間的通信是十六進制進行通信的可選波特率,數據位停止位采用校驗功能和代碼的實現界面是用窗體表現的界面的實現就不過多的貼代碼和說怎么去實現了,有個很好用的工具,可以直接拖控件,跟做很像 串口通信以自己剛做的功能做為核心記錄這篇博客①. 是基于modbus通信協議之間的通信②. 是十六進制進行通信的③. 可選波特率,數據位 停止位④...
閱讀 2333·2023-04-25 14:17
閱讀 1523·2021-11-23 10:02
閱讀 2175·2021-11-23 09:51
閱讀 883·2021-10-14 09:49
閱讀 3390·2021-10-11 10:57
閱讀 2928·2021-09-24 09:47
閱讀 3054·2021-08-24 10:00
閱讀 2305·2019-08-29 18:46