先运用USART中止函数接纳数据,判别是否接纳到每帧数据的开端符号字符。假如接纳到就封闭USART中止,然后敞开DMA用于后续串口数据的接纳。可是呈现一个问题是每帧数据的开端符号为:A5 4A 05 00 00 40 81
然后敞开DMA传输后所接纳收到的第一个数据为0x81,也便是开端标志字符的最终一个数据。
形成这样问题的原因是:
在USART初始化时运用了函数:USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE);
尽管此刻DMA没有被使能,可是硬件上现已开端做DMA传输检测了。
解决办法:
将函数:USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE);从串口初始化函数中删除去,然后和使能DMA传输函数放在一同。这样就成功解决问题了。