Здравствуйте!
Столкнулся с тем, что постоянно возникает ошибка overrun при приеме данных по USART. Я так понял, что это случается в тот момент, когда в контроллер приходят данные, но они не обрабатываются (например когда программа стоит на брейкпоинте). Основной вопрос - как перезапустить прием, пробовал через повторный вызов:
HAL_UART_Receive_IT(&huart2, buffer, BUFFER_SIZE);
И через:
HAL_UART_AbortReceive_IT(&huart2); HAL_UART_Receive_IT(&huart2, buffer, BUFFER_SIZE);
В обоих случаях если ошибка возникла, то прием уже не возобновляется (только после перезапуска контроллера). Подскажите пожалуйста, как можно побороть эту проблему?
Заранее спасибо!
Приветствую! Можно считывать данные из регистра 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);