클럭은 크게보면 2가지로 나뉜다

내부 8MHz 오실레이터와 외부에서 공급되는 클럭(OSC-IN)으로 구번, 아래 그림에서 붉은 색으로 표시된 부분이 외부 클럭을 공급할 때의 계통도

OSC-IN으로 공급된 클럭이 8MHz일 때 Clock configuration register(RCC_CFGR)의 설정에 따라 PLL회로를 거쳐 최대 72MHz로 증가

아래 그림의 내부클럭 경우 PLL을 거치러면 1/2로 클럭을 줄이고 최대 16배수까지 클럭을 나누면 최대 64MHz까지 설정 가능

  1. HSE(High Speed External) : 외부에서 공급되는 높은 주파수의 클럭(4-16MHz)
  2. HSI(High Speed Internal) : 내장되어 있는 높은 주파수의 클럭(8MHz)
  3. LSE(Low Speed External) : 외부에서 공급되는 RTC용 클럭(32.768KHz)
  4. LSI(Low Speed Internal) : 내장되어 있는 낮은 주파수의 클럭(40KHz)

image.png


STM32F103RB에서 시스템 클럭을 제어하는 레지스터는 RCC(Reset and Clock Control)레지스터(0x40021000), 모두 10개의 레지스터 구성

RCC_CR은 내외부 클럭, RCC_CFGR은 PLL의 배수를 결정, RCC_APB2RSTR, RCC_APB1RSTR 등은 주변장치에 공급되는 클럭을 세팅

시스템 클럭과 관련된 부분은 보드를 수령하고 직접 코드를 만들면서 테스트를 해봐야 제대로 검증 가능

워치독, RTC 클럭도 지원

image.png


시스템 클럭과 관련된 시스템 클럭 초기화 함수인 DeInit()의 내용을 보면 아래와 같음

해당 함수는 system_stm32f10x.c에 있는 SystemInit()과 거의 비슷

SystemInit()에는 SetSysClock() 함수 추가 되어 있다