Уведомления
Очистить все
Здравствуйте!
Столкнулся с тем, что постоянно возникает ошибка overrun при приеме данных по USART. Я так понял, что это случается в тот момент, когда в контроллер приходят данные, но они не обрабатываются (например когда программа стоит на брейкпоинте). Основной вопрос - как перезапустить прием, пробовал через повторный вызов:
HAL_UART_Receive_IT(&huart2, buffer, BUFFER_SIZE);
И через:
HAL_UART_AbortReceive_IT(&huart2); HAL_UART_Receive_IT(&huart2, buffer, BUFFER_SIZE);
В обоих случаях если ошибка возникла, то прием уже не возобновляется (только после перезапуска контроллера). Подскажите пожалуйста, как можно побороть эту проблему?
Заранее спасибо!
Создатель темы Размещено : 05.02.2025 14:36
Приветствую! Можно считывать данные из регистра DR, если возникла ошибка, перед тем как заново на прием вставать:
volatile uint8_t temp = &huart2->Instance->DR; (void)temp; // Avoid unused variable warning HAL_UART_AbortReceive_IT(&huart2); HAL_UART_Receive_IT(&huart2, buffer, BUFFER_SIZE);
Либо:
__HAL_UART_CLEAR_OREFLAG(&huart2);
Размещено : 05.02.2025 16:06