stm32 usart dma接收如果数据寄存器中的字节不启动

stm32 usart dma receive not starting if byte in data register

STM32系列开启UART DMA接收有什么要求?根据我的观察,如果 uart 接收数据寄存器中有任何陈旧数据,它将阻止 dma 在启用时启动(我相信因为没有新数据会触发 dma 中断以清除该字节并继续正常运行)。

如果在中断上下文中并且在设置 dmar 位后接收到数据(即启用 uart dma 接收),dma 会在退出中断后清除该位还是会锁定 dma?如果是这样,如何防止在启用 dma 和退出中断上下文之间发生这种竞争情况(注意所有中断的优先级相同,因此在当前中断中有效地禁用了中断)。

试试这个

  • 设置DMA后,清除UARTx->SR中的RXNE位。

  • 保存CR1,设置CR1为0(或清除RE位),读取SRDR,设置DMA,然后恢复 CR1.