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. Во всяком случае, повторяю - проверь регистры.