- [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; <- 주기적인 송수신을 검사하기 위해 추가하였다
}
위 함수를 수행한다.
'STM32' 카테고리의 다른 글
[stm32]기존 프로젝트의 CubeIDE 및 TouchGFX는 어떻게 실행을 해야하나 ? (0) | 2023.12.14 |
---|---|
[STM32]CAN의 Basic Parameters들의 설명 (0) | 2023.12.14 |
#if #ifdef #ifndef #if defined #else #endif (0) | 2022.11.09 |
Warning[Pa050]: non-native end of line sequence detected (this diagnostic is only issued once) (0) | 2022.08.25 |
[Windows]COM Port(컴 포트) 번호 변경 방법 (0) | 2022.06.17 |