HYUNTAE KIM's Portfolio
← Blog
Study

MCU Clock

STM32studyClockPLL

0. Clock 구조 요약

Clock Source → PLL → SYSCLK → Bus Clock → Peripheral

각 Peripheral은 SYSCLK을 직접 사용하는 것이 아니라, 버스 Clock(PCLK 등)을 통해 Clock을 공급받는다.

1. Clock이란

Clock은 주기적으로 반복되는 디지털 신호로, MCU 내부에서 모든 동작의 시간 기준 역할을 한다.

Clock 신호는 일정한 주기로 High 상태와 Low 상태가 반복되는 파형으로 나타난다.
Clock의 반복 속도는 주파수(Hz)로 표현되며, 이는 1초 동안 Clock 신호가 몇 번 반복되는지를 의미한다.

MCU 내부의 모든 모듈은 Clock 신호에 맞춰 동작한다.
ex. CPU 명령 실행, Timer 동작, 통신, ADC 샘플링

따라서 일반적으로 Clock 주파수가 높을수록 MCU의 처리 속도가 빨라진다.

2. Clock Source의 종류

Clock Source의 종류로는 HSE, LSE, HSI, LSI로 네가지가 있다.

  • HSE (High Speed External): 외부 크리스탈 or 오실레이터를 사용하며, 빠른 속도와 정밀함이 필요한 CAN, UART와 같은 통신에 주로 사용함
  • LSE (Low Speed External): 외부 크리스탈을 사용하며, RTC와 같이 저전력과 높은 정밀도를 필요로 할 때 주로 사용함
  • HSI (High Speed Internal): 칩 내부 RC 오실레이터를 사용하며 HSE보단 정밀도가 떨어지지만 정확도가 중요하지 않을 경우 외부 부품 없이 빠르게 사용 가능함
  • LSI (Low Speed Internal): 칩 내부 저속 오실레이터를 사용하며 LSE보다 정밀도가 떨어지기 때문에 Watchdog 같은 곳에 사용함

3. System Clock (SYSCLK)

시스템 Clock은 MCU 내부에서 CPU와 주요 버스 등 전체 시스템의 기준이 되는 메인 Clock을 의미한다.
즉 MCU 전체의 동작 속도의 기준이 되는 Clock이다.

System Clock 여러 Clock Source(HSE, LSE, PLL 등) 중 하나를 선택하여 사용한다.

4. PLL (Phase-Locked Loop)

PLL은 낮은 주파수 Clock을 높은 주파수 Clock으로 변환하는 회로이다.
즉 Clock을 증폭하는 역할을 한다.

MCU는 높은 성능을 위해 높은 주파수의 Clock이 필요하다.
하지만 외부에서는 높은 Clock을 생성하기 어렵다.
따라서 외부 Clock으로 사용하는 주파수를 PLL을 사용하여 체배하여 주파수를 높인 다음에 사용한다.

PLL 계산은 아래와 같이 된다.

SYSCLK=(Input/PLLM)PLLN/PLLPSYSCLK=(Input/PLL_M)*PLL_N/PLL_P

Pasted image 20260317144108.png
위의 표는 STM32 F446의 Datasheet를 발췌한 것이다.
표의 심볼의 의미는 아래와 같다.

  • fPLLIN=Input/PLLMf_{PLL_{IN}} = Input / PLL_M
  • fVCOOUT=fPLLINPLLNf_{VCO_{OUT}} = f_{PLL_{IN}} * PLL_N
  • fPLLOUT=fVCOOUT/PLLPf_{PLL_{OUT}} = f_{VCO_{OUT}} / PLL_P

위의 표를 참고하면 PLL_M은 0.95Input/PLLM2.100.95 \le Input / PLL_M \le 2.10 을 만족해야 한다.
또한 PLL_N은 100fPLLINPLLN432100 \le f_{PLL_{IN}} * PLL_N \le 432
마지막으로 PLL_P는 12.5fVCOOUT/PLLP18012.5 \le f_{VCO_{OUT}} / PLL_P \le 180 을 만족하는 값이 되어야 한다.

따라서 이러한 값을 만족하는 예시는 다음과 같다.
ex. HSE = 8 MHz, PLL_M = 8, PLL_N = 360, PLL_P = 2

SYSCLK=(8MHz/8)360/2=180MHzSYSCLK=(8MHz/8)*360/2=180MHz

이렇게 생성된 SYSCLK는 AHB, APB Prescaler를 통해 HCLK, PCLK 등으로 분배되며, 각 Peripheral은 해당 버스 Clock을 기반으로 동작한다.