Skip to content

Chapter 09

Hongjayeong-02 edited this page Oct 5, 2026 · 1 revision

09. General-Purpose Timer (TIM2)

Goal

STM32F439ZI의 TIM2 General-Purpose Timer를 이용해 1초 주기(1 Hz) 를 만들고, 1초마다 LD1(PB0)을 toggle한다.

이번 장의 핵심 흐름:

16 MHz Timer Clock
        ↓
PSC = 1599
        ↓
10 kHz
        ↓
ARR = 9999
        ↓
1 Hz Update Event
        ↓
UIF = 1
        ↓
LED Toggle

사용 register:

RCC->APB1ENR
TIM2->PSC
TIM2->ARR
TIM2->CNT
TIM2->CR1
TIM2->SR

1. TIM2 핵심

Ch08의 SysTick은 Cortex-M core 내부 timer였다.

TIM2는 STM32가 제공하는 peripheral timer다.

SysTick
→ Cortex-M Core

TIM2 → STM32 Peripheral

TIM2의 주요 register:

Register 역할
PSC 입력 clock 분주
ARR Counter 최대값
CNT 현재 counter value
CR1 Timer control
SR Status flag

가장 중요한 차이:

SysTick
COUNTFLAG

vs

TIM2 UIF

이다.


15. Why TIM2?

SysTick은 단순 timing을 만들기에는 편하지만 general-purpose timer는 이후 더 다양한 hardware 기능으로 확장할 수 있다.

TIM
├── Periodic Timing
├── PWM
├── Output Compare
├── Input Capture
└── Event Generation

따라서 이번 1Hz 실습은 이후 Timer peripheral 활용의 가장 기본적인 단계다.


16. Build Result

기존 실습 결과:

text = 764 bytes
data = 0 bytes
bss  = 2560 bytes

Warning 없이 build 완료.


17. Verification

1. Build

make clean
make

Expected:

Build PASS

text = 764 data = 0 bss = 2560


2. Check PSC

Debugger:

TIM2->PSC

Expected:

1599

계산:

16 MHz / 1600

10 kHz


3. Check ARR

Debugger:

TIM2->ARR

Expected:

9999

계산:

10 kHz / 10000

1 Hz


4. Check CNT

Watch:

TIM2->CNT

실행 중 값이 증가하는 것을 확인한다.

0
→
1
→
2
→
...

5. Check UIF

Breakpoint를 다음 줄에 걸 수 있다.

TIM2->SR &= ~SR_UIF;

1초가 지나 breakpoint에 도달하면:

TIM2->SR bit0

1

인지 확인한다.

그다음 clear 이후:

UIF

0

으로 돌아가는지 확인한다.


6. Board

Expected:

LD1 Toggle
every 1 second

즉:

LED ON  → 약 1초
LED OFF → 약 1초

이므로 완전한 ON/OFF cycle은 약:

2 seconds

이다.


18. Recommended Debug Evidence

이 장에서는 board 사진보다 debugger에서 timer register가 실제 계산값과 일치하는 것을 보여주는 것이 중요하다.

PSC = 1599
ARR = 9999
CNT = increasing
UIF = 0 → 1

이 네 가지를 한 화면에서 확인하면 좋다.


19. Screenshots to Add

images/ch09_build.png
images/ch09_psc_arr.png
images/ch09_cnt.png
images/ch09_uif.png
images/ch09_led.gif

가장 중요한 증거:

PSC / ARR Register
+
CNT Counting
+
UIF Assert
+
1-second LED Toggle

20. Key Points

16 MHz
↓
PSC + 1 = 1600
↓
10 kHz
↓
ARR + 1 = 10000
↓
1 Hz
↓
Update Event
↓
UIF
  • TIM2는 STM32의 General-Purpose Timer다.

  • TIM2를 사용하기 전에 APB1 clock을 enable한다.

  • PSC는 timer input clock을 분주한다.

  • ARR은 timer period를 결정한다.

  • CNT는 현재 counter value를 나타낸다.

  • Update Event 주파수는 f_timer / ((PSC+1) × (ARR+1))이다.

  • 16MHz에서 PSC=1599, ARR=9999로 1Hz를 만든다.

  • CR1.CEN을 set하면 counter가 동작한다.

  • Update Event가 발생하면 SR.UIF를 확인할 수 있다.

  • 이번 실습은 UIF polling 방식이다.

  • 이벤트 처리 후 UIF를 clear하고 다음 주기를 기다린다.

Clone this wiki locally