상세 컨텐츠

본문 제목

RTOS 맛보기 (3) - 인터럽트 발생하기

펌웨어 설계

by Zin9 2023. 1. 26. 21:32

본문

728x90

 

 

RTOS 맛보기 (2) - CubeMX 설정하기

RTOS 맛보기 (1) - 인터럽트로 시작하기 우리는 드라이버를 사용할 때 MCU를 사용한다. MCU를 사용하면서 일반적인 인터럽트나 타이머 등을 사용한다. 그런데 2개 이상의 함수를 실시간으로 동작하

zin9.tistory.com

 

이제 코드를 작성해보자.

아래와 같이 코드를 작성할 것이다.

 

1. 적색 LED는 항상 켜진 채로 있다.
2. 파란 버튼이 눌리면 녹색 LED는 꺼짐과 켜짐을 반복한다.
3. 파란 버튼이 눌리면 문자열을 Teraterm으로 출력한다.

우선 main 함수 초기에 적색 LED를 켜지게 하는 함수를 사용한다.

앞서 말한대로 지정된 위치에만 코드를 넣도록 한다.

적색 LED는 PG13번 포트, 녹색 LED는 PG14번 포트와 연결되어 있다.

함수 선언은 stm32f4xx_hal_gpio.c에 있다.

 

 

함수 이름만 작성하면, 도움말이 나오니 참고해서 코드를 작성하면 된다.

 

 

         ※ HAL 드라이버는 아래 그림과 같이 프로젝트에 포함되어 있다.

             CubeMX로 코드 자동생성 시 추가된다.

 

다음으로 인터럽트 발생시 실행할 코드를 작성한다.

stm32f4xx_it.c을 열어보자.

 

 

 

 

 

파란 버튼이 눌리면 EXTI0_IRQHandler() 함수가 호출된다.

EXTI0_IRQHandler() in "stm32f4xx_it.c" 는 HAL 드라이버의 IRQ 핸들러를 호출한다.

 

 

 HAL_GPIO_EXTI_IRQHandler(B1_Pin) in "stm32f4xx_hal_gpio.c"를 열어보면, callback 함수가 나온다.

이 함수로 들어가보면, 코드에 아무것도 작성하지 말라는 주의 메시지가 나온다.

뭐지?

싶지만, 자세히 읽어보면 HAL_GPIO_EXTI_Callback 이라는 함수를 다른 위치에 작성해서 사용하라는 말이다.

간단하게 생각해서 EXTI0_IRQHandler 함수와 동일한 파일에 static 함수로 지정해서 작성하면 될 것이다.

 

 

stm32fxx_it.c를 열어보자.

상단에 HAL_GPIO_EXTI_Callback 함수를 작성함으로써, EXTI0_IRQHandler()에서 이를 호출하도록 했다.

 

 

코드 작성은 끝났다.

이제 컴파일을 해보자.

순서는 [Compile] - [Download and Debug] 를 클릭한다.

 

 

디버깅 모드로 들어가면, Go 버튼을 눌러준다.

 

 

이 글에선 굳이 디버깅 방법을 소개하지 않겠다.

다음 시간엔 맛보기 마지막 시간으로 UART 통신으로 Hello World!! 를 모니터링해보자.

 

 

 

 

 

728x90

관련글 더보기