我已将UART配置为以DMA模式接收,其中缓冲区的大小约为64字节。因此,基本上,仅当接收到64个字符时才会触发HAL_UART_RxCpltCallback()DMA接收完全中断。
STM32中是否有一种方法可以配置DMA Rx的超时,当缓冲区仅被部分填充(即接收到少于64个字符)并且在指定的超时时间内我们不再接收到字符时,然后,DMA将引发相同的基于HAL_UART_RxCpltCallback()的中断,以使使用者消耗UART当前接收的部分数据吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以将UART空闲检测中断与DMA中断并行使用。 我已经在ST32F0xx处理器上使用了多次,并且运行良好。 F4和F7处理器上也应该有空闲检测功能。
互联网上有一些针对您的问题的教程,还提供了有关空闲检测的解决方案。 例如。看看这个this one。
答案 2 :(得分:0)
为了获得已传输字节的计数,可以使用 DMA_CNDTRx 或 DMA_SxNDTR 寄存器(名称与STM系列不同,其中x-通道号)。
该寄存器在每次DMA传输后递减。传输完成后,如果通道配置为自动重载模式,则该寄存器可以保持为零或通过先前编程的值自动重载。
不幸的是,STM HAL不提供API,您应该自己实现。