STM32学习笔记二——STM32时钟源时钟树

目录

STM32芯片内部系统架构详细讲解:

1.芯片内部混乱电信号解决方案:

2.时钟树:

1.内部RC振荡器与外部晶振的选择

2. STM32 时钟源

3.STM32中几个与时钟相关的概念

4.时钟输出的使能及其流程

5.时钟设置的基本流程


时钟源——单片机的心脏与动脉   

STM32F103最高频率——72MHZ

STM32芯片内部系统架构详细讲解:

1.芯片内部混乱电信号解决方案:

        芯片内部的电路组成结构大多数是逻辑电路(与门、或门、非门、异或门、同或门等),然而在多个逻辑电路连接运算时,由于逻辑门内部运算涉及了充放电过程,因此在电路的运算过程中,寄存器会出现一段由于门电路运算延时产生的错误状态,但是短暂的错误状态会导致依赖此寄存器状态的程序与其他逻辑电路出现更加严重的错误。

        那么,设计电路时遇到这个问题该怎么办呢?——解决方法就是,在寄存器前面放一个边缘触发器,并且接入一个一定频率的方波信号——可以为寄存器规避门电路运算的混乱状态

        原理:方波的一个周期内,门电路执行运算产生的任何副作用都不会影响到寄存器的值,等待门电路运算稳定后,方波的上升沿到达,最终运算产生的结果才会通过边沿触发器进入寄存器中——方波信号即为时钟信号

(图片来自bilibili up主keysking)

图中的方波信号为时钟信号,时钟信号在单片机中由时钟源(单片机的心脏)产生,通过时钟树传播到整个芯片当中

2.时钟树:

AHB(Advanced High Performance Bus)先进高性能总线

(可以理解为STM32芯片内部电路的主干道,芯片上的各种外设都连接到这一总线上,通过这一总线进行数据通信)

HCLK——AHB总线中的时钟线

STM32时钟树

SysTick为时钟提供一个时钟基准

分频器:为频率作除法

APB先进外设总线:专门用来连接外设,然后通过桥接器连接到AHB总线上,与其他一同连接到AHB总线上的部分进行通信

FCLK自由运行时钟:当我们为了节省电量,需要STM32进入低功耗模式之一的停止模式时,AHB会停止运行,HCLK会停止传输时钟脉冲

Enable CSS:时钟安全系统——他可以在HSE发生故障时,立即切换会HSI,并且产生中断,让我们可以进行紧急制动处理

独立小时钟树


 

STM32 的时钟系统比较复杂, 但又十分重要,理解STM32的时钟树对理解STM32 十分重要。

下面分五个部分择要对其进行阐述:

1.内部RC振荡器与外部晶振的选择

STM32可以选择内部时钟(内部RC振荡器),也可以选择外部时钟(外部晶振)。但如果使用内部RC振荡器而不使用外部晶振,必须清楚以下几点:
(1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。

(2)对于少于100脚的产品,有两种接法:
方法1: OSC_IN和OSC _OUT分别通过10KΩ电阻接地。此方法可提高EMC性能。方法2:分别重映射OSC_IN和OSC _OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出0。此方法相对于方法1,可以减小功耗并节省两个外部电阻。

(3) 内部8MHz的RC振荡器的误差在1%左右,内部RC振荡器的精度通常比用HSE(外部晶振)要低十倍以上。STM32 的ISP就是利用了HSI (内部RC振荡器)。

2. STM32 时钟源

在STM32中,有5个时钟源,分别为HSI、HSE、LSI、 LSE、PLL
(1) HSI 是高速内部时钟,RC振荡器,频率为8MHz(是STM32主要的时钟)

(2) HSE是高速外部时钟,可接石英谐振器、陶瓷谐振器,或者接外部时钟源,它的频率范围为4MHz~ 16MHz。

(3) LSI是低速内部时钟,RC振荡器,频率为40kHz。

(4) LSE是低速外部时钟,接频率为32.768kHz的石英晶体。

(5)PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择2~16倍,但是其输出频率最大不得超过72MHz。

3.STM32中几个与时钟相关的概念

SYSCLK:系统时钟,STM32大部分器件的时钟来源。它由AHB预分频器分配到各个部件。

HCLK:由AHB预分频器直接输出得到,它是高速总线AHB的时钟信号,提供给存储器、DMA及Cortex内核,是Cortex内核运行的时钟,CPU主频就是这个信号,它的大小与STM32运算速度、数据存取速度密切相关。

FCLK:同样由AHB预分频器输出得到,是内核的“自由运行时钟”(free running clock).“自由”表现在它不来自时钟HCLK,因此在HCLK时钟停止时FCLK也会继续运行。它的存在,可以保证在处理器休眠时,也能够采样中断和跟踪休眠事件,它与HCLK互相同步。

PCLKI:外设时钟,由APB1预分频器输出得到,最大频率为36MHz,提供给挂载在APBI总线上的外设(低速外设)。

PCLK2:外设时钟,由APB2预分频器输出得到,最大频率可为72MHz,提供给挂载在APB2总线上的外设(高速外设)。


4.时钟输出的使能及其流程

时钟输出中有很多是带使能控制的,如AHB总线时钟、内核时钟、各种APB1外设时钟、APB2外设时钟等。
当需要使用某模块时,必须先使能对应的时钟,需要注意的是定时器的倍频器,当APB的分频为1时,它的倍频值为1,否则它的倍频值就为2.
连接在APB1上的设备(低速外设)有电源接口备份接口、CAN、USB、IIC1、IIC2、UART2、UART3、SPI2、窗口看门物、Timer2、Timer3、Timer4.

注意:USB模块虽然需要一个单独的48MHz时钟信号,但它不是供USB模块工作的时钟,而只是提供给串行接口引擎(SIE)使用的时钟,USB模块工作的时钟应该是由APB1提供的
连接在APB2上的设备(高速外设)有:GPIO_A-E、USART1、ADC1、ADC2、ADC3(ADC需要采集一段时间的数据才能更准确地获取电压值)、TM1、TIM8、SPI1、AFIO.

5.时钟设置的基本流程

假设使用HSE时钟,并且使用ST的固件库函数,那么在程序中设置时钟参数的流程如下:

第1步:
将RCC寄存器重新设置为默认值,即调用函数RCC_DeInit;
第2步:
打开外部高速时钟晶振HSE,调用函数RCC_HSEConfig(RCC_HSE_ON);
第3步:
等待外部高速时钟晶振工作,调用HSEStartUpStatus = RCC_WaitForHSEStartUp();

第4步:
设置AHB时钟,即调用函数RCC_HCLKConfig;
第5步:
设置高速AHB时钟,即调用函数RCC_PCLK2Config;
第6步:
设置低速AHB时钟,即调用函数RCC_PCLK1Config;
第7步:
设置PLL,即调用函数RCC_PLLConfig;
第8步:
打开PLL,即调用函数RCC_PLLCmd(ENABLE);
第9步:
等待PLL工作,while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);

第10步:
设置系统时钟,即调用函数RCC_SYSCLKConfig;
第11步;
判断PLL是否是系统时钟,while(RCC_GetSYSCLKSource()!=0x08);
第12步:
打开要使用的外设时钟,即调用函数RCC_APB2PeriphClockCmd();或者 RCC_APB1PeriphClockCmd();

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

上海亚商投顾:创业板指失守1600点 全市场超5000只个股下跌

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日低开低走,深成指跌超2%,创业板指失守1600点,续创年内新低。脑机接…

C语言KR圣经笔记 6.6 表查询 6.7 typedef

6.6 表查询 为了说明结构体的更多方面,本节我们来写一个表查询功能包的内部代码。在宏处理器或编译器的符号表管理例程中,这个代码是很典型的。例如,考虑 #define 语句,当遇到如下行 #define IN 1 时,名称 IN 与其对…

n-皇后-dfs

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.Scanner;public class Main {static int n,N 20; //这里只会用到2 * n - 1的格子,开大点保险static char[][] g new c…

Makefile编译原理 makefile中的include关键字

一.makefile中的include关键字 类似C语言中的include 将其他文件的内容原封不动的搬入当前文件 make对include关键字的处理方式: 在当前目录搜索或指定目录搜索目标文件 搜索成功:将文件内容搬入当前makefile中 搜索失败:产生警告&…

聚观早报 | 360 AI搜索App上线;岚图汽车与京东达成合作

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 1月30日消息 360 AI搜索App上线 岚图汽车与京东达成合作 三星电子在硅谷新设实验室 小米平板7系列参数曝光 Spa…

大创项目推荐 题目:基于深度学习的中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分:4.2 损失函数:4.3 搭建seq2seq框架:4.4 测试部分:4.5 评价NLP测试效果:4.6 梯度截断…

代码随想录算法刷题训练营day20

代码随想录算法刷题训练营day20:LeetCode(654)最大二叉树、LeetCode(617)合并二叉树、LeetCode(700)二叉搜索树中的搜索、LeetCode(700)二叉搜索树中的搜索、LeetCode(98)验证二叉搜索 LeetCode(654)最大二叉树 题目 代码 import java.util.Arrays;/*** Definit…

MATLAB有限元应用-四边形八节点梁受力弯曲

MATLAB在处理平面有限元问题和梁弯曲问题上有很强的能力,主要体现在以下几个方面: 建模与网格划分 MATLAB内置了方便的图形界面工具(pdetoolbox等),可以快速对几何模型进行二维三维网格划分,生成有限元分析需要的网格。 求解器 MATLAB内置了多种求解偏微分方程的有限元求解器…

大模型重塑车载语音交互:赛道巨头如何引领新周期?

车载语音交互赛道正进入新一轮竞争周期。 高工智能汽车注意到,传统车载语音交互赛道当前基本已进入成熟期,主要为任务型助手,包括从单轮对话到多轮对话,单音区到多音区,从单一的导航、多媒体娱乐等座舱功能扩展智能驾…

钢材表面缺陷YOLOV8,OPENCV调用

【免费】钢材表面缺陷YOLOV8资源-CSDN文库 钢材表面缺陷YOLOV8NANO,训练得到PT模型,然后转换成ONNX,OPENCV的DNN调用,支持C,PYTHON,ANDROID

VScode中使用Xdebug调试PHP

君衍. 一、下载VScode与PHPstudy二、配置PHP环境变量三、PHPstudy中启用xdebug扩展四、打开php.ini,修改配置五、修改vscode配置六、VScode安装相关插件七、配置launch.json八、设置断点,开始调试 一、下载VScode与PHPstudy 首先我们自然是需要搭建环境…

C++ 数论相关题目 博弈论 Nim游戏

给定 n 堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。 问如果两人都采用最优策略,先手是否必胜。 输入格式…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第5章 决策树(代码python实践)

文章目录 第5章 决策树—python 实践书上题目5.1利用ID3算法生成决策树,例5.3scikit-learn实例 《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第5章 决策树 第5章 决策树—python 实践 import numpy as np import pand…

Docusaurus 文档侧边栏增加 New 标识

在使用 Docusaurus 搭建文档站点的时候,我们经常要给某个侧边栏菜单增加一些醒目的标识,比如针对新创建的文档给它一个 New 的标识, 以提醒过来看文档的用户这是一个新增加项或者新特性(阅读的时候不要遗漏)。 然而这个…

C#: form 添加窗体最小化事件,添加系统托盘图标,点击后可以打开、最小软件窗口

说明: 1.实现窗体在最小化后触发一个事件,可以去实现需要的功能。 2.最小化后软件图标出现在系统右下角的托盘串口。 3.点击托盘口的图标可以实现软件弹出窗口和最小化的切换。 1.参考办法 以下是判断C#窗体最小化到状态栏的状态的方法:…

[AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言4.5key价格泄漏ChatGPT4.0使用地址ChatGPT正确打开方式最新功能语音助手存档…

Redis核心技术与实战【学习笔记】 - 7.Redis GEO类型 - 面向 LBS 应用的数据类型

前言 前面,介绍了 Redis 的 5 大基本数据类型:String、List、Hash、Set、Sorted Set,它们可以满足绝大多数的数据存储需求,但是在面对海里数据统计时,它们的内存开销很大。所以对于一些特殊的场景,它们是无…

计算机网络-物理层设备(中继器 集线器)

文章目录 中继器中继器的功能再生数字信号和再生模拟信号同一个协议 集线器(多口中继器)不具备定向传输的原因集线器是共享式设备的原因集线器的所有接口都处于同一个碰撞域(冲突域)内的原因 小结 中继器 中继器的功能 中继器的…

JVM 内存模型

1 什么是 JVM 内存模型 JVM 需要使用计算机的内存,Java 程序运行中所处理的对象或者算法都会使用 JVM 的内 存空间,JVM 将内存区划分为 5 块,这样的结构称之为 JVM 内存模型。 2 JVM 为什么进行内存区域划分 随着对象数量的增加&#xff…

基于二值化图像转GCode的单向扫描实现

基于二值化图像转GCode的单向扫描实现 什么是单向扫描单向扫描代码示例 基于二值化图像转GCode的单向扫描实现 什么是单向扫描 在激光雕刻中,单向扫描(Unidirectional Scanning)是一种雕刻技术,其中激光头只在一个方向上移动&a…