Top.Mail.Ru
Уведомления
Очистить все

STM32 USART overrun error?

(@stanislav)
New member

Здравствуйте!

Столкнулся с тем, что постоянно возникает ошибка 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
Метки темы
Aveal
(@aveal)
Top level Admin

Приветствую! Можно считывать данные из регистра 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
(@stanislav)
New member

@aveal благодарю, оба варианта сработали )

ОтветитьЦитата
Создатель темы Размещено : 07.02.2025 12:45
Поделиться: