1.1 什么是时钟
时钟是具有周期性的脉冲信号,最常用的是占空比50%的方波。
1.2 认识时钟树
(1)外部高速晶振接口:OSC_OUT、OSC_IN
(2)外部低速晶振接口:OSC32_IN、OSC32_OUT
备注:H:high L:low. S:speed I:internal E:external
对于正点原子DMF407开发板(主控芯片STM32F407IGT6,LQFP176),四个时钟源分别为:
(3)高速外部振荡器HSE:8MHz(晶体、陶瓷)
(4)低速外部振荡器LSE:32.768KHz(石英、陶瓷)
(5)高速内部振荡器HSI:16MHz(RC震荡器)
(6)低速内部振荡器LSI:32KHz(RC振荡器)
1.3 STM32F4时钟树
图1 STM32F4时钟树简图
图2 STM32CubeMX时钟树(F407)
图3 STM32F407样本时钟树
锁相环是自动控制系统中常用的一个反馈电路,在STM32主控中,锁相环的作用主要有两部分:输入时钟净化和倍频。前者是利用锁相环电路的反馈机制实现,后者用于使芯片在更高且频率稳定的时钟下工作。
HSE和HSI通过PLL时钟源选择器、HSE(HSI)分频器、PLL倍频系数得到SYSCLK(系统时钟)。STM32的系统时钟是可配置的,在STM32F4系列中,它可以为HSI、PLLCLK、HSE中的一个。
(1)SYSTCLK :168MHz(max)
(2)HCLK(AHB):APB1 max(42MHz)、APB2 max(84MHz)
APB1_timer_clocks max:84MHz
APB2_timer_clocks max:168MHz
(3)LSI (32KHz、IWDG、RTC)
(4)LSE(32.768KHz、RTC)
时钟源、锁相环:HAL_RCC_OscConfig()
系统时钟、总线:HAL_RCC_ClockConfig()
使能外设时钟:__HAL_RCC_PPP_CLK_ENABLE()
扩展外设时钟(RTC、ADC、USB):HAL_RCCEx_PeriphCLKConfig()
2.1 系统时钟配置步骤
(1)配置HSE_VALUE
告诉HAL库外部晶振频率,stm32xxx_hal_config.h
(2)调用SystemInit()函数(可选)
在启动文件中调用,在system_stm32xxx.c定义
(3)选择时钟源,配置PLL
通过HAL_RCC_OscConfig()函数设置
(4)选择系统时钟源,配置总线分频器
通过HAL_RCC_ClockConfig()函数设置
(5)配置扩展外设时钟(可选)
通过HAL_RCCEx_PeriphCLKConfig()函数设置
3+4+5=sys_stm32_clock_init()
2.2 外设时钟使能和失能
要使用某个外设,必需先使能该外设时钟!
__HAL_RCC_GPIOA_CLK_ENABLE();使能
__HAL_RCC_GPIOA_CLK_DISABLE();失能
2.3 sys_stm32_clock_init()函数(F4)
(1)HAL_RCC_OscConfig()函数
(2)HAL_RCC_ClockConfig()函数