最近使用UART+DMA接收不定长数据,发现DMA接收不到数据,准确的说是DMA搬运的数据,但是接收缓存中并看不到数据。情况如下
USART6->SR寄存器可以查到0x10,表示进入的空闲中断
DMA_GetCurrDataCounter(USART6_RX_DMA);函数可以看到DMA确实接收到了数据
data = USART6->DR;看到data确实等于发送的最后一个字节
但是USART6_RX_BUF[ ]数组中就是没有数据。
后来发现是初始化配置的时候顺序没掌握好,应该先使能
USART_DMACmd(USART3, USART_DMAReq_Rx|USART_DMAReq_Tx, ENABLE);
然后使能使能DMA_Cmd(USART6_RX_DMA, ENABLE);
至于为什么还没有研究清楚,手册中并没有写明需要遵循这个顺序。