当前位置: 首页 > news >正文

STM32之二:时钟树

目录

1. 时钟

2. STM3时钟源(哪些可以作为时钟信号)

2.1 HSE时钟

        2.1.1 高速外部时钟信号(HSE)来源

        2.1.2 HSE外部晶体电路配置

2.2 HSI时钟

2.3 PLL时钟

2.4 LSE时钟

2.5 LSI时钟

 3. STM32时钟(哪些系统使用时钟)

3.1 系统(SYSCLK)时钟

3.2 RTC时钟

3.3 看门狗时钟

3.4 时钟输出MOC

4. STM32时钟树

4.1 AHB预分频器

5. STM32时钟配置


1. 时钟

        STM32的时钟就是周期性的脉冲,50%占空比的方波、正弦波或三角波都可作为STM32的时钟信号。

2. STM3时钟源(哪些可以作为时钟信号)

        

STM32时钟源
时钟源时钟范围主要用途
HSE高速外部时钟
4~16MMHz

1. 系统时钟

2. 128分频后输入RTC时钟

HSI

高速内部时钟

8MHz

1. 备用时钟源

2. 2分频后作为PLL输入

LSE

低速外部时钟

32.768kHz

RTC实时时钟

LSI低速内部时钟40kHz

1. 待机/停机模式下时钟

2.RTC、IDWG、AWU时钟

2.1 HSE时钟

        2.1.1 高速外部时钟信号(HSE)来源
  1. HSE外部晶体/陶瓷谐振器(通常使用这种)
  2. HSE用户外部时钟
        2.1.2 HSE外部晶体电路配置

为了减少时钟输出的失真和缩短启动稳定时间,晶体 / 陶瓷谐振器和负载电容器必须尽可能地靠近振荡器引脚。负载电容值必须根据所选择的振荡器来调整。
注:1.时钟控制寄存器(RCC_CR)中HSERDY位被置位,表示高速外部振荡器稳定
        2.时钟控制寄存器(RCC_CR)中HSEON位表示开启或关闭HSE高速外部时钟

2.2 HSI时钟

HSI时钟
来源内部8MHz
振荡器RC振荡器
作用

1. 直接作为系统时钟

2.2分频后作为PLL输入

3.如果HSE失效,HSI时钟会被作为备用时钟源

优点

1. 不需要额外的外部器件,成本较低

2.启动时间比HSE短

缺点

1.校准后时钟频率精度仍然较差

2.RC振荡器精度受电压和环境影响

时钟控制寄存器RCC_CR

1. HSIRDY位置位,表示HSI时钟稳定

2.HSION位开启或者关闭HSI时钟

2.3 PLL时钟

PLL锁相环是一种控制系统,之所以叫PLL时钟,是因为,PLL通过调整输入信号(HSE、HSI)的频率和相位,以满足系统对不同频率的要求。

PLL时钟
输入

1. HSI 2分频后输入

2.HSE

使用

1. 输入时钟源稳定后才能使能PLL(RCC_CR的HSIRDY或者HSERDY置位)

2.使能PLL前需要完成PLL配置(选择时钟源、预分频系数、倍频系数)

时钟配置寄存器(RCC_CFGR):

为何要用倍频器,而不是选择一个高频率的晶振?

对于稳定运行的电路来说,时钟频率越高,指令执行越快,单位时间内处理的功能也就越多。但是时钟源的时钟频率最高也就16MHz,达不到STM32系统时钟72MHz的要求,因此需要倍频器将外部时钟频率进行倍频,在输入给系统时钟。

倍频涉及到时钟配置寄存器(RCC_CFGR):

2.4 LSE时钟

LSE时钟
来源(输入)外部32.768KHz
振荡器外部晶体
作用

1. 驱动RTC实时时钟

2. 备份域控制寄存器(RCC_BDCR)LSERDY置位表示晶体振荡器稳定,LSEON表示开启或关闭该时钟

优点

1. 低功耗

2. 精确

2.5 LSI时钟

LSI时钟
来源内部40kHzRC震荡时钟
作用

1. 在停机模式/待机模式下保持运行

2. 独立看门狗(IDWG)时钟、自动唤醒单元(AWU)时钟

3.控制 /状态寄存器(RCC_CSR)里的LSIRDY置位表示震荡稳定,LSION位控制开启或关闭该时钟

 3. STM32时钟(哪些系统使用时钟)

3.1 系统(SYSCLK)时钟

        SYSCLK为整个芯片提供时钟信号,其来源主要有3种:

1. HSE作为系统时钟

2. HSI作为系统时钟

3.PLL作为系统时钟(又叫做HSE间接作为系统时钟)

        可在时钟控制寄存器(RCC_CR)中状态指示位查看当前系统时钟的时钟来源。

另外,当系统时钟的时钟源要进行切换时,只有目标时钟源准备就绪后,时钟源的切换才会发生,涉及时钟配置寄存器RCC_CFGR:

3.2 RTC时钟

        三个输入:LSE、LSI、HSE128分频

3.3 看门狗时钟

LSI提供40kHz时钟。如果看门狗被启动,则LSI会被强制启动,待振荡器稳定后,输入给看门狗。

3.4 时钟输出MOC

4. STM32时钟树

图中标红色方框的为时钟源,可以看到包括之前介绍的HSE、LSE、PLL、HSI、LSI。

图中标绿色方框的为使用时钟(MCO为输出时钟),包括SYSCLK、RTC、IWDG、MOC。

除此之外,时钟树右侧部分,即SYSCLK输出,主要包括外设和和AHB。

4.1 AHB预分频器

预分频器,可通过配置分频系数,调整输出时钟的频率。分频允许系统中不同部分以不同的频率运行,以满足不同模块的工作需求。【主时钟(SYSCLK)、APB1时钟、APB2时钟】

图片来源(CSDN: King~30+,侵删)

AHB预分频器的分频系数可以选择为1(不分频)、2、4、6、8、16、64、128、256、512。

涉及寄存器为时钟配置寄存器RCC_CFGR:

AHB输出到APB1总线和APB2总线,其中APB1总线最大时钟频率为36MHz,为低速时钟,片上挂载低速外设,例如看门狗定时器,USART2\3\4\5,SPI2\3等。APB2总线最大时钟频率为72MHz,其上通常为各种外设的1号选手,例如USART1、ADC1、SPI1等。

5. STM32时钟配置

看一下STM32是怎么配置系统时钟的。

此处以STM32F10xx系列为例,下载STM32固件库后,找到system_stm32f10x.c和system_stm32f10x.h两个文件,这两个文件是STM32用来配置系统时钟的。它提供了两个函数、一个变量和一些宏定义来进行时钟配置。

可以看到,通过SystemInit()函数,最终调用SetSSysclockTo72(),使用高速外部时钟源,最终在PLL锁相环9倍频,赋值给系统时钟。AHB、APB1、APB2经过分频系数分频,分别得到72MHz、36MHz、72MHz时钟频率。

观察SetSysClock(),通过宏定义最终调用所选择的主频率,如果为了降低功耗,或者需要修改STM的主频,可直接修改SYSCLK_FREQ_xxMHz宏定义来修改系统的主频,同样可以在system_stm32f10x.c文件中修改。

相关文章:

  • 和琪宝的厦门之旅~
  • 尚品汇-(四)
  • 嵌入式web 服务器boa的编译和移植
  • 探索Linux的奇妙世界:第二关---Linux的基本指令1
  • React框架的来龙去脉,react的技术原理及技术难点和要点,小白的进阶之路
  • IOS Swift : 从入门到精通结构、属性和方法 结构体,第一部分
  • 生产管理系统看板,在自动化设备领域的创新应用
  • Vue3 - 在项目中使用vue-i18n不生效的问题
  • 江协科技51单片机学习- p11 静态数码管显示
  • DbConnectionStringParser
  • SpringBoot 快速入门(保姆级详细教程)
  • 迈巴赫S480升级增强现实AR抬头显示hud比普通抬头显示HUD更好用吗
  • 如何基于Redis实现分布式锁?
  • 物理层(二)
  • 华为HCIP Datacom H12-821 卷6
  • @angular/forms 源码解析之双向绑定
  • 【mysql】环境安装、服务启动、密码设置
  • CSS实用技巧
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • Fundebug计费标准解释:事件数是如何定义的?
  • javascript面向对象之创建对象
  • js递归,无限分级树形折叠菜单
  • JS实现简单的MVC模式开发小游戏
  • Logstash 参考指南(目录)
  • python大佬养成计划----difflib模块
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • windows下使用nginx调试简介
  • 从重复到重用
  • 基于遗传算法的优化问题求解
  • 我从编程教室毕业
  • 我这样减少了26.5M Java内存!
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  •  一套莫尔斯电报听写、翻译系统
  • 在Unity中实现一个简单的消息管理器
  • 我们雇佣了一只大猴子...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​补​充​经​纬​恒​润​一​面​
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #NOIP 2014# day.2 T2 寻找道路
  • $$$$GB2312-80区位编码表$$$$
  • $jQuery 重写Alert样式方法
  • (3)nginx 配置(nginx.conf)
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (七)Activiti-modeler中文支持
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转载)CentOS查看系统信息|CentOS查看命令
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .NET 8.0 发布到 IIS
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET连接MongoDB数据库实例教程
  • .net下简单快捷的数值高低位切换
  • .net中的Queue和Stack