임베디드/STM32 (ARM Cortex - M4)

[STM32] 타이머

O_oz 2023. 10. 21. 15:53
반응형

이번장에서는 DHT11과 초음파 측정기를 제어할때 사용할 클락을 이용한 타이머를 생성해보고자 한다

 

먼저 TIM10을 이용해 10msec 단위의 타이머를 생성해볼건데,

데이터시트에서 TIM10이 어느 버스를 사용하는지 확인해봐야 한다

TIM10은 APB2 버스를 통해서 클락을 공급한다

 

그럼 이제 ioc 파일에서 Clock Configuration으로 가서 APB2 버스의 주파수를 확인해야한다

APB2 타이머 클락의 주파수가 168MHz인 것을 확인했다

168MHz는 1초에 168000000번 진동한다는 것을 의미하는데, 우리는 해당 주파수를 분주해서 감소시키고 분주된 주파수를 카운트해 타이머로 사용한다

 

이제 TIM10을 활성화하고 위와같이 값을 설정해준 뒤 저장해서 코드를 생성한다

Prescaler는 분주기로 분주기를 위와같이 168로 나눠주면 168000000 / 168 = 1000000Hz = 1MHz가 되는데, 이는 1초에 1백만번 진동한다는 뜻이고, 1주기는 1 / 1000000 = 0.000001 = 1us가 된다

여기서 Counter Period를 10000으로 설정하게되면 10000주기 (0.01초 = 10ms)에 타이머가 작동하게 된다

이렇게하면 10ms마다 동작하는 타이머 생성이 끝난다

저장해서 코드를 생성하자

main.c에 생성한 타이머 구조체와 Init() 함수가 생성된 것을 확인할 수 있다

main 내부에 타이머를 시작하는 함수를 작성하고

Drivers 폴더의 stm32f4xx_hal_tim.c 파일에서 해당 부분을 잘라내기해서

 

main.c에 위와같이 작성해준다

그러면 아까 타이머 start 함수가 실행된 후 10ms마다 계속 TIM10_10ms_counter가 증가하게 된다

다른 소스 파일에서 TIM10_10ms_counter를 extern 해서 if (TIM10_10ms_counter == 숫자) 같은 형식으로 타이머처럼 사용할 수 있다

 

사용은 다음장부터 알아보자!

 

반응형

'임베디드 > STM32 (ARM Cortex - M4)' 카테고리의 다른 글

[STM32] 초음파 측정기  (1) 2023.10.21
[STM32] DHT11 온 습도 측정기  (0) 2023.10.21
[STM32] UART  (0) 2023.10.20
[STM32] BUTTON 제어  (1) 2023.10.19
[STM32] LED BAR 제어  (0) 2023.10.16