以前使用的是寄存器板,最近正在重新学习HAL库板,在使用到串口时出现问题,在单个字节收发时没有问题,在多字节收发时HAL_UART_IRQHandler()over-run报错,在网上查了许多资料都没有解决,后详细阅读正点原子的资料发现少些一个判断语句。
程序如下:
使用STM32CubeMX生成程序后,在main函数中添加 HAL_UART_Receive_IT(&huart1,&rx_data,1);将rx_data设为全局变量
在中断函数中编写回调函数,实现接收10个数据后将接收数据上传
功能未实现,在调试中设置断点,发现在调用HAL库自带的HAL_UART_IRQHandler()时报错,
报错语句为
后修改回调函数,在原回调函数中添加 接收成功判断语句,可实现多字节收发
该语句当接收成功,接收中断返回值有三种,只有字接收成功时才可以跳出上图的while语句,等待下次接收
总结:
个人感觉原程序中,发送多个字节时,串口接收未释放总线时,下个数据到来,导致串口中断报错。