UART (Interrupt 방식)

유명현·2021년 7월 3일
0

안녕하세요?

오늘은 UART의 Interrupt방식에 대해 다뤄보겠습니다.

인터럽트 방식이란? 인터럽트 방식은 main문에 실행 하는 도중에 인터럽트가 발생되면 MCU는 즉각적으로 하고 있는 동작을 멈추고 인터럽트 서비스 루틴을 실행합니다.

즉, 인터럽트가 걸리게 되면 스텍공간에 실행 중이던 주소번지를 저장하고 인터럽트 서비스 루틴을 실행합니다.
인터럽트 루틴을 마치게 되면, 저장 되어 있던 스텍에 작업중이였던 주소번지를 읽어 들여 작업하는 곳으로 복귀하여 하던 작업을 계속합니다.

  • Polling 방식과 Interrupt 방식의 차이점

Poliing 방식은 계속적으로 UART의 수신이 들어왔는지 안들어왔는지를 MUC가 계속해서 확인 해야 하기 때문에 소스 군데 군데 상태를 체크 할 수 있도록 코딩을 작성해야합니다.

Interrput 방식은 메인 루틴에서 잠시 멈추고 실행되는 것 이기에 메인루틴 프로그램만 작성을 하면 됩니다.

< UART2를 사용하기 위한 STM32CubeMX 설정 - 1 >

먼저 UART Interrupt 방식도 앞에 Polling 방식과 마찬가지로 Putty프로그램을 통하여 통신을 하려고 하기 떄문에 UART2를 CubeMX도 위와 같이 115200-8-N-1로 설정해줍니다.

< UART2를 사용하기 위한 STM32CubeMX 설정 - 2 >

인터럽트를 발생하기 위해 NVIC설정 항목에 USART2 항목을 체크해줘야 합니다.

< UART2를 사용하기 위한 Putty 설정 >

UART2를 Putty프로그램으로 통신하기 위해서 Putty프로그램도 115200-8-N-1로 설정해줍니다.

< UART2 Interrupt Coding & 결과 >

인터럽트 발생시키기 위해 인터럽트 활성화 함수를 위와 같이 작성합니다.

또한 콜백함수 내에 인터럽트 서비스 루틴을 작성을 하면됩니다.

저는 UART통신을 사용하여 입력한 문자를 화면에 띄우고 엔터를 입력하게 되면 NUCLEO보드를 통해 Loop Back 받는 형식으로 프로그램을 작성하였습니다.

코딩 내용을 보면 아래와 같습니다.

먼저 HAL_UART_Recevie 함수를 통해 수신된 문자가 있는지 확인합니다.

수신된 문자를 바로 화면에 띄어주기 위해 바로 아래에 Transmit함수를 통해 전송합니다.

그다음 if( '\r' == uart_test)부분을 통해 엔터입력에 유무를 판단합니다.

엔터입력이 확인 되었으면 rx_data를 통하여 엔터전에 입력한 문자를 모두 보내고 엔터가 입력되지 않았다면 rx_data에 입력한 문자를 저장합니다.

읽어주셔서 감사합니다.

profile
기억보다 기록을

0개의 댓글