基本信息
文件名称:STMicroelectronics 系列:STM32F1 系列_(5).STM32F1系列的时钟系统.docx
文件大小:25.42 KB
总页数:26 页
更新时间:2025-06-18
总字数:约1.17万字
文档摘要

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;