stm32 не получает прерывание Rx от UART

Я пытаюсь реализовать простое эхо для UART на плате обнаружения stm32f4 (используя freertos). Насколько я понимаю, это должно быть очень легко. Сначала я звоню HAL_UART_Receive_IT(&huart3, &rx_char,1) в задании. И после получения прерывания USART3_IRQHandler должен сработать. А потом в HAL_UART_RxCpltCallback я сделаю HAL_UART_Transmit(&huart3, &rx_char, 1, timeout) и, возможно, снова включить его HAL_UART_Receive_IT, Я правильно понял идею? Должно ли это работать?

Но в моем случае это не так. Я пытаюсь отправить чарс из терминала, но USART3_IRQHandler никогда не срабатывает. Ничего не произошло.

Код был сгенерирован с использованием Stm32CubeMX с Freertos, USART3, NVIC и с включенным глобальным прерыванием USART3.

Также я звоню __HAL_UART_ENABLE_IT(&huart3, UART_IT_RXNE) в основной функции. Что случилось? HAL_UART_Transmit работает отлично.

1 ответ

HAL не идеальная библиотека. Вы должны проверить регистры, если что-то пошло не так. Ваша проблема выглядит как неработающая NVIC. Проверьте это, и если оно не включалось, используйте что-то вроде - NVIC_EnableIRQ(USART3_IRQn); Или, может быть, не был включен регистр RE в CR1 в USART3. Во всяком случае, повторяю - проверь регистры.

Другие вопросы по тегам