Stm32 指定超时后有意接收完整的UART DMA中断

Stm32 指定超时后有意接收完整的UART DMA中断,stm32,dma,stm32f4,stm32f7,Stm32,Dma,Stm32f4,Stm32f7,我已经将UART配置为在DMA模式下接收,其中缓冲区的大小约为64字节。因此,基本上,HAL_UART_RxCpltCallback()DMA接收完整中断只会在接收到64个字符时触发 在STM32中是否有一种方法可以为DMA Rx配置超时,当缓冲区仅部分填充(即接收到的字符数少于64个)并且在指定的超时时间内不再接收字符时,DMA将随后引发相同的HAL_UART_RxCpltCallback()基于中断,让使用者使用UART上当前接收到的任何部分数据?这很容易,但您必须使用USART接收器超时中

我已经将UART配置为在DMA模式下接收,其中缓冲区的大小约为64字节。因此,基本上,HAL_UART_RxCpltCallback()DMA接收完整中断只会在接收到64个字符时触发


在STM32中是否有一种方法可以为DMA Rx配置超时,当缓冲区仅部分填充(即接收到的字符数少于64个)并且在指定的超时时间内不再接收字符时,DMA将随后引发相同的HAL_UART_RxCpltCallback()基于中断,让使用者使用UART上当前接收到的任何部分数据?

这很容易,但您必须使用USART接收器超时中断。

您可以将UART空闲检测中断与DMA中断并行使用。 我已经在ST32F0xx处理器上使用过多次,它工作得非常好。 F4和F7处理器上也应有空闲检测

互联网上有一些针对您的问题的教程,也提供了空闲检测的解决方案。
例如,检查这一个。

为了获得传输字节的计数,您可以使用DMA\u CNDTRxDMA\u SxNDTR寄存器(STM系列的名称不同,其中x-通道号)

该寄存器在每次DMA传输后递减。传输完成后,如果通道配置为自动加载模式,则该寄存器可以保持为零,也可以根据先前编程的值自动重新加载


不幸的是,STM HAL不提供API,您应该自己实现它。

这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-@MustaphaLarhrouch它为从事STM32 uC开发的人员提供服务。我在你的简历中没有看到任何与加州大学相关的经验,所以答案是肯定的。那么,作为一名网络开发人员,你如何判断它呢?顺便说一句,有什么DV解释吗?这非常有用。我在两个不同的项目中努力解决这个问题,我已经看到其他项目在数周内都在转动轮子。非常感谢您的链接和建议。