stm32를 이용하여 타이머인터럽트 실습을 통해 LED를 제어해보겠다.
data sheet를 보면 타이머 6과 7이 basic 타이머이므로 둘 중 하나를 사용해줄 건데 나는 타이머7을 이용할 것이다.
타이거7을 activated 해주고
global interrupt를 enable 시켜준다.
또한 paramter들을 아래와 같이 세팅해줄 것인데 datasheet상에서 타이머7은 90M의
타이머 클럭을 가지고 있는데 나는 1초마다 타이머 인터럽트가 발생하게 할 것이므로
prescaler와 period 곱의 값을 90M이 나오게끔 적절하게 설정해주었다.
(1씩 뺀 값을 넣어주어야 함)
그리고 main문에 오면 MX_TIM7_Init();함수가 있는데 그것을 F3 눌러서 자세히 보면
우리가 설정했던 것들을 확인해볼 수 있다.
그리고 인터럽트 함수이므로 stm32f4xx_it.c에 들어가보면
어떤 인터럽트가 발생했을 때 이에 대응하는 인터럽트 서비스 루틴으로 연결해주는 역할을 하는 명령인 HAL_TIM_IRQHandler(&htim7);가 있는데
F3을 눌러 자세히 들어가서 보면
타이머 update이벤트 쪽을 보면 callback함수가 있는데 이것을 main문에서 재정의 해주면 된다.
이제 다시 main.c로 돌아와서 main문 안에
타이머 인터럽트 실행 함수를 써줄 것이다.
그리고 callback 함수에서
c포트 6번이 LED핀이므로 타이머7번 인터럽트가 발생하면 LED핀이 토글되는 코드를 작성해주었다.
결과적으로 1초마다 LED가 점등되는 것을 확인하였다.
혹시 1초마다 점등되는 설정은 period값을 바꿔주신건가요? 9000인데 9000으로 설정해야 1초인건가요?