HAL_UARTEx_RxEventCallback 大小参数是以编程方式计算的还是由硬件计算的

Is HAL_UARTEx_RxEventCallback Size parameter calculated programmatically or by hardware

我正在使用 STM_HAL 库实现 UART-DMA,我想知道消息大小是通过硬件计算的(例如,计算时钟滴答直到线路空闲)还是通过某种程序方法(例如斯特伦)。所以如果 Size

HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) 

是由硬件计算的,我可以发送纯HEX格式的数据,但是如果它是通过strline之类的东西计算的,如果数据是0x00并且必须发送数据,我可能会收到问题在 ASCII 中。

我尝试在 Keil 中对生成的代码进行一些研究但失败了(也许我不够努力)所以也许有人可以帮助我。

如果使用UART DMA,则由硬件计算

如果您使用 ide 检查 HAL_UARTEx_RxEventCallback 的调用层次结构,您可以看到 Size 变量是如何计算的。

函数的执行流程如下(根据HAL Driver的版本,可能略有不同)

  1. UART空闲中断发生
  2. 致电HAL_UART_IRQHandler()
  3. 如果启用了 DMA mod,请调用 HAL_UARTEx_RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount))

因此,Size变量计算为(huart->RxXferSize - huart->RxXferCount)

  • huart->RxXferSize是初始化RX DMA时的设定值。
  • huart->RxXferCount(huart->hdmarx)->Instance->NDTR

NDTR是一个值由硬件计算作为DMA传输数据到内存后剩余的缓冲区大小!!