타이머: 정확한 주기와 시간 재기
타이머는 클럭을 세는 카운터입니다. 주기 인터럽트, 입력 캡처로 펄스 폭 재기, 엔코더 모드까지.
기본 동작
타이머 입력 클럭 → PSC(프리스케일러)로 나눔 → CNT가 1씩 증가 → ARR에 도달하면 0으로 돌아가며 업데이트 이벤트
주기 = (PSC + 1) × (ARR + 1) / 타이머 클럭
100MHz 타이머로 1kHz 인터럽트: PSC = 99 (1MHz), ARR = 999 → 1ms
쓰임
| 모드 | 용도 |
|---|---|
| 업데이트 인터럽트 | 정확한 제어 주기 (1kHz 속도 루프) |
| 출력 비교 / PWM | 모터, LED 밝기 |
| 입력 캡처 | 펄스 폭, 주파수 측정 (서보 신호, 초음파 센서) |
| 엔코더 모드 | A/B상 신호로 위치 자동 카운트 |
| 트리거 출력 (TRGO) | ADC 샘플링 시점 지정 |
입력 캡처로 시간 재기
신호 에지가 들어오는 순간 CNT 값이 CCR에 자동 저장됩니다. 상승 에지와 하강 에지의 CCR 차이가 펄스 폭입니다. 소프트웨어로 재는 것보다 지터가 없습니다.
HAL_Delay와의 차이
HAL_Delay는 SysTick을 기다리며 CPU를 묶어 둡니다. 주기적인 일은 타이머 인터럽트나 RTOS 태스크로 돌려야 다른 일을 동시에 할 수 있습니다.