Computer Science
탄탄한 기반 실력을 위한
전공과 이론 지식 모음
Today I Learned!
배웠으면 기록을 해야지
TIL 사진
Flutter 사진
Flutter로 모바일까지
거꾸로캠퍼스 코딩랩 Flutter 앱개발 강사
스파르타코딩클럽 즉문즉답 튜터
카카오테크캠퍼스 3기 학습코치
프로필 사진
박성민
임베디드 세계에
발을 들인 박치기 공룡
임베디드 사진
EMBEDDED SYSTEM
임베디드 SW와 HW, 이론부터 실전까지
ALGORITHM
알고리즘 해결 전략 기록
🎓
CAU 소프트웨어학부
텔레칩스 차량용 임베디드 스쿨 3기
애플 개발자 아카데미 1기
깃허브 사진
GitHub
프로젝트 모아보기
Instagram
인스타그램 사진

Embedded System/MCU

[MCU] STM32F429ZIT6의 타이머들

sm_amoled 2025. 11. 7. 22:42

[MCU] STM32F429의 타이머

STM32F429ZIT6 프로세서에는 다양한 타이머들이 탑재되어있다. 그런데 이 타이머들이 하나의 종류가 여러개가 있는게 아니라 다양한 종류의 타이머를 2-4개씩 탑재해둔 것이었다. Basic, General Purpose, Advanced 타이머로 종류가 나뉘고, 또 General Purpose Timer라고 불리는 타이머가 갑자기 하위 분류가 여러개로 나뉘어 문서에 설명이 작성되어있는 등 다양한 타이머들이 있었다. 현재 SysTick 타이머와 Basic 타이머에 대해서 한 번 톺아봤는데, 그래서 다른 타이머들은 어디에 사용하는건지 전체적인 개론을 확인하고 나서 다시 디테일한 타이머 구조로 내려가는게 좋겠다 싶어서 정리해보려고 한다.

 

이번 글에서는 현재 프로세서에 어떤 타이머들이 있는지, 그리고 Clock Tree를 살펴보면서, 내가 설정할 수 있는 CLK은 어떤 것들이 파악해보고자 한다.

ㅤㅤ

타이머의 종류

STM32F429에는 7 종류의 타이머가 총 18 개 있다.

  • SysTick 타이머
  • Basic 타이머
  • General Purpose 타이머
  • Advanced 타이머
  • Independent Watchdog Timer
  • Window Watchdog Timer
  • Real-Time CLK

 

타이머와 연결된 버스

APB1 (최대 45MHz)

  • APB1 버스에는 표준 속도의 (비교적 저속의) 페리퍼럴들이 연결된다.
  • Basic Timer [TIM6, TIM7]
  • General Purpose Timer [TIM2, TIM3, TIM4, TIM5 / TIM12, TIM13, TIM14]
  • Window Watchdog
  • Real-Time CLK

APB2 (최대 90MHz)

  • APB2 버스에는 고속 샘플링 / 고정밀 타이밍이 필요한 페리퍼럴들이 연결된다.
  • General Purpose Timer [TIM9, TIM10, TIM11]
  • Advanced Timer [TIM1, TIM8]

AHB (최대 180MHz)

  • 여기에는 타이머가 붙어있지 않다.

타이머는 왜 APB에 있는가?
찾아보니, 타이머 레지스터에 CPU가 접근하는 일이 자주 일어나지 않는다. → AHB대신 APB에 붙여도 괜찮음. 오히려 타이머가 AHB에 붙어있다면 너무 빈번하게 타이머 쪽에서 인터럽트를 걸거나 신호를 주고받기 위해 AHB 버스를 사용하면서 고속 성능이 필요한 주변장치가 방해를 받게될 수 있다.

그렇다면 GPIO는 왜 AHB에 있는가?
→ 버튼 입력, 외부 인터럽트, Bit-Banging 등이 반응성이 중요하다.
→ GPIO에 값을 읽고 쓰는 작업이 타이머 작업보다 더 자주 사용 ⇒ AHB가 접근성이 더 좋음

같은 버스에 연결되어있다고 하더라도, 타이머는 주변장치보다 2배의 주파수로 동작할 수 있다.

  • 주변장치를 동작시키기에는 이미 충분한 주파수 CLK 임. 더 빨라진다고 해서 성능이 좋아지지 않고, 오히려 전력만 더 먹게 된다.
  • 그러나, 타이머는 CLK 주파수가 높을수록 더 세밀한 시간 표현이 가능하기 때문에 (직접적으로 성능 향상) BUS CLK의 2배를 이용하도록 설계되었다.
  • 대신, APB Prescaler의 값이 1인 경우에는 BUS CLK을 그대로 사용한다는 의미로 받아들여서 BUS CLK과 동일한 CLK 을 사용하고, Prescaler의 값이 2일때부터 BUS CLK의 2배를 사용한다. (위에 이미지에서도 볼 수 있음 / 여기에서 Prescaler는 Timer Prescaler와 다르다!!)

Basic 타이머

Peripheral 이름 : TIM6, TIM7

구조적 특징

  • 채널 수: 1개
  • 카운팅 방향: Upcounting 밖에 못함
  • 비트 해상도: Prescaler 가 16bit + AutoReload 가 16bit → $2^{32}$CLK 만큼 카운팅 할 수 있음!
  • 할 수 있는 것: 단순 시간 측정(인터럽트)를 위한 타이머. DAC 파형 출력을 위한 타이머. DMA 요청 생성.
  • 할 수 없는 것: PIN에서 input 신호를 받지못함. 다른 타이머의 신호를 받지못함(synchro X). 출력에 대한 비교 불가 (Output Compare X → PWM 생성 불가)

클럭 소스

APB1 → 최대 45MHz

주요 활용 목적

  • DAC 파형 생성의 트리거
  • 단순 타이밍과 딜레이 생성기

Basic Timer를 쓰는 이유

왜 General Purpose Timer 대신 Basic Timer를 쓸까?

  • General Purpose의 기능까지 필요없이 단순히 타이머 기능만 필요할 때 좀 더 HW적으로 단순한 페리퍼럴을 사용하면 전력 소모를 줄일 수 있다.
  • 복잡한 기능이 없어서 설정하기 간편함

https://etst.tistory.com/457

 

[MCU] Basic Timer

STM32F429ZIT6 / NUCLEO-F429ZI 보드 기준Basic Timer의 목적Basic Timer로 분류되는 TIM6과 TIM7은 다음의 특징을 가진다.시간 측정만 수행하는 아주 단순한 타이머이다. (Generic Timer!)내부적으로 DAC와 연결되어, D

etst.tistory.com

 

General Purpose 타이머

Peripheral 이름 : TIM2, TIM3, TIM4, TIM5

TIM9-TIM14까지 6개의 GP Timer가 더 있는데, 얘네는 단순화된 기능(구조)를 사용하는 GP Timer 이다. (풀옵션 vs 깡통)

구조적 특징

  • 채널 수: 4개
  • 카운팅 방향: Upcounting + Downcounting + Center-Aligned(오르내림)
  • 비트 해상도
    • Prescaler 가 16bit + AutoReload 가 16bit → $2^{32}$CLK 만큼 카운팅 할 수 있음!
    • TIM2, TIM5에 대해서는 ARR을 32bit 까지 사용할 수 있다! → $2^{48}$CLK 만큼 카운딩 가능
  • 할 수 있는 것
    • Output Compare → PWM 생성 가능
    • Input Capture → 외부 신호 캡쳐 가능
    • GPIO 핀 연결
    • Master/Slave 모드 → Slave로서 다른 Timer로부터 Trigger 신호를 받을 수 있다
    • DMA 요청 생성
    • External CLK 모드 → 외부 핀에서 들어오는 신호로 카운터의 값을 증감시키기
    • Encoder Interface 모드 → HW적으로 자동으로 Edge 마다 신호의 Sampling을 수행해서 모터 위치/속도 측정
  • 할 수 없는 것
    • Complementary Output (상보 출력) 없음
    • Dead-time 생성 불가
    • Break Input (비상 정지) 없음
    • Repetition Counter 없음

클럭 소스

APB1 → 최대 45MHz

하지만 APB1 prescaler ≠ 1이면 타이머 클럭은 APB1 × 2 = 90MHz

주요 활용 목적

  • PWM 신호 생성 → 모터 제어, LED 밝기 조절, 서보 제어
  • 외부 입력 신호 파악 → RC 수신기 신호 읽기, 주파수/펄스 폭 측정
  • 정밀한 시간 측정 (32-bit 타이머로 긴 시간 측정)
  • 타이머 체이닝 (여러 타이머 동기화)

General Purpose Timer를 쓰는 이유

대충 기능들을 살펴봤을 때, 사실 입력과 관련된, 출력과 관련된 기능들이 로직 작성을 통해서 충분히 구현할 수 있는 부분들 아닌가? 라는 생각이 들었다. 예를 들어서 PWM 기능 같은 경우에도 Duty Rate를 50% 으로 둔다면 100 마다 카운터를 리셋할 게 아니라, 50마다 카운터를 리셋 + 50마다 출력을 뒤집어주면 충분히 구현이 가능한 기능이라고 생각했다. 그런데, 이건 완전히 소프트웨어 적으로 생각하는 나의 오산이였다.

물론 이걸 코드로 구현하면 동작하긴 하겠지만, CPU가 관여하게된다. 그리고 GP Timer에서 Output Compare를 사용해주면 CPU의 개입 없이 Timer 자체에서 HW 적으로 PWM 신호를 만들어낼 수 있기 때문에 불필요한 CPU 낭비를 하지 않아 효율적이게 된다!

Advanced 타이머

Peripheral 이름 : TIM1, TIM8

구조적 특징

  • 채널 수: 4개
    • 3개의 채널에서는 상보 출력 (Complementary Output) → 7개의 출력 가능
  • 카운팅 방향: Upcounting + Downcounting + Center-Aligned(오르내림)
  • 비트 해상도
    • Prescaler 가 16bit + AutoReload 가 16bit
      • Repetition Counter가 8bit → $2^{40}$CLK 만큼 카운팅 할 수 있음!
  • 할 수 있는 것
    • Output Compare + Input Capture
    • Encoder Interface
    • Master Slave 모드
    • Complementary Output → 상보 출력
    • Dead-time 생성
    • Break Input (비상 중지)
    • BLDC 모터를 위한 PWM 생성
  • 할 수 없는 것
    • 타이머 기능 대부분 수행 가능함

클럭 소스

APB2 → 최대 90MHz

주요 활용 목적

  • 모터 제어에 특화된 타이머 → 3상 BLDC 모터, 3상 AC 모터(인버터) 제어
  • 스위칭 전원 공급 장치
  • 고정밀 PWM 생성
  • 비상정지가 필요한 시스템

Advanced Timer를 쓰는 이유

  • 전력 전자 회로를 제어하기 위해서는 Advanced Timer가 GP Timer 보다 유리
  • 안전이 중요한 시스템에서는 Break 기능을 위해 사용

SysTick 타이머

  • SysTick은 Cortex-M4 코어 내부에 들어있다. (주변장치가 아님 — APB 버스에 붙어있지 않다)
  • SysTick은 AHB의 클럭을 사용한다 (사실 Core의 CLK을 사용한다고 봐야함) → 최대 180MHz
  • 24bit의 값 까지 카운트를 할 수 있다. → 최대 $2^{24}$CLK 주기로 타이머를 카운트 할 수 있다.
  • 입출력이나 다른 부가적인 기능이 하나도 없는 퓨어한 타이머이다.
  • RTOS의 Tick 생성을 위해 주로 사용한다.

https://etst.tistory.com/456

 

[MCU] SysTick 타이머

SysTick 타이머란?ARMv7-M Architecture Reference Manual 에서 SysTick의 정체에 대해서 찾을 수 있다. SysTick은메인 프로세서의 CLK을 사용하는 빠른 속도의 타이머SysTick Routine을 매 주기마다 실행하는 RTOS 타이

etst.tistory.com

 

Watchdog 타이머

  • 시스템의 감시를 위해 사용하는 타이머

Independent Watchdog (IWDG)

  • 메인 CLK과 별도의 CLK(LSI — 32kHz)을 사용하여, CPU가 완전히 멈추더라도 IWDG는 동작한다.
  • 주로 시스템 복구용으로 사용
  • 주기적으로 SW적으로 IWDG에 feed를 해주어야 한다.
  • 만약 카운터가 0이 되기 전에 feed를 하지 못하면 시스템 진행에 이상이 있다고 판단하고 시스템 리셋을 수행한다.

Window Watchdog (WWDG)

  • 정해진 타이밍 범위(window) 이내에서 feed를 해야하는 워치독
  • 너무 일찍 or 너무 늦게 feed를 하면 리셋이 발생한다.
  • CPU의 부분적 오작동이나 타이밍 오류 등을 감지할 수 있다.
  • WWDG는 IWDG랑 다르게 APB1 에서 붙어서 메인 CLK을 이용한다. (목적이 CPU와 동일한 CLK에서 움직이면서 타이밍을 계산하는 것)
  • RTOS 등에서 Task의 스케줄 타이밍 검증용으로 사용

Real-Time CLK

  • 전원 꺼짐 / 저전력모드에서도 시간을 유지 (년월일시분초 단위로 유지할 수 있음)
  • 전원 리셋 시에도 시간 데이터가 초기화되지 않으며 주기적으로 인터럽트 및 알람을 걸 수 있다.
  • LSI 또는 LSE에 연결한 뒤 Prescaler로 분주하여 1Hz의 CLK 신호를 받는다.

CLK 확인해보기

사실 이걸 정리해보려고 했던건, STM32CubeIDE에서 CLK Configuration에 있는 각 항목들이 어떤 역할들을 하는지가 궁금해서였다.

우선 Clock Tree 상에서의 구조를 한 번 살펴보자. 앞서 봤던 타이머의 이름들이 눈에 띈다 (학습성취감이 끝장나네ㅋㅋ)

  • 좌측 긴 세로선에 붙은 작은 네모 : 외부와 CLK을 주고받기 위해 사용하는 입출력 Pin
  • 상단의 LSI(Low Speed Internal CLK, RC 발진) → IWDG와 RTC를 위해 사용
  • 중단의 HSE(High Speed External CLK) → SysCLK, AMBA를 위해 사용
  • 그외에도 여러 페리퍼럴을 위한 CLK

 

이런 다이어그램보다는 IDE를 통한 CLK Configuration 화면이 나에게는 조금 더 익숙해서, 여기에서 내가 설정값으로 건드릴 수 있는 것들이 무엇인지, 각각의 키워드가 무엇을 의미하는지를 약간 더 찾아봤다.

 

그리고, 여기에서 알게된 점 몇가지.

  • HSE의 값은 변경할 수 있다. (?) 그런데 이 값은 HW 적으로 이미 8MHz 으로 고정(크리스탈이 8MHz를 내도록 세공되어 있음)되어있는 수치이기 때문에 내 보드에서 이 숫자를 바꾼다고 의미가 없다. 만약 내가 크리스탈을 더 좋은 것으로 갈아끼웠다면, 이 크리스탈의 주파수를 이용하기 위해서 사용하는 옵션.
  • LSE의 값은 32,768로 고정되어있다. ← 요것은 거의 만국공통 느낌이라서 값을 변경할 수 없다. ($2^{15}$Hz 라서 이걸 주기가 1인 CLK 신호로 변경하기 용이함)
  • SAI와 LCD는 동일한 PLL을 공유한다.
  • 오디오 등의 통신 시에는 외부에서 CLK을 입력받아 CLK Source로 사용할 수도 있다.

 

각각의 타이머에 대해서는 더욱 자세하게 찾아보면서 정리하고 있다. MCU 시리즈에서 글을 정리할 때마다 링크를 첨부할 예정!
320x100

'Embedded System > MCU' 카테고리의 다른 글

[MCU] Independent 워치독 타이머 - IWDG  (0) 2025.11.09
[MCU] General Purpose Timer  (0) 2025.11.09
[MCU] Basic Timer  (2) 2025.11.07
[MCU] SysTick 타이머  (2) 2025.11.04
[MCU] Push-Pull과 Open-Drain의 장단점?  (0) 2025.11.02