8.1 时钟系统结构8.1.1 概述

用户在运行内核和外设时可选择使用外部晶振、内部振荡器或PLL(锁相环),也可为以太网、USB OTG FS,以及HS、I2S和SDIO等需要特定时钟的外设提供合适的时钟源。STM32F429微控制器内部时钟系统以时钟树的形式存在,如图:

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(1)

1、总线时钟

RCC可通过多个预分频器配置AHB、高速APB(APB2)和低速APB(APB1)。AHB中的最大允许频率为180MHz,标记为HCLK。高速APB中的最大允许频率为90MHZ.标记为PCLK2。低速APB域的最大尤许频率为45MHz,标记为PCLK1。大部分片上外设挂载在AHB1、AHB2、APB1和APB2总线上,片上外设的工作时钟也由总线时钟通过时钟使能开关控制。

2、特殊外设时钟

大部分的外设时钟均由系统时钟(SYSCLK)提供,个别有特殊需要的外设有独立的时钟驱动源。例如:(1)来自主PLL输出(PLL48CLK)的USB .OTG FS时钟(48MHz)、基于模拟技术的随机数发生器(RNG)时钟(48MHz)和SDIO时钟(48MHz)。(2)I2S时钟:通过专用PLL(PLLI2S)或映射到I2S CKIN引脚的外部时钟提供I2S的驱动时钟,以实现高品质的音频性能。(3)由外部PHY提供的USB OTG HS(60MHz)时钟。(4)由外部PHY提供的以太网MAC时钟(TX、RX和RMII)。当使用以太网时,AHB时钟频率至少为25MHz。

3、SysTick时钟

RCC向Cortex系统定时器(SysTick)馈送8分频的AHB 时钟(HCLK/8)。SysTick 可使用HCLK/8作为其时钟源,也可使用系统时钟FCLK作为其时钟源,具体可在SysTick 控制与状态寄存器中配置。

4、定时器时钟

STM32F42系列和STM32F43系列微控制器的定时器时钟须率由硬件自动设置。根据RCC时钟配置寄存器(RCC_CFGR)中TIMPRE位的取值,共分为以下两种情况。(1)RCC DKCFGR寄存器的TIMPRE位清零:如果APB预分频器的预分频系数是1,则定时器时钟频率(TIMxCLK)为PCLKx:否则,定时器时钟频率将为APB域的频率的2倍即TIMrxCLK=2×PCLKx.(2) RCC DKCFGR寄存器的TIMPRE位置1:如果APB预分频器的预分频系数是1、2或4。则定时器时钟领半为HCLK:否则,定时器时钟须率将为APB域的频率的4倍,即TIMxCLK=4xPCLKx。大致介绍图下图所示:

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(2)

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(3)

8.1.2 时钟源1、STM32F429 系统时钟(SYSCLK)可由三种不同的时钟源来驱动:HSI、HSE、PLL。

1)、HSI是高速内部时钟,RC振荡器,频率为16MHz,精度不高。可以直接作为系统时钟或者用作PLL时钟输入。 2)、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时 钟源,频率范围为4MHz~26MHz。 3)、PLL为锁相环倍频输出。STM32F4有两个PLL:

  1. 主PLL(PLL)由HSE或者HSI提供时钟信号,并具有两个不同的输出时钟。
  2. [ ] 第一个输出PLLP用于生成高速的系统时钟(最高216MHz)
  3. [ ] 第二个输出PLLQ用于生成USB OTG FS的时钟(48MHz),随机数发生器的时钟和SDIO时钟。
  4. 专用PLL(PLLI2S)用于生成精确时钟,从而在I2S接口实现高品质音频性能。 -
2、两个次级时钟源:LSI、LSE
  1. LSI是低速内部时钟,RC振荡器,频率为32kHz,提供低功耗时钟。主要供独立看门狗和自动唤醒单元使用。
  2. LSE是低速外部时钟,接频率为32.768kHz的石英晶体。RTC
3、特殊外设时钟源

特殊外设时钟源主要提供OTG_HS_SCL、随机数发生器、以太网MAC、SDIO、I2S等需要的时钟。

8.1.3 HSE时钟

高速外部时钟信号(HSE)有以下两种输入方式:

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(4)

8.1.4 PLL配置

STM32F4系列微控制器的器件具有两个PLL,PLL内部结构图如图所示。

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(5)

8.1.5 LSE 时钟

低速外部时钟信号(LSE)有以下2种输入方式。

1.外部晶振/陶瓷谐振器(无源电路)

LSE晶振是32.768kHz低速外部晶振或陶瓷谐振器,可作为实时时钟外设(RTC)的时钟源来提供时钟/日历或其他定时功能,LSE晶振具有功耗低且精度高的优点。

2.外部时钟(有源电路)

此时内部LSE振荡电路被旁路,必须提供外部时钟源,高频率不超过1MHz。

8.1.7 时钟输出

STM32F4时钟信号输出MCO1(PA8)和MCO2(PC9)。MCO1:用户可以配置预分频器(1~5)向MCO1引脚PA8输出4个不同的时钟源:HSILSEHSEPLLMCO2:用户可以配置预分频器(1~5)向MCO2引脚PC9输出4个不同的时钟源:HSEPLLSYSCLKPLLI2SMCO最大输出时钟不超过100MHz

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(6)

8.2 PLL时钟系统配置步骤及常用库函数8.2.1 PLL系统配置步骤

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(7)

8.2.1 系统时钟设置

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(8)

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(9)

8.2.2 常用库函数

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(10)

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(11)

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(12)

8.3 应用实例

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(13)

int main(void) { u8 flag=0; delay_init(); //初始化延时函数 // LED 端口初始化 LED_Config(); /*初始化按键*/ Key_Config(); while (1) { if( Key_Scan(GPIOA,GPIO_Pin_0) == KEY_ON ) { flag=~flag; if(flag) HSE_SetSysClock(25, 180, 2, 9);//系统时钟切换到到90M,最高是216M else HSE_SetSysClock(25, 360, 2, 9);//系统时钟切换到到180M,最高是216M } LED_ON ; // LED等亮 delay_ms(500); LED_OFF; // LED等灭 delay_ms(500); } }

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(14)

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(15)

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(16)

stm32 内部时钟和外部时钟 8-玩转STM32之时钟系统(17)

,