[STM32]usart(uart) 송신 수신 인터럽트 사용하기

2023년 12월 14일 by 진아사랑해

    [STM32]usart(uart) 송신 수신 인터럽트 사용하기 목차
반응형

usart 또는 uart에서 송수신을 하는 경우 인터럽트 방식을 사용할 수 있다

uart4를 기준으로 설명을 하겠다

 

먼저 cubemx에서

uart4의 NVIC Setting에서 global interrupt의 enable을 클릭하여 인터럽트를 활성화시킨다

 

수신을 위해서는 초기화 부분에 아래 명령을 입력하여 인터럽트를 활성화시킨다

uint8_t uart4_rxd는 uart로 수신되는 경우 데이터를 저장하는 저장소이고, 마지막 인자인 1은 1 byte를 수신하면

인터럽트를 발생하라는 뜻이다

  HAL_UART_Receive_IT(&huart4, &uart4_rxd, 1);

 

인터럽트를 수신하면 수신된 데이터를 처리하는 부분이 있어야 한다

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{

    if(huart->Instance == USART1){  <- 어느 uart에서 수신되었는지 검사하는 부분이다

            ....

    }

    else if(huart->Instance == UART4){ <- uart4에서 수신된 데이터이면 아래의 처리를 한다

            ....

        HAL_UART_Receive_IT(&huart4, &uart4_rxd, 1);  <- 처리가 끝난 후에 다시 인터럽트를 걸어줘야 수신된다

    }

}

 

송신을 하기 위해서는 꼭 인터럽트를 쓰지 않아도 되지만

나 같은 경우에는 주기적으로 메시지 교환이 발생하지 않으면 에러 처리를 해야 하므로 사용하였다

#define COMBYTE  10

uint8_t cmbuf0_tx[10];

HAL_UART_Transmit_IT(huart, cmbuf0_tx, COMBYTE);

 

송신이 완료되면

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)

{

    uart_delay = 10;   <- 주기적인 송수신을 검사하기 위해 추가하였다

}

위 함수를 수행한다.

 

 

 

반응형