01STM32时钟树

时钟树

时钟树就是STM32中用来产生和配置时钟,并且把配置好的时钟发送到各个外设的系统,时钟是所有外设运行的基础,所以时钟也是最先需要配置的东西,在程序中主函数之前还会执行一个SystemClock_Config()函数,这个函数就是用来配置时钟数的。芯片公司一般会配置这个时钟树的SystemClock_Config()函数。当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。在时钟树上可以配置时钟来源,各外设时钟源是否开启。

从SYSCLK系统时钟,划一根线,左边的都是时钟的产生电路,右边的都是时钟的分配电路时钟产生电路,有4个时钟源。

时钟源

HSE

外部时钟源(HSE旁路) ,它的频率最高可达25MHz。用户可通过设置在时钟控制寄存器中的HSEBYP和HSEON位来选择这一模式。外部时钟信号(50%占空比的方波、正弦波或三角波)必须连到SOC_IN引脚,同时保证OSC_OUT引脚悬空。

外部晶体/陶瓷谐振器(HSE晶体)

4~16Mz外部振荡器可为系统提供更为精确的主时钟。在时钟控制寄存器RCC_CR中的HSERDY位用来指示高速外部振荡器是否稳定。在启动时,直到这一位被硬件置'1',时钟才被释放出来。如果在时钟中断寄存器RCC_CIR中允许产生中断,将会产生相应中断。HSE晶体可以通过设置时钟控制寄存器里RCC_CR中的HSEON位被启动和关闭。

HSI

HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振荡器短。然而,即使在校准之后它的时钟频率精度仍较差。

制造工艺决定了不同芯片的RC振荡器频率会不同,这就是为什么每个芯片的HSI时钟频率在出厂前已经被ST校准到1%(25°C)的原因。系统复位时,工厂校准值被装载到时钟控制寄存器的HSICAL[7:0]位。

如果用户的应用基于不同的电压或环境温度,这将会影响RC振荡器的精度。可以通过时钟控制寄存器里的HSITRIM[4:0]位来调整HSI频率。

时钟控制寄存器中的HSIRDY位用来指示HSI RC振荡器是否稳定。在时钟启动过程中,直到这一位被硬件置'1',HSI RC输出时钟才被释放。HSI RC可由时钟控制寄存器中的HSION位来启动和关闭。

如果内部晶振起不来,那么芯片就起不来。如果HSE晶体振荡器失效,HSI时钟会被作为备用时钟源。

PLL

用来倍频。

LSE时钟

LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。

LSE晶体通过在备份域控制寄存器(RCC_BDCR)里的LSEON位启动和关闭。

在备份域控制寄存器(RCC_BDCR)里的LSERDY指示LSE晶体振荡是否稳定。在启动阶段,直到这个位被硬件置'1'后,LSE时钟信号才被释放出来。如果在时钟中断寄存器里被允许,可产生中断申请。

外部时钟源(LSE旁路)

在这个模式里必须提供一个32.768kHz频率的外部时钟源。你可以通过设置在备份域控制寄存器(RCC_BDCR)里的LSEBYP和LSEON位来选择这个模式。具有50%占空比的外部时钟信号(方波、正弦波或三角波)必须连到OSC32_IN引脚,同时保证OSC32_OUT引脚悬空。

LSI时钟

LSI RC担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟。LSI时钟频率大约40kHz(在30kHz和60kHz之间)。

LSI RC可以通过控制/状态寄存器(RCC_CSR)里的LSION位来启动或关闭。

在控制/状态寄存器(RCC_CSR)里的LSIRDY位指示低速内部振荡器是否稳定。在启动阶段,直到这个位被硬件设置为'1'后,此时钟才被释放。如果在时钟中断寄存器(RCC_CIR)里被允许,将产生LSI中断申请。

只有大容量和互联型产品可以进行LSI校准

如果需要使用低功耗时钟源,那么建议选择LSE。

时钟配置过程

SystemClock_Config()函数时钟配置过程:首先启动内部时钟,选择内部8MHz为系统时钟,暂时以内部8MHz的时钟运行,然后再启动外部时钟,配置外部时钟,进入PLL锁相环进行倍频,8MHz倍频9倍,得到72MHz,等到锁相环输出稳定后,选择锁相环输出为系统时钟,这样就可以把系统时钟8MHz切换为72MHz,这是ST配置的流程。

也可以自己分析SystemInit函数,这样分析之后,可以解决实际应用的一个问题,那就是如果外部晶振出问题了,可能会导致一个现象,就是会发现,程序的时钟慢了大概10倍,比如用定时器定一个1s的时间,结果过了大概10s才会进中断,这个问题就出在这里,如果外部晶振出问题了,系统时钟就无法切换到72MHz,那就会以内部的8MHz运行,8MHz相比较72M,大概慢了10倍。

时钟安全系统(CSS)

CSS是时钟安全系统,它也是负责切换时钟的,它可以监测外部时钟的运行状态,一旦外部时钟失效,就会自动把外部时钟切换回内部时钟,保证系统时钟的运行,防止程序卡死造成事故。

高级定时器中也有CSS的身影,在刹车输入这里,一旦CSS检测到外部时钟失效,通过或门立刻反映到输出比较,让输出控制的电机立刻停止,防止意外。

相关推荐
weixin_5803820633 分钟前
stm32 外部中断实现
stm32·单片机·嵌入式硬件
niuTaylor1 小时前
嵌入式硬件工程师从小白到入门-PCB绘制(二)
嵌入式硬件
Tlog嵌入式2 小时前
[项目]基于FreeRTOS的STM32四轴飞行器: 十二.角速度加速度滤波
stm32·单片机·嵌入式硬件·mcu·iot
Yesheldon2 小时前
高度电路中时序设计之二
嵌入式硬件·fpga开发·硬件架构·硬件工程·智能硬件
promising-w3 小时前
【TI MSPM0】PWM学习
单片机·学习·ti 单片机
Wallace Zhang3 小时前
STM32F103_LL库+寄存器学习笔记02 - 开启SysTick(滴答定时器)中断
笔记·stm32·学习
Mountain and sea4 小时前
机器人原点丢失后找回原点的解决方案与步骤
stm32·单片机·嵌入式硬件
0南城逆流04 小时前
【STM32】知识点介绍一:硬件知识
stm32·单片机·嵌入式硬件
HHONGQI1234 小时前
嵌入式系统应用-拓展-STM32 低功耗设计
stm32·单片机·嵌入式硬件
逆旅可好5 小时前
HAL库中串口中断开启
stm32·单片机·嵌入式硬件