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上位机自动发送 串口接收后在回调函数中发出. 因为上位机发送数据长度超过接收缓冲区,丢失部分数据,程序运行稳定.

posted @ 2021-10-27 00:02  jcmaxx33  阅读(460)  评论(0编辑  收藏  举报