3

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

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

4

3 回答 3

4

您可以将 UART 空闲检测中断与 DMA 中断并行使用。我已经多次使用 ST32F0xx 处理器,它运行良好。F4 和 F7 处理器上也应该有空闲检测。

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

于 2018-10-08T12:55:01.677 回答
2

这很简单,但您必须改用 USART 接收器超时中断。 在此处输入图像描述

于 2018-10-05T02:10:48.437 回答
0

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

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

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

于 2018-10-25T11:41:51.873 回答