STM32的USART接收數(shù)據(jù)通過(guò)DMA傳輸所遇到的問(wèn)題
掃描二維碼
隨時(shí)隨地手機(jī)看文章
出現(xiàn)的問(wèn)題:
先使用USART中斷函數(shù)接收數(shù)據(jù),判斷是否接收到每幀數(shù)據(jù)的起始標(biāo)記字符。如果接收到就關(guān)閉USART中斷,然后開(kāi)啟DMA用于后續(xù)串口數(shù)據(jù)的接收。但是出現(xiàn)一個(gè)問(wèn)題是每幀數(shù)據(jù)的起始標(biāo)記為:A5 4A 05 00 00 40 81
然后開(kāi)啟DMA傳輸后所接收收到的第一個(gè)數(shù)據(jù)為0x81,也就是起始標(biāo)志字符的最后一個(gè)數(shù)據(jù)。
造成這樣問(wèn)題的原因是:
在USART初始化時(shí)使用了函數(shù):USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE);
雖然此時(shí)DMA沒(méi)有被使能,但是硬件上已經(jīng)開(kāi)始做DMA傳輸檢測(cè)了。
解決辦法:
將函數(shù):USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE);從串口初始化函數(shù)中刪除掉,然后和使能DMA傳輸函數(shù)放在一起。這樣就成功解決問(wèn)題了