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