stm32 usart dma接收未启动数据寄存器中的if字节

stm32 usart dma接收未启动数据寄存器中的if字节,stm32,stm32f4,Stm32,Stm32f4,在STM32系列上启用UART DMA接收的要求是什么?根据我的观察,如果uart接收数据寄存器中存在任何过时数据,则在启用时会阻止dma启动(我相信,因为没有新数据会触发dma中断以清除该字节并继续正常工作) 如果在中断上下文中,在设置dmar位(即uart dma接收启用)后接收到数据,dma会在退出中断后清除该位,还是锁定dma?如果是这样,如何在启用dma和退出中断上下文之间防止这种竞争条件(注意所有中断的优先级相同,因此在当前中断中中断被有效地禁用)。试试这个 设置DMA后,清除UA

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

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

试试这个

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

  • 保存
    CR1
    ,将
    CR1
    设置为0(或清除
    RE
    位),读取
    SR
    DR
    ,设置DMA,然后恢复
    CR1
试试这个

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

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

是的,这就是我最后要做的,尽管我的问题是DMA为什么不能自动读出那个字节@是的,这就是我最后要做的,尽管我的问题是DMA为什么不能自动读出那个字节@贝伦迪