stm32f4
扫描二维码
随时随地手机看文章
时钟分类
stm32f4的时钟有很多分支,主要分为主系统的时钟和一些外设时钟,主系统的时钟又通过AHB分频,分出了HCLK到AHB总线内核的时钟,cortex系统定时器时钟,FLCK自由运行时钟。PHY以太网和USB和看门狗RTC时钟不使用主系统的时钟,都是独立的使用一个内部或外部时钟源。
主要时钟源
stm32f4有一个内部16M高速时钟HSI和内部32K低速时钟LSI,系统时钟源可以选用外部的高速时钟源也可以使用内部的高速时钟HSI,当外部高速时钟不可用时,内部高速时钟会默认设置为系统时钟保证系统的运行。内部低速时钟用来当做看门狗和RTC时钟的主时钟源。stm32f4还有两个时钟输出引脚,这两个引脚通过芯片内部的时钟输出到其他需要时钟驱动的芯片上,这样可以利用芯片内部的时钟,减少晶振的使用。
时钟的输入过程
stm32的时钟可以选择外部高速时钟源HSE和内部高速时钟HSI,当外部时钟故障是会切换至内部的时钟,系统默认使用内部的高速时钟,由于内部时钟的精度不够,通常是使用外部的时钟做系统的时钟源。
系统时钟的输入过程是:内部和外部时钟首先会通过分频M分频,到PLL锁相环后通过倍频因子N进行倍频,PLL再通过P,Q,R分频输出。经过分频因子P分频后输出到系统时钟选择器,然后经过AHB PRESC 分频时钟提供给HCLK时钟,系统定时器,FLCK时钟,和APB2,APB2再通过分频输出时钟给APB1,所以stm32f4的APB2时钟时比APB的时钟要快。
例如:25M的外部晶振 -> M分频25分频-> 1M -> PLL锁相环倍频N,360倍频 -> 260M -> 锁相环分频P,2分频 -> 180M -> 系统时钟
时钟输出
stm32f4有连个引脚MCO1,MCO2用来输出芯片的内部时钟,外部的芯片可以利用stm32的时钟来做时钟源。输出时钟的时钟源可以选择,HSE外部时钟,HSI内部时钟,PLL锁相环P输出的时钟,内部低速时钟LSE,I2S的时钟 和系统时钟。输出时可以对时钟来源分频。
时钟的初始化过程
首先开启外部时钟HSE,并等待时钟稳定,然后先对AHB,APB的分频因子配置,在配置PLL锁相环的时钟输入源,选择HSE还是HSI,配置PLL锁相环的倍频因子N,和P,Q,R,然后使能PLL锁相环,下一步切换系统的时钟为锁相环时钟,等待系统时钟切换完成。在使能系统时钟前必须先配置分频因子和相关寄存器,如果先开启系统时钟再配置分频因子和相关寄存器,在时钟脉冲来临时切换状态会几个周期的不稳定,所以在使能PLL或切换系统时钟前先配置分频因子,和相关寄存器。
相关寄存器
1,RCC_CR 时钟控制寄存器
2,RCC_PLLCFGR 锁相环配置寄存器
3,RCC_CFGR 时钟配置寄存器
RCC_CR寄存器主要是HSE,HSI,PLL,PLLI2S,css的使能控制,和一些状态位,当时钟使能成功是对应的状态位会置1。
RCC_PLLCFGR 寄存器是锁相环的配置寄存器,主要是设置分频M的值,倍频N和输出的P,Q,R的值。
RCC_CFGR 寄存器主要是设置系统时钟的时钟源,和AHB的分频因子的值,以及输出时钟和RTC的分频因子的值。
系统在初始化完系统时钟后就可以正常运行程序了,不过stm32的所以外设时钟默认是不开启的,所以在使用IO引脚或者是外设功能时,需要开启相应的时钟,配置相应的时钟频率,外设才能正常工作。不开起时钟外设是不工作的,只要设置对应的RCC寄存器就可以了。