Я использую чип STM32L07x8 и драйвер HAL от stcube. Никак не могу заставить uart работать в режиме прерывания. В режиме блокировки работает нормально. Я пробовал такие вещи, как
__HAL_UART_ENABLE_IT(&UartHandle_RADIO, UART_IT_RXNE);
HAL_NVIC_SetPriority(USART1_IRQn, 0, 2);
HAL_NVIC_EnableIRQ(USART1_IRQn);
до или после включения UART. Функция USART1_IRQHandler () или HAL_UART_RxCpltCallback никогда не вызывается. Укус RXNE в CR1 включен. Я просто хочу, чтобы моя программа подождала, пока не получит сигнал в UART. Я пытался позвонить
HAL_UART_Receive_IT(&UartHandle, (uint8_t *) rxBuffer, 1);
Перед основным циклом, во время основного цикла по-прежнему ничего. Совершенно не понимаю, как работает этот HAL. Все примеры, которые я нахожу, ни к чему не приводят. Мне просто нужно, чтобы моя программа подождала, пока через UART придет несколько определенных символов, затем проделала бы несколько шагов, а затем снова вернулась к ожиданию этих символов.
__HAL_RCC_USART1_CLK_ENABLE();
UartHandle_RADIO.Instance = USART1;
UartHandle_RADIO.Init.BaudRate = 115200; // 9600;
UartHandle_RADIO.Init.WordLength = USART_WORDLENGTH_8B;
UartHandle_RADIO.Init.StopBits = USART_STOPBITS_1;
UartHandle_RADIO.Init.Parity = USART_PARITY_NONE;
UartHandle_RADIO.Init.Mode = USART_MODE_TX_RX;
// __HAL_UART_ENABLE_IT(&UartHandle_RADIO, UART_IT_RXNE);
HAL_NVIC_SetPriority(USART1_IRQn, 0, 2);
HAL_NVIC_EnableIRQ(USART1_IRQn);
if (HAL_UART_DeInit(&UartHandle_RADIO) != HAL_OK) {
Error_Handler();
}
if (HAL_UART_Init(&UartHandle_RADIO) != HAL_OK) {
Error_Handler();
}