成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

RM-串口的讀取

edgardeng / 2969人閱讀

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

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


點(diǎn)開(kāi)串口8(其他串口一樣)
點(diǎn)開(kāi)asynchronous
點(diǎn)開(kāi)中斷,這個(gè)必須要點(diǎn)

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

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

時(shí)鐘點(diǎn)到最高,這里是168hz

1是項(xiàng)目名稱
2路徑不能有中文
3炫mdk右邊那個(gè)電5


四個(gè)點(diǎn)上去

生成代碼

main函數(shù)內(nèi)2句話初始化一下
其中可以去查查UART_IT_IDLE空閑中斷跟其他幀中斷之間的區(qū)別,這里一半用空閑中斷
XYZ_BUFFER是數(shù)組首地址
串口收到的消息會(huì)放到這個(gè)數(shù)組內(nèi)
因?yàn)橥勇輧x數(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)志位:如果檢測(cè)到收到數(shù)據(jù)了就進(jìn)入這個(gè)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:前面說(shuō)了,單片機(jī)接收到串口的數(shù)據(jù)之后,會(huì)通過(guò)dma直接把數(shù)據(jù)送到cpu,這樣操作大大提高了信息傳輸速度,但是有一個(gè)小問(wèn)題,就是串口可能沒(méi)發(fā)夠11位數(shù)據(jù),所以第一步要暫停dma接收,
2:因?yàn)槲覀円?1byte數(shù)據(jù),所以用11減去ndtr寄存器(這個(gè)寄存器記錄當(dāng)前代碼收到幾個(gè)數(shù)據(jù))比如收到5個(gè),temp就=11-5=6
3:湊齊11個(gè)byte數(shù)據(jù),所以向CPU再發(fā)送temp個(gè),比如前面只有5個(gè),這里發(fā)送6個(gè)

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/120920.html

相關(guān)文章

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

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

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

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

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

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

    EsgynChina 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<