初学stm32 --- 时钟配置

 

目录

 

stm32时钟系统

时钟源

(1) 2 个外部时钟源:

(2)2 个内部时钟源:

锁相环 PLL

        PLLXTPRE: HSE 分频器作为 PLL 输入 (HSE divider for PLL entry)

        PLLSRC: PLL 输入时钟源 (PLL entry clock source)

        PLLMUL: PLL 倍频系数 (PLL multiplication factor)

系统时钟 SYSCLK

        APB1 总线时钟

        APB2 总线时钟

时钟信号输出 MCO

RCC相关配置寄存器


stm32时钟系统

图1 STM32F1 时钟系统图

        图中A表示其他电路需要的输入源时钟信号;B为一个特殊的振荡电路“PLL”,由几个部分构成;C为重点要关注的MCU内的注释中“SYSCLK”; AHB预分配器将SYSCLK分频或不分频后分发给其他外设进行处理,包括到F部分的Cortex-M内核系统时钟。D和E部分分别为定时器等外设的时钟源APB/APB2。G是STM32的时钟输出功能。

时钟源

        对于STM32F1,输入时钟源主要包括HSI,HSE,LSI,LSE。其中,从时钟频率来可以分为高速时钟源和低速时钟源,其中HSI、HSE高速时钟,LSI、LSE是低速时钟。从来源可分为外部时钟源和内部时钟源,外部时钟源就是从外部通过接晶振的方式获取时钟源,其中 HSE 和 LSE 是外部时钟源;其他是内部时钟源,芯片上电即可产生,不需要借助外部电路。

(1) 2 个外部时钟源:

  •         高速外部震荡器HSE(High Speed External Clock signal)

        外接石英/陶瓷谐振器,频率为 4MHz~16MHz。本开发板使用的是 8MHz。

  •         低速外部振荡器 LSE (Low Speed External Clock signal)

        外接 32.768kHz 石英晶体,主要作用于 RTC 的时钟源。

(2)2 个内部时钟源:

  •         高速内部振荡器 HSI(High Speed Internal Clock signal)

        由内部 RC 振荡器产生,频率为 8MHz。

  •         低速内部振荡器 LSI(Low Speed Internal Clock signal)

        由内部 RC 振荡器产生,频率为 40kHz,可作为独立看门狗的时钟源

        芯片上电时默认由内部的 HSI 时钟启动,如果用户进行了硬件和软件的配置,芯片才会根据用户配置调试尝试切换到对应的外部时钟源,所以同时了解这几个时钟源信号还是很有必要的。

锁相环 PLL

        锁相环是自动控制系统中常用的一个反馈电路, 在 STM32 主控中,锁相环的作用主要有两个部分:输入时钟净化和倍频。 前者是利用锁相环电路的反馈机制实现,后者我们用于使芯片在更高且频率稳定的时钟下工作。

        在 STM32 中, 锁相环的输出也可以作为芯片系统的时钟源。 根据图 1 的时钟结构,使用锁相环时只需要进行三个部分的配置。为了方便查看,截取了使用 PLL 作为系统时钟源的配置部分,如图 2 所示。

图2 PLL 时钟配置图

        图 2 借用了在 CubeMX 下用锁相环配置 72MHz 时钟的一个示例:

  •         PLLXTPRE: HSE 分频器作为 PLL 输入 (HSE divider for PLL entry)

        即图2在标注为①的地方, 它专门用于 HSE, ST 设计它有两种方式,并把它的控制功能放在 RCC_CFGR 寄存器中, 我们引用如图3。
 

图3 设置选项值

         从 F103 参考手册可知它的值有两个:一是 2 分频, 另一种是 1 分频(不分频)。经过 HSE 分频器处理后的输出振荡时钟信号比直接输入的时钟信号更稳定。

  •         PLLSRC: PLL 输入时钟源 (PLL entry clock source)

        图2中②表示的是 PLL 时钟源的选择器, 同样的,参考 F103 参考手册:

图4 PLLSRC 锁相环时钟源选择

         它有两种可选择的输入源:设计为 HSI 的二分频时钟, 另一个是 A 处的 PLLXTPRE 处理后的 HSE 信号。

  •         PLLMUL: PLL 倍频系数 (PLL multiplication factor)

        图2中③所表示的配置锁相环倍频系数,同样地可以查到在 STM32F1 系列中, ST 设置它的有效倍频范围为 2~16 倍。

        结合图 2,要实现 72MHz 的主频率,我们通过选择 HSE 不分频作为 PLL 输入的时钟信号, 即输入 8Mhz,通过标号③选择倍频因子,可选择 2-16 倍频,我们选择 9 倍频,这样可以得到时钟信号为 8*9=72MHz。      

系统时钟 SYSCLK

         STM32 的系统时钟 SYSCLK 为整个芯片提供了时序信号。我们已经大致知道 STM32 主控是时序电路链接起来的。对于相同的稳定运行的电路,时钟频率越高,指令的执行速度越快,单位时间能处理的功能越多。 STM32 的系统时钟是可配置的,在 STM32F1 系列中,它可以为HSI、 PLLCLK、 HSE 中的一个,通过 CFGR 的位 SW[1:0]设置。

        讲解 PLL 作为系统时钟时,根据我们开发板的资源,可以把主频通过 PLL 设置为 72MHz。仍使用 PLL 作为系统时钟源,如果使用 HSI/2,那么可以得到最高主频 8MHz/2*16=64MHz。

        从上面的图 2 时钟树图可知, AHB、 APB1、 APB2、内核时钟等时钟通过系统时钟分频得到。根据得到的这个系统时钟,下面我们结合外设来看一看各个外设时钟源
 

图5 STM32F103 系统时钟生成图

         看图5 STM32F103 系统时钟, 标号 C 为系统时钟输入选择,可选时钟信号有外部高速时钟 HSE(8M)、内部高速时钟 HSI(8M)和经过倍频的 PLL CLK(72M),选择 PLL CLK 作为系统时钟,此时系统时钟的频率为 72MHz。系统时钟来到标号 D 的 AHB 预分频器,其中可选择的分频系数为 1, 2, 4, 8, 16, 32, 64, 128, 256,我们选择不分频,所以 AHB 总线时钟达到最大的 72MHz。

        下面介绍一下由 AHB 总线时钟得到的时钟:

        APB1 总线时钟

        由 HCLK 经过标号 E 的低速 APB1 预分频器得到,分频因子可以选择 1, 2, 4, 8, 16,这里我们选择的是 2 分频,所以 APB1 总线时钟为 36M。由于 APB1 是低速总线时钟,所以 APB1 总线最高频率为 36MHz,片上低速的外设就挂载在该总线上,例如有看门狗定时器、定时器 2/3/4/5/6/7、 RTC 时钟、 USART2/3/4/5、 SPI2(I2S2)与 SPI3(I2S3)、 I2C1 与 I2C2、CAN、 USB 设备和 2 个 DAC。

        APB2 总线时钟

        由 HCLK 经过标号 F 的高速 APB2 预分频器得到,分频因子可以选择 1, 2, 4, 8, 16,这里我们选择的是 1 即不分频,所以 APB2 总线时钟频率为 72M。与 APB2 高速总线链接的外设有外部中断与唤醒控制、 7 个通用目的输入/输出口(PA、 PB、 PC、 PD、 PE、 PF和 PG)、定时器 1、定时器 8、 SPI1、 USART1、 3 个 ADC 和内部温度传感器。其中标号 G 是ADC 的预分频器。

        此外, AHB 总线时钟直接作为 SDIO、 FSMC、 AHB 总线、 Cortex 内核、存储器和 DMA 的HCLK 时钟,并作为 Cortex 内核自由运行时钟 FCLK。

图6 USB、 RTC、 MCO 相关时钟

         标号 H 是 USBCLK,是一个通用串行接口时钟,时钟来源于 PLLCLK。 STM32F103 内置全速功能的 USB 外设,其串行接口引擎需要一个频率为 48MHz 的时钟源。该时钟源只能从PLL 输出端获取,可以选择为 1.5 分频或者 1 分频,也就是,当需要使用 USB 模块时, PLL 必须使能,并且时钟频率配置为 48MHz 或 72MHz。

        标号 I 是 MCO 输出内部时钟, STM32 的一个时钟输出 IO(PA8),它可以选择一个时钟信号输出,可以选择为 PLL 输出的 2 分频、 HSI、 HSE、或者系统时钟。这个时钟可以用来给外部其他系统提供时钟源。

         标号 J 是 RTC 定时器,其时钟源为 HSE/128、 LSE 或 LSI。

时钟信号输出 MCO

 STM32 允许通过设置, 通过 MCO 引脚输出一个稳定的时钟信号。在图1 中标注为“G”的部分。以下四个时钟信号可被选作 MCO 时钟:

        ● SYSCLK

        ● HSI

        ● HSE

        ● 除 2 的 PLL 时钟

        时钟的选择由时钟配置寄存器(RCC_CFGR)中的 MCO[2:0]位控制。

        我们可以通过 MCO 引脚来输出时钟信号, 测试输出时钟的频率,或作为其它需要时钟信号的外部电路的时钟。

RCC相关配置寄存器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/63589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java基础面试题025】什么是Java的Integer缓存池?

回答重点 Java的Integer缓存池(Integer Cache)是为了提升性能和节省内存。根据实践发现大部分的数据操作都集中在值比较小的范围,因此缓存这些对象可以减少内存分配和垃圾回收的负担,提升性能 在 -128到127范围内的Integer对象会…

[spring]XML配置文件标签

spring的XML配置文件的标签大体可以分为两种: 其中的默认标签,我们前面文章里面出现的标签都是默认标签,是spring本身自带的,不需要我们去引入其他东西。而自定义标签则是指非默认标签的其他的由我们或产品发行方自定义的对接spir…

简单的bytebuddy学习笔记

简单的bytebuddy学习笔记 此笔记对应b站bytebuddy学习视频进行整理,此为视频地址,此处为具体的练习代码地址 一、简介 ByteBuddy是基于ASM (ow2.io)实现的字节码操作类库。比起ASM,ByteBuddy的API更加简单易用。开发者无需了解class file …

vue3项目结合Echarts实现甘特图(可拖拽、选中等操作)

效果图: 图一:选中操作 图二:上下左右拖拽操作 本案例在echarts​​​​​​​示例机场航班甘特图的基础上修改​​​​​​​ 封装ganttEcharts组件,测试数据 airport-schedule.jsonganttEcharts代码: 直接复制粘贴可测​​​​…

Word使用分隔符实现页面部分分栏

文章目录 Word使用分隔符实现页面部分分栏分隔符使用页面设置 Word使用分隔符实现页面部分分栏 分隔符使用 word中的分隔符: 前面不分栏,后面分栏(或前面分栏,后面不分栏),只需要在分隔位置处插入分隔符:“连续”即…

【安当产品应用案例100集】033-安当TDE透明加密在移动存储加密中的应用案例

背景介绍 随着移动互联网的普及,企业和个人越来越依赖移动存储设备,如U盘、移动硬盘以及云存储服务进行数据的存储和传输。然而,这种便捷性也带来了数据安全的隐患。如何确保存储在移动设备上的数据不被非法访问和泄露,成为企业和…

WebRTC搭建与应用(一)-ICE服务搭建

WebRTC搭建与应用(一) 近期由于项目需要在研究前端WebGL渲染转为云渲染,借此机会对WebRTC、ICE信令协议等有了初步了解,在此记录一下,以防遗忘。 第一章 ICE服务搭建 文章目录 WebRTC搭建与应用(一)前言一、ICE是什么?二、什么…

利用notepad++删除特定关键字所在的行

1、按组合键Ctrl H,查找模式选择 ‘正则表达式’,不选 ‘.匹配新行’ 2、查找目标输入 : ^.*关键字.*\r\n (不保留空行) ^.*关键字.*$ (保留空行)3、替换为:(空) 配置界面参考下图: ​​…

docker安装和换源

安装: https://www.runoob.com/docker/ubuntu-docker-install.html sudo apt-get remove docker docker-engine docker.io containerd runcsudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-commoncurl -fsS…

创建第一个QML项目

文章目录 使用 Qt Creator 创建 Qt Quick 项目详解为什么选择 Qt Creator?1. 打开 Qt Creator2. 选择项目模板3. 设置项目名称与路径4. 定义项目细节5. 配置构建套件6. 检查项目配置7. 编译并运行项目后续操作修改界面添加功能 总结 使用 Qt Creator 创建 Qt Quick …

瑞吉外卖项目学习笔记(二)Swagger、logback、表单校验和参数打印功能的实现

瑞吉外卖项目学习笔记(一)准备工作、员工登录功能实现 文章目录 3 项目组件优化3.1 实现Swagger文档输出3.2 实现logback日志打印3.3 实现表单校验功能3.4 实现请求参数和响应参数的打印 3 项目组件优化 3.1 实现Swagger文档输出 1)在application.yml中增加knife4…

基于字节大模型的论文翻译(含免费源码)

基于字节大模型的论文翻译 源代码: 👏 star ✨ https://github.com/boots-coder/LLM-application 展示 项目简介 本项目是一个基于大语言模型(Large Language Model, LLM)的论文阅读与翻译辅助工具。它通过用户界面&#xff08…

mysql的事务控制和数据库的备份和恢复

事务控制语句 行锁和死锁 行锁 两个客户端同时对同一索引行进行操作 客户端1正常运行 客户端2想修改,被锁行 除非将事务提交才能继续运行 死锁 客户端1删除第5行 客户端2设置第1行为排他锁 客户端1删除行1被锁 客户端2更新行5被锁 如何避免死锁 mysql的备份和还…

Tengine:Nginx二次开发-高性能进化

前言:在当今的互联网时代,Web 服务器的性能和稳定性对于网站的成功至关重要。Nginx 以其高性能和可扩展性而闻名,但有时候,我们需要更多的特性来满足特定的业务需求。Tengine,作为一个由淘宝网发起的 Nginx 二次开发版…

RK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGB

RK3588 ,基于FFmpeg, 拉取RTSP,使用 mpp 实现硬解码. ⚡️ 传送 ➡️ Ubuntu x64 架构, 交叉编译aarch64 FFmpeg mppRK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGBRk3588 FFmpeg 拉流 RTSP, 硬解码转RGBRK3588 , mpp硬编码yuv, 保存MP4视频文件.

Windows 下 Anaconda的安装与配置 GPU 版

给之前的电脑安一下深度学习环境 判断是否有NVIDIA GPU Ctrl Shift Esc 打开任务管理器 带此字眼表示有 NVIDIA GPU 安装Anaconda anaconda 打开邮箱会看到下载链接 这里建议修改为其他盘,要不然下载的包和创建的环境都在C盘,占用空间 三个都打钩 取…

flask flask-socketio创建一个网页聊天应用

应用所需环境: python 3.11.11 其他 只需要通过这个命令即可 pip install flask3.1.0 Flask-SocketIO5.4.1 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 最好是用conda创建一个新的虚拟环境来验证 完整的pip list如下 Package Version ----…

STM32 水质水位检测项目(硬件架构)及(软件架构)

硬件选型 水位测量模块 TDS采集模块 外置ADC模块(ADS1115) 水位测量模块使用方法 水位测量原理 压力传感器:水越深压力越大 P ρgh Fps Fρgh*s P大气压 水位测量传感器本质上是一个压力测量传感器。压力的值和传感器产生的电压值是线…

服务器数据恢复—RAIDZ离线硬盘数超过热备盘数导致阵列崩溃的数据恢复案例

服务器存储数据恢复环境: ZFS Storage 7320存储阵列中有32块硬盘。32块硬盘分为4组,每组8块硬盘,共组建了3组RAIDZ,每组raid都配置了热备盘。 服务器存储故障: 服务器存储运行过程中突然崩溃,排除人为误操…

llama2中的model.py中的结构示意图

参考文章:https://zhuanlan.zhihu.com/p/679640407