【STM32F103】RCC复位和时钟控制

前言

之前介绍外设的时候总是没有提到RCC,但其实我们使用STM32的外设之前都需要做的一步就是打开外设时钟。原本想着没什么可说的,就是用什么外设的时候就在开头加一行代码打开外设时钟就好了。直到最近写到了TIM定时器,我才开始觉得应该说一说跟时钟相关的内容了,并且在官方参考手册中也有单独为RCC开一个章节,因此就有了今天这篇博文。

RCC

RCC(Reset and Clock Control )也就是复位和时钟控制。不过我们通常说RCC主要是说它的时钟部分,它的重点就是在于时钟部分。

复位

STM32的复位方式有以下几种:

按键复位

NRST引脚置低电平(外部复位按键)

 就是左侧那两个跳线帽下面那个按钮,我们通过下面的原理图也可以得知,我们一旦按下这个按钮,NRST引脚就会和GND导通,也就是低电平,从而导致系统复位。而我们不按按钮的时候,是通过一个上拉电阻保持高电平的。

看门狗复位

看门狗又分为独立看门狗和窗口看门狗。

看门狗我后续会介绍,这里就简单说明一下看门狗的作用。

独立看门狗一旦启动之后,我们就需要持续不断地“喂狗”,也就是执行一段特定程序,并且我们可以设置两次喂狗之间的间隔,如果喂狗的时间超过了我们设置的时间,那么看门狗就会认为系统出现了异常,从而将系统重置。

窗口看门狗和独立看门狗其实差不多,只不过窗口看门狗对于喂狗时间的要求会更高,我们可以设置一段窗口期,也就是两个距离上次喂狗的时间点,我们只有在这两个时间点内喂狗才有效,喂早喂晚都不行,都会导致系统重启。

软件复位

我们使用下面代码也可以让STM32进行复位。第二行是使系统复位,但是在函数调用到真正复位之前有一小段时间差,在这段时间里处理器依旧可以处理来自中断的请求,为了避免意外发生,我们需要在这之前加入拒绝中断的代码,也就是第一行。

__set_FAULTMASK(1);
NVIC_SystemReset();

低功耗结束进入复位

STM32的低功耗一共有三种模式:睡眠,停止,待机。低功耗水平按照先后顺序依次增高。

 在最高级别的待机模式下唤醒后,程序会从头开始执行,也就是复位了。

时钟树

下图截自《STM32F10xxx参考手册(中文)》第五十六页。

STM32里有很多种时钟,当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。可驱动系统时钟的有三种时钟源:HSI振荡器时钟,HSE振荡器时钟,PLL时钟(自己本身并不产生时钟源)。可以从下面从上图截出来的部分看出:

HSI

HSI(High Speed Internal)高速内部时钟。

HSI时钟信号由内部8MHzRC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。

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

如果HSE晶体振荡器失效,HSI时钟会被作为备用时钟源。

小小地总结一下,HSI分为两种用途,第一种是作为PLL时钟的时钟源,另一种是作为备用的系统时钟时钟源。

HSE

HSE(High Speed External)高速外部时钟。

就是下图中红圈圈出来的。

对于HSE,官方建议的是4MHz~16MHz,不过我们买的核心板一般都是8MHz的无源晶振。

下图可以看出HSE有三种用途:第一种是直接作为系统时钟的时钟源,第二种是作为PLL时钟的时钟源,第三种是作为RTC时钟。

PLL

PLL(Phase Locked Loop),锁相环倍频输出。

内部PLL可以用来倍频HSI的输出时钟或HSE晶体输出时钟。PLL的设置(选择HIS振荡器除2HSE振荡器为PLL的输入时钟,和选择倍频因子)必须在其被激活前完成。一旦PLL被激活,这些参数就不能被改动。

一般来说,系统时钟就是用的PLL时钟。

而PLL一般来说用的是HSE,因为HSI是内部的时钟信号,容易受到温度的影响,所以一般不作为PLL的时钟来源。

官方推荐的稳定运行时钟为72MHz,所以我们使用的是PLLMUL进行9倍频,也就是8MHz×9=72MHz。如果想要更高的频率,PLLMUL最高支持16倍频,不过一般我们不去做。

LSI 

LSI(Low Speed Internal)低速内部时钟。
LSI担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟。

LSI担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟。

也就是说LSI有两种用途:一种是作为RTC时钟,另一种是为独立看门狗服务。一般是为独立看门狗提供时钟。

LSE

 LSE(Low Speed External)低速外部时钟。

就是HSE边上的黑乎乎的块块。

LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟或者其他定时功能提供一个低功耗且精确的时钟源。

在官方提供的时钟树框图里LSI仅用于作为RTC时钟,可以为实时时钟或者其他定时功能提供一个低功耗且精确的时钟源。

RTC

RTC(Real Time Clock),实时时钟。

用途如下:

APB

APB(Advanced Peripheral Bus)外设总线。

STM32中有APB1和APB2两条外设总线,我们最常见最直接接触的也是它们。

APB1和APB2都是系统时钟经过AHB预分频器,然后再经过自己的预分频器最终得到。

 

APB1为低速总线,它的总线时钟PCLK1最多为36MHz。

APB2为高速总线,它的总线时钟PCLK2最多为72MHz。

STM32上的不同外设挂载在不同的总线上,可以用下面的函数启动对应的外设时钟。不同总线上可用的外设资源都在函数上面注释里列举的参数中了。

小结

这里只是介绍了STM32F103中时钟树的一小部分,不过也算是最常用的一小部分了。除了以上介绍的这些,在时钟树上还有很多内容没有介绍到,感兴趣的小伙伴可以去查阅官方提供的参考手册(我个人觉得不太够,可能还得求助互联网上的小伙伴)

参考

《STM32F10xxx参考手册(中文)》

《ARM Cortex-M3嵌入式原理及应用(基于STM32F103微控制器)》

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

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

相关文章

Python解析参数的三种方法

今天我们分享的主要目的就是通过在 Python 中使用命令行和配置文件来提高代码的效率 Let’s go! 我们以机器学习当中的调参过程来进行实践,有三种方式可供选择。第一个选项是使用 argparse,它是一个流行的 Python 模块,专门用于命令行解析&…

【前端素材】bootstrap4实现服装鞋饰电商平台Doron

一、需求分析 一个服装鞋饰电子商务页面是一个在线平台,用于展示和销售各种服装、鞋子和配饰产品。它通常具有以下功能: 产品展示:服装鞋饰电子商务页面会展示各种服装、鞋子和配饰产品的图片、描述和价格。这些产品可以按照不同的分类&#…

视频监控系统EasyCVR如何通过调用API接口查询和下载设备录像?

智慧安防平台EasyCVR是基于各种IP流媒体协议传输的视频汇聚和融合管理平台。视频流媒体服务器EasyCVR采用了开放式的网络结构,支持高清视频的接入和传输、分发,平台提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联…

YOLOv8分割任务数据集标注流程

YOLOv8分割任务数据集标注流程 半自动化标注JSON转TXT 半自动化标注 这里使用了半自动化标注工具 链接:https://pan.baidu.com/s/1x22BtI_bHKH0iUUg0eTUdA 提取码:r5ca 需要指定权重和修改类别信息 配置文件中保存了类别、界面语言、轮廓模式等信息…

单因素方差分析--R

任务说明 三个剂量水平的药物处理受试者,每个剂量水平十个受试者,现在收集到数据后,问: 药物剂量水平显著影响受试者的response? 或者不同剂量药物处理受试者有显著效果的差异吗? 数据 library(tidyvers…

亚信安慧AntDB数据库容灾复制原理

AntDB数据库作为通信运营商领域的杰出的数据服务提供者,一直以来都十分重视数据安全问题,不断通过技术进步、方案创新等方式提升数据容灾能力。在信息化的时代,数据已经成为了重要的资源,对于企业来说,如何存储和管理这…

Linux文件系统与日志管理

目录 一、Linux文件系统 1、inode 与 block 详解 1.1 inode 和 block 概述 1.2 inode表的内容 1.3 查看文件的inode号码 1.4 模拟innode号耗尽故障处理 2、访问文件的流程 3、文件恢复 3.1 恢复误删除的ext3格式文件 3.2 恢复误删除的 xfs 格式文件 二、Linux日志…

Java-伪共享

在说这个计算机术语之前,我先在这里问候所有问“什么是JVM伪共享”的垃圾JAVA程序员以及一瓶不满半瓶晃荡的面试官全家 我从来没想过国内已经很卷的JAVA圈,已经卷到语无伦次的地步了,“伪共享”是java程序员应该知道的吗?能问出这…

kubernetes 网络解析

开头语 写在前面:如有问题,以你为准, 目前24年应届生,各位大佬轻喷,部分资料与图片来自网络 内容较长,页面右上角目录方便跳转 基础 Kubernetes 使用扁平网络模型,所有 Pod 都可以直接相互…

两种方式实现mysql截取年月日

select date_format(now(), %Y-%m-%d) select substring(now(), 1, 10)

大创项目推荐 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向&#xff0c…

如何使用Jamf管理Apple文件保险箱

在当今的移动工作和教育环境中,Apple 设备的一个关键功能是内置的 macOS 加密技术,该技术保护组织数据和用户隐私。配备 Apple M1 芯片的最新计算机还具有额外的加密功能。 虽然这些安全层有助于保护最终用户手中的设备,无论他们在哪里工作或…