秘密都在SystemInit()函数里
system_stm32f10x.c中定义了:
具体的函数调用顺序:①startup_stm32f10x_hd.s(启动文件)→②SystemInit()→③SetSysClock ()→④SetSysClockTo72()
1,
2,进入SystemInit()函数:
由于未定义STM32F10X_CL,STM32F10X_LD_VL等,所以直接跳至225行执行
3,执行SetSysClock函数
由于定义的是#define SYSCLK_FREQ_72MHz 72000000,所以会选择SetSysClockTo72()函数执行
4,执行SetSysClockTo72()函数
由于未定义STM32F10X_CL,所以直接跳至885行执行
跳出SetSysClockTo72()函数
跳出SetSysClock()函数
跳出SystemInit()函数
说明:执行完代码的885行至887行时,便已完成将系统时钟设置为72MHz。
至此,基本配置已经完成,配置的时钟如下:
SYSCLK(系统时钟) = 72MHZ(系统最高允许时钟)
AHB总线时钟 = 72MHZ(AHB最高允许时钟)
APB1总线时钟 = 36MHZ(APB1最高允许时钟) TIM2 3 4 5 6 7
APB2总线时钟 = 72MHZ(APB2最高允许时钟) TIM1
HSI:上电默认启动,因精度不高所以先不采用,以后如果需要再使用
HSE:外部高速时钟,系统时钟一般采用它,经过PLL倍频作为系统同时钟
LSE:外部低速时钟,一般专门用于RTC,等到RTC模块时再使用
LSI:内部低速时钟,精度不高,一般用于IWDGCLK