我看到 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 生成的代码?
如果没有,覆盖相关函数的干净方法是什么?
我是否缺少某些东西可以避免找到此解决方案?
小智 0
您可以通过轮询方法而不是中断方法来尝试UART。轮询方式:UART 接收到“Size”参数指定的数据量后才会返回。