我看到 HAL 提供了以下函数来接收带有中断的串行数据:HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
它基本上设置了 rx 中断和返回。
HAL_UART_RxCpltCallback()
一旦接收到的字节数达到Size
.
HAL 在执行此回调之前禁用 rx 中断
问题:
传入字节的数量将是可变的(从 1 到 ~100),我需要将它们放入环形缓冲区。
所以我设置Size
为 1 并HAL_UART_Receive_IT()
在回调中再次调用以重新启用中断,如果板子不时发送 1 或 2 个字节,它会很好地工作,但超出的字节会丢失
我的猜测是它们被错过了,因为它们在中断禁用之间到达 - 启用
有没有办法让中断永远运行而不会覆盖 HAL Cube 生成的代码?
如果不是,那么覆盖所涉及功能的干净方法是什么?
有什么我遗漏的东西可以避免需要找到这个解决方案吗?