第一次把串口接收跑通
问题最后不在复杂的协议里,只是一处被忽略的中断状态。
今天把 STM32 的串口接收重新梳理了一遍。现象是第一帧数据正常,第二帧开始就没有反应。
最后发现回调执行完以后没有重新开启接收。修正后,最小的逻辑只需要在回调末尾再次调用接收函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart == &huart1) {
HAL_UART_Receive_IT(&huart1, &rx_byte, 1);
}
}
这种问题适合记下来。几个月后再次遇到时,至少知道应该先看哪里。