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的版本,可能略有不同)
- UART空闲中断发生
- 致电
HAL_UART_IRQHandler()
- 如果启用了 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传输数据到内存后剩余的缓冲区大小!!
我正在使用 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的版本,可能略有不同)
- UART空闲中断发生
- 致电
HAL_UART_IRQHandler()
- 如果启用了 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传输数据到内存后剩余的缓冲区大小!!