HAL, если что-то было послано до вызова HAL_UART_Receive_IT, то этот байт попадает в считывание. Например, если сначала заинитить MX_LPUART1_UART_Init(), а потом только подать питание на модуль блютуза HC-05 или LoRa E32, то они оба шлют какой-то мусор, либо если отправлено данных больше, чем ожидалось, и недопринятое в следующий приём попадает.
Кто нибудь сталкивался с таким? Как можно сбросить регистры или какой-нить функцией перед приёмом? Видимо HAL_UART_Receive_IT не сбрасывает, а сразу забирает. Пробовал перед ним вызывать HAL_UART_Stop_IT, он внутри вроде сбрасывает, но не помогает всё равно.
AbortRecieve
Если точнее то HAL_UART_AbortReceive_IT
Сам спросил, сам отвечу. Там выставляется флаг overrun и ошибка. Два варианта, либо выключить overrun в кубе, либо снимать вручную (__HAL_UART_CLEAR_OREFLAG(&hlpuart1); hlpuart1.ErrorCode = HAL_UART_ERROR_NONE;). И в обоих случаях надо чистить регистр приёма __HAL_UART_FLUSH_DRREGISTER(&hlpuart1); перед Receive.
Обсуждают сегодня