PAGE1
PAGE1
STM32F4系列时钟与复位管理
时钟系统概述
STM32F4系列微控制器的时钟系统是其性能和功能的核心部分。时钟系统的主要功能是为微控制器的各个模块提供稳定的时钟信号,确保系统的正常运行。时钟系统包括多种时钟源,如内部RC振荡器、外部晶振、PLL(锁相环)等,这些时钟源可以通过配置选择不同的时钟路径和频率,以满足不同的应用需求。
时钟源
STM32F4系列微控制器提供了多种时钟源,主要包括:
内部RC振荡器(HSI):8MHz的内部高速RC振荡器,用于启动和备用时钟。
外部晶振(HSE):4-26MHz的外部高速晶振,通常用于高精度时钟源。
PLL(锁相环):可以将输入时钟源倍频到更高的频率,最高可达168MHz。
内部LSI振荡器:32kHz的内部低速RC振荡器,用于RTC(实时时钟)和备份域。
外部LSI晶振:32.768kHz的外部低速晶振,用于RTC和备份域。
时钟树
时钟树是指时钟信号从时钟源到各个模块的路径。STM32F4系列的时钟树如下:
系统时钟(SYSCLK):可以是HSI、HSE或PLL输出的时钟,通过系统时钟选择寄存器(RCC_CFGR)配置。
AHB总线时钟(HCLK):系统时钟经过AHB分频器分频后的时钟,用于AHB总线上的模块。
APB1总线时钟(PCLK1):AHB总线时钟经过APB1分频器分频后的时钟,用于APB1总线上的模块。
APB2总线时钟(PCLK2):AHB总线时钟经过APB2分频器分频后的时钟,用于APB2总线上的模块。
USART、I2C、SPI等外设时钟:APB1和APB2总线时钟经过进一步分频后的时钟,用于外设模块。
时钟配置寄存器
STM32F4系列的时钟配置主要通过RCC(复位和时钟控制)寄存器进行。以下是主要的RCC寄存器:
RCC_CR(ClockControlRegister):用于控制时钟源的启动和停止。
RCC_CFGR(ClockConfigurationRegister):用于配置系统时钟源、分频器等。
RCC_CIR(ClockInterruptRegister):用于配置时钟相关的中断。
RCC_AHB1/2/3/4ENR(AHB1/2/3/4PeripheralClockEnableRegister):用于启用AHB总线上的外设时钟。
RCC_APB1/2ENR(APB1/2PeripheralClockEnableRegister):用于启用APB1和APB2总线上的外设时钟。
时钟源配置
内部RC振荡器(HSI)
HSI是8MHz的内部高速RC振荡器,用于启动和备用时钟。HSI默认启用,可以在RCC_CR寄存器中进行配置。
代码示例
//启用HSI时钟
voidHSI_Enable(void){
//设置HSION位,启用HSI
RCC-CR|=RCC_CR_HSION;
//等待HSI就绪
while(!(RCC-CRRCC_CR_HSIRDY)){
//等待
}
}
//禁用HSI时钟
voidHSI_Disable(void){
//清除HSION位,禁用HSI
RCC-CR=~RCC_CR_HSION;
}
外部晶振(HSE)
HSE是4-26MHz的外部高速晶振,通常用于高精度时钟源。HSE的配置需要考虑晶振的频率和启动时间。
代码示例
//启用HSE时钟
voidHSE_Enable(uint32_tHSE_Value){
//设置HSE值
RCC-CR|=(HSE_ValueRCC_CR_HSEBYP_Pos);
//设置HSEON位,启用HSE
RCC-CR|=RCC_CR_HSEON;
//等待HSE就绪
while(!(RCC-CRRCC_CR_HSERDY)){
//等待
}
}
//禁用HSE时钟
voidHSE_Disable(void){
//清除HSEON位,禁用HSE
RCC-CR=~RCC_CR_HSEON;
}
PLL(锁相环)
PLL可以将输入时钟源倍频到更高的频率,最高可达168MHz。PLL的配置需要考虑输入时钟源、倍频因子和分频因子。
代码示例
//配置PLL
voidPLL_Config(uint32_tPLL_M,uint32_tPLL_N,uint32_tP