STM32 串口 高压测试下 过载问题及处理方式
情景: 高压测试下,MCU因为串口接受方向数据过载,导致程序BUG,查找寄存器 ISR -> OER 标志为1.
处理方案一: 清除该标志位, 在中断服务函数 USART2_IRQHandler 中针对 这个标志位单独处理
__HAL_UART_GET_FLAG(&huart2, UART_FLAG_ORE);根据返回结果手动清除标志位
__HAL_UART_CLEAR_FLAG(&huart2, UART_CLEAR_OREF);或者__HAL_UART_CLEAR_OREFLAG(&huart2);
处理方案2:
查阅手册
直接禁止过载.
UART_HandleTypeDef huartNewInit;
HAL_UART_MspDeInit(&huart2);
huartNewInit = huart2;
huartNewInit.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE;
if(HAL_UART_Init(&huartNewInit)!=HAL_OK) Error_Handler();
OVRDIS 置位
高压测试 1ms上位机自动发送 串口接收后在回调函数中发出. 因为上位机发送数据长度超过接收缓冲区,丢失部分数据,程序运行稳定.
jcmaxx33@gmail.com
jcmaxx33Team@github