11.1、时钟系统框图讲解
11.2、时钟配置相关函数讲解
参考资料:《STM32F1开发指南(精英版)》HAL库版本---4.3小节,时钟系统
6.2小节,时钟(这一节主要是讲解时钟配置的相关寄存器)
11.1、时钟系统框图讲解
(图中梯形代表选择器)
在上图中,蓝色方块代表STM32的时钟源,这些时钟源,既包括系统时钟的,也包括外设时钟的。所谓系统时钟,是最重要的时钟,因为其他外设的时钟最终都是来源于系统时钟。
HSI时钟源:高速内部时钟源,据图可知,其频率约为8MHz,(该时钟源由内部RC振荡器产生,频率不够稳定,在一些较为严密的系统,一般不使用RC振荡器作为时钟源。)
HSE时钟源:高速外部时钟源,正点原子的开发板上该时钟源可接4~16MHz的晶振(已接的是8MHz的晶振)在上图中,HSE经过的第一个选择器说明,HSE既可以直接作为选择器1的输入,也可以2分频后再作为选择器1的输入。同时系统时钟也可以选择HSE的2分频作为系统时钟的时钟源。
PLL锁相环:用于倍频,将接收的频率乘以设置好的常系数(*2~*16共十六种倍频系数)。经过PLL倍频后的时钟,可以用作系统时钟的时钟源。
CSS:时钟监控系统,在实际的开发中,系统时钟多使用HSE外部高速时钟源,为防止HSE的外部问题导致系统时钟失效,CSS就会实时监控HSE,一旦发现HSE出现问题,会优先将系统时钟的时钟源切换为HSI。
LSE:外部低速时钟源,一般用于给RTC实时时钟提供时钟源
LSI:低速内部时钟,由内部RC振荡器产生。也可以作为RTC时钟供源,但是其主要功能是给独立看门狗时钟提供时钟源。
MCO:输出内部时钟的一个引脚,(PA8)输出的时钟可以来源于:系统时钟、HSI、HSE、以及2分频PLL。
USBCLK:usb时钟去,来源于PLL产生的时钟经过1分频(即不变)或者1.5分频后产生的时钟信号
PS:为什么调用IO口前都需要使能时钟,使能时钟的意义在于:一旦使能时钟,就相当于这个串口被打开,可以使用(实现这一功能的时钟位于APB2总线上,即APB2总线时钟)这样的设计意义在于,可以关闭不需要使用的串口,减少功耗和负载。
总结:
11.2、RCC相关配置寄存器(具体方法可参考STM32中文参考手册)
typedef struct
{
__IO uint32_t CR; //HSI、HSE、CSS、PLL等的使能和就绪标志位
__IO uint32_t CFGR; //PLL等时钟源选择,分频系数设定
__IO uint32_t CIR;
__IO uint32_t APB2RSTR;
__IO uint32_t APB1RSTR;
__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;