
- 타이머 : 시간재기
- 마이크로프로세서 / 디지털 시스템 : 시간을 측정하기위해 클럭을 카운트하는 방식
- STM : 몇가지 레지스터 설정 + 타이머 활성화 = 타이머에 클럭 공급 ⇒ 클럭이 들어올때마다 카운트레지스터( 클럭을 세는 레지스터) 가 자동으로 증가 그러다가 내가 설정한 특정한 값이 되면 업데이트 인터럽트 발생 ⇒ 업데이트 인터럽트가 발생 시 : 카운트 레지스터 초기화 ⇒ 0부터 다시 시작해서 특정한 값까지 증가
- 타이머의 기본 동작 TCNT : 카운트 레지스터 / 레지스터가 몇 비트 짜리냐에 따라 세는 양이 달라짐

AutoReload Register 안에 특정 값 넣으면 그 값에 다다를때마다 업데이트 인터럽트 발생

STM32F407 의 시스템동작클럭 (HCLK) : 168MHz

위 단어들은 (APB, AHB) → AMBA라는 단어를 통해 찾아보기
⇒ 데이터가 오고가는 버스의 구조에 대한 설명
[중요] APB1 / APB2 를 사용하느냐에 따라 타이머 동작 클럭이 달라짐
<PWM 할 때는 이 값들의 영향이 커지는데>
ex) APB1 의 경우 1주기가 증가하는데에 소요되는 시간 : 1/84000000(s) ⇒ 속도가 너무 빠름 ⇒ 업데이트 인터럽트가 자주 걸림 ⇒ 그렇게 좋지만은않음
⇒ 따라서, 자주걸리는 것 보다 천천히, 여유있게 걸리는 게 좋음 ⇒ prescaler : 타이머에 공급하는 입력 클럭의 속도를 조절하는 분주기 / 최대 16비트 (65535)
ex) APB1 (84,000,000) 일 경우
- prescaler = 10000 , ARR (AutoReload) = 8400 으로 설정해서 업데이트 인터럽트가 1초에 한 번 발생하는 것과
- prescaler = 20000 , ARR (AutoReload) = 4200 으로 설정해서 업데이트 인터럽트가 1초에 한 번 발생하는 것은 결과적으로 같으며, 크게 상관없음
⇒ 적절히 prescaler와 ARR을 조절하여 사용하면 됨
- 아래 표 출처 : STM32f4-discovery.com (현재는 폐쇄)

==============================실습===============================
위 표 중에서 TIM7 사용

- prescaler = 10000 , ARR (AutoReload) = 8400 인데 설정할 경우에는 -1 한 값으로 설정
- counter mode 는 up, down 이 있는데 default 는 up, TIM7는 up mode만 지원
[주요 추가사항 및 부분]
- main.c : MX_TIM7_Init
- stm32f4xx_it.c : TIM7_IRQHandler → HAL_TIM_IRQHandler → HAL_TIM_PeriodElapsedCallback → 사용자 사용
- delay와 interrupt는 다름 : delay는 1초 간 다른것도 못하고 기다리는데, 인터럽트는 다른 일 수행 중에 1초에 한 번씩 순간적으로 인터럽트 발생 및 처리
'FW > STM32' 카테고리의 다른 글
| 06-1_PWM : Timer 을 이용한 PWM (1) | 2023.02.21 |
|---|---|
| 05_EXTI (외부인터럽트) (3) | 2023.02.21 |
| 03_Character_LCD (1) | 2023.02.21 |
| 02_UART (0) | 2023.02.21 |
| 01_GPIO (0) | 2023.02.21 |