이제 코드를 작성해보자.
아래와 같이 코드를 작성할 것이다.
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!! 를 모니터링해보자.
RTOS 개념 정리 (1) - Task (2) | 2023.01.28 |
---|---|
RTOS 맛보기 (5) - Task 생성하기(최종 실습) (0) | 2023.01.27 |
RTOS 맛보기 (4) - 인터럽트로 문자열 출력하기 (0) | 2023.01.26 |
RTOS 맛보기 (2) - CubeMX 설정하기 (0) | 2023.01.26 |
RTOS 맛보기 (1) - 인터럽트로 시작하기 (0) | 2023.01.26 |