*.STM32时钟系统的配置在system_stm32f10x.c中查看。
1.拥有时钟源
由于STM32的外设很多,有的外设不需要太高的时钟频率。。同一个电路,时钟越快功耗越大,同时抗电磁干 扰能力也会越弱,所以对于较为复杂的 MCU 一般都是采取多时钟源的方法来解决这些问题。
2.时钟源
在 STM32 中,有五个时钟源,为 HSI、HSE、LSI、LSE、PLL。
从时钟频率来分可以分为:高速时钟源和低速时钟源,HIS、HSE、PLL 是高速时钟,LSI 和 LSE 是低速时钟。
从来源可分为外部时钟源和内部时钟源,外部时钟源就是从外部通过接晶振的方式获取时 钟源,其中 HSE 和 LSE 是外部时钟源,其他的是内部时钟源。
3.时钟源名称
HSI :High Speed Interal 高速内部时钟信号(内置RC振荡器,频率为8MHz,精度不高)
HSE:High Speed External 高速外部时钟信号(接外部晶振)
PLL:倍频器(原来一直想不通频率为什么可以增加。 一个4M的时钟怎么就可以升高 到40M, 现在明白了,4M的时钟并没有被升高, 而是PLL里的VCO这个东西, 这个东西可以产生一定范围的内的任意频率信号, 频率由输入的电压决定, 但是它无法稳定的输出某一个频率信号,所以外接的4M时钟就是用来作为参照的。 所以真正的倍频的时钟信号都是VCO产生的。 VCO能输出的最高频率就是这个PLL能产生的最高频率了 。VCO 是 压控振荡器的缩写。)
CSS:时钟监视系统,若果HSE失效,自动切换为HSI
LSE:Low Speed External 低速时钟信号
LSI: Low Speed Internal 低速时钟信号(内置RC振荡器,40MHz,精度不高 ,主要给独立看门狗做时钟)
RTC:Real Time Clock 实时时钟
MCO:连接引脚PA8,输出时钟信号,如图有4中来源
USB Prescaler:USB预分频器
AHB Presclaer: AHB预分频器,如图有9种分频因子可以选择
5.RCC相关配置寄存器
typedef struct
{
__IO uint32_t CR; //HSI,HSE,CSS,PLL等的使能和就绪标志位,用于等待时钟开始和稳定。
__IO uint32_t CFGR; //PLL等的时钟源选择,分频系数设定
__IO uint32_t CIR; // 清除/使能 时钟就绪中断
__IO uint32_t APB2RSTR; //APB2线上外设复位寄存器
__IO uint32_t APB1RSTR; //APB1线上外设复位寄存器
__IO uint32_t AHBENR; //DMA,SDIO等时钟使能
__IO uint32_t APB2ENR; //APB2线上外设时钟使能
__IO uint32_t APB1ENR; //APB1线上外设时钟使能
__IO uint32_t BDCR; //备份域控制寄存器
__IO uint32_t CSR; //控制状态寄存器
} RCC_TypeDef;
6.定义系统时钟函数体
根据system_stm32f10x.c中的SetSysClock函数,查看在110行的系统时钟的宏定义,注释与取消注释来改变系统时钟的设置。