PAGE1
PAGE1
STM32F1系列的时钟系统
1.时钟系统的概述
STM32F1系列微控制器的时钟系统是其核心功能之一,它负责提供准确的时钟信号,以确保各个外设和内核的正常运行。时钟系统的设计非常灵活,可以通过多种时钟源和配置选项来满足不同的应用需求。STM32F1系列的时钟源包括内部时钟(HSI、LSI)和外部时钟(HSE、LSE),以及PLL(Phase-LockedLoop)来提高时钟频率。
2.内部时钟源
2.1HSI(高速内部时钟)
HSI是一个8MHz的工厂校准的RC振荡器,不需要外部元件,启动时间短,非常适合用于系统初始化和备份时钟源。HSI时钟可以被系统自动启用,也可以通过软件配置来启用。
2.1.1启用HSI时钟
//启用HSI时钟
voidEnableHSIClock(void){
//设置HSION位,启用HSI时钟
RCC-CR|=RCC_CR_HSION;
//等待HSI时钟稳定
while(!(RCC-CRRCC_CR_HSIRDY)){
//等待直到HSI时钟稳定
}
}
2.2LSI(低速内部时钟)
LSI是一个32kHz的工厂校准的RC振荡器,主要用于低功耗模式下的实时时钟(RTC)和窗口看门狗(WWDG)。LSI时钟同样不需要外部元件,启动时间较短。
2.2.1启用LSI时钟
//启用LSI时钟
voidEnableLSIClock(void){
//设置LSION位,启用LSI时钟
RCC-CSR|=RCC_CSR_LSION;
//等待LSI时钟稳定
while(!(RCC-CSRRCC_CSR_LSIRDY)){
//等待直到LSI时钟稳定
}
}
3.外部时钟源
3.1HSE(高速外部时钟)
HSE可以是一个4-16MHz的晶体振荡器或一个4-26MHz的外部时钟信号。HSE时钟的精度和稳定性更高,适合用于需要高精度时钟的应用场景。
3.1.1启用HSE时钟
//启用HSE时钟
voidEnableHSEClock(void){
//设置HSEON位,启用HSE时钟
RCC-CR|=RCC_CR_HSEON;
//等待HSE时钟稳定
while(!(RCC-CRRCC_CR_HSERDY)){
//等待直到HSE时钟稳定
}
}
3.2LSE(低速外部时钟)
LSE是一个32.768kHz的晶体振荡器,主要用于实时时钟(RTC)和独立看门狗(IWDG)。LSE时钟的精度较高,适合用于需要长时间稳定运行的应用场景。
3.2.1启用LSE时钟
//启用LSE时钟
voidEnableLSEClock(void){
//设置LSEON位,启用LSE时钟
RCC-BDCR|=RCC_BDCR_LSEON;
//等待LSE时钟稳定
while(!(RCC-BDCRRCC_BDCR_LSERDY)){
//等待直到LSE时钟稳定
}
}
4.PLL(锁相环)
PLL是一种用于提高时钟频率的电路,可以将输入时钟频率(HSE或HSI)乘以一个因子,输出一个更高的时钟频率。STM32F1系列的PLL可以输出72MHz的系统时钟,适合用于高性能应用。
4.1配置PLL
配置PLL需要设置输入时钟源、倍频因子和输出时钟源。以下是一个典型的PLL配置示例,使用HSE作为输入时钟源,倍频因子为9,输出72MHz系统时钟。
4.1.1配置PLL
//配置PLL
voidConfigurePLL(void){
//禁用PLL
RCC-CR=~RCC_CR_PLLON;
//等待PLL关闭
while(RCC-CRRCC_CR_PLLRDY){
//等待直到PLL关闭
}
//选择HSE作为PLL输入时钟源
RCC-CFGR=~RCC_CFGR_PLLSRC;
RCC-CFGR|=RCC_CFGR_PLLSRC_HSE;
//设置PLL倍频因子为9
RCC-CFGR=~RCC_CFGR_PLLMULL;
RCC-CFGR|=RCC_CFGR_PLLMULL9;