STM32.USART Работа с прерываниями

Для работы с прерываниями необходима функция-обработчик. Модуль USART имеет одну такую функцию.

То есть, какое бы событие не вызвало прерывание, вызывается одна и та же функция.

Причину прерывания можно определить, проверив соответствующие флаги.

Функция имеет следующий вид:

void USART1_IRQHandler(void)
{
  unsigned char tmp;
  //если причина прерывания окончание приема
  if((USART1->SR & USART_SR_RXNE)!=0)
  {
    tmp = USART1->DR;                   //прочитать принятый байт
    .....                               //что-то делаем
  }
 
  //если причина прерывания  окончание передачи
  if((USART1->SR & USART_SR_TC)!=0)
  {
    USART1->SR &= ~USART_SR_TC;         //очистить флаг
    .....                               //что-то делаем
  }
}

Чтобы прерывания от приемопередатчика работали, необходимо разрешить прерывние от модуля :

NVIC_EnableIRQ (USART1_IRQn);           //разрешить прерывания от USART1

Затем задаем событие(я), которые будут генерить прерывания:

USART1->CR1  |= USART_CR1_TCIE;         //прерывание по окончанию передачи
USART1->CR1  |= USART_CR1_RXNEIE;       //прерывание по приему данных

Использование прерываний освободит процессор от необходимости постоянно проверять флаги.

Это позволяет высвободить его ресурсы для других действий.

Но использование DMA позволит еще больше «облегчить ему жизнь».

Об этом рассказывается в статье «USART. Использование DMA».

О первоисточнике можете узнать тут