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();

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

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

相关文章

Java多线程--同步机制解决线程安全问题方式二:同步方法

文章目录 一、同步方法(1)同步方法--案例11、案例12、案例1之同步监视器 (2)同步方法--案例21、案例2之同步监视器的问题2、案例2的补充说明 二、代码及重要说明(1)代码(2)重要说明 …

基于yolov2深度学习网络的视频手部检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 输入mp4格式的视频文件进行测试,视频格式为1080p30. 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..........................…

Linux第40步_移植ST公司的uboot

一、查看ST公司的uboot源码包 ST公司的uboot源码包在虚拟机中的路径: “/home/zgq/linux/atk-mp1/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/u-boot-stm32mp-2020.01-r0”; “u-boot-stm32mp-2020.01-r0”就是S…

Github 上传项目(个人令牌token)

1.点击 github头像 : setting -> Developer Settings -> Personal access tokens 2.在要上传的文件夹下运行以下命令: git init git commit -m "first commit" git branch -M main 利用以下命令模…

Vue中嵌入原生HTML页面

Vue中嵌入html页面并相互通信 需求&#xff1a;b2b支付需要从后获取到数据放到form表单提交跳转&#xff0c;如下&#xff1a; 但是vue目前暂时没找到有类似功能相关文档&#xff0c;所以我采用iframe嵌套的方式 1. Vue中嵌入Html <iframe src"/static/gateway.htm…

多线程c++

目录 1.join和detach区别 2.lock_guard和unique_lock 3.原子操作 4.条件变量condition_variable 5.future 和 promise 1.join和detach区别 ①不使用join和detach #include <iostream> #include <thread> #include <windows.h>using namespace std;v…

hcip---ospf综合实验

一&#xff1a;实验要求 1、R4为ISP&#xff0c;其上只能配置IP地址&#xff0c;R4与其所有直连设备间均使用公有IP 2、R3-R5/6/7为MGRE环境&#xff0c;R3为中心站点 3、整个OSPF环境IP基于R4的环回 4、所有设备均可访问R4的环回 5、减少LSA的更新量&#xff0c;加快收敛…

医院如何筛选安全合规的内外网文件交换系统?

医院内外网文件交换系统是专为医疗机构设计的&#xff0c;用于在内部网络&#xff08;内网&#xff09;和外部网络&#xff08;外网&#xff09;之间安全、高效地传输敏感医疗数据和文件的解决方案。这种系统对于保护患者隐私、遵守医疗数据保护法规以及确保医疗服务的连续性和…

初探分布式链路追踪

本篇文章&#xff0c;主要介绍应用如何正确使用日志系统&#xff0c;帮助用户从依赖、输出、清理、问题排查、报警等各方面全面掌握。 可观测性 可观察性不单是一套理论框架&#xff0c;而且并不强制具体的技术规格。其核心在于鼓励团队内化可观察性的理念&#xff0c;并确保由…

Django4.2(DRF)+Vue3 读写分离项目部署上线

文章目录 1 前端2 后端2.1 修改 settings.py 文件关于静态文件2.2 关于用户上传的文件图片 3 Nginx4 镜像制作4.1 nginx4.3 Django镜像4.3.1 构建 5 docker-compose 文件内容 1 前端 进入前端项目的根目录&#xff0c;运行如下命令进行构建 npm run build构建完成后&#xff…

K8S之Pod的介绍和使用

Pod的理论和实操 pod理论说明Pod介绍Pod运行与管理Pod管理多个容器Pod网络Pod存储 Pod工作方式自主式Pod控制器管理的Pod&#xff08;常用&#xff09; 创建pod的流程 pod实操通过资源清单文件创建自主式pod通过kubectl run创建Pod&#xff08;不常用&#xff09; pod理论说明 …

指针的深入了解6

1.回调函数 回调函数就是一个通过函数指针调用的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指针被用来调用其所指向的函数 时&#xff0c;被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用&#xff0…

【LVGL源码移植环境搭建】

LVGL源码移植&环境搭建 ■ LVGL源码移植■ 下载LVGL源码■ 修改LVGL文件夹■■■■ 视频链接 Ubuntu模拟器环境建置 ■ LVGL源码移植 ■ 下载LVGL源码 LVGL源码 我们以选择v8.2.0为例&#xff0c;选择8.2.0下载 ■ 修改LVGL文件夹 1.我们只需要关注这5个文件即可&…

《Docker技术革命:从虚拟机到容器化,全面解析Docker的原理与应用-上篇》

文章目录 Docker为什么会出现总结 Docker的思想Docker历史总结 Docker能干嘛虚拟机技术虚拟机技术的缺点 容器化技术Docker和虚拟机技术的区别 Docker概念Docker的基本组成镜像&#xff08;image)容器&#xff08;container&#xff09;仓科&#xff08;repository&#xff09;…

GitHub工作流的使用笔记

文章目录 前言1. 怎么用2. 怎么写前端案例1&#xff1a;自动打包到新分支前端案例2&#xff1a;自动打包推送到gitee的build分支案例3&#xff1a;暂时略 前言 有些东西真的就是要不断的试错不断地试错才能摸索到一点点&#xff0c;就是摸索到凌晨两三点第二天要8点起床感觉要…

聊一聊GPT、文心、通义、混元

我使用同一个Prompt提示词“请以记叙文的文体来写”&#xff0c;分别发送给GPT-3.5&#xff08;调用API&#xff09;、文心、通义、混元&#xff0c;下面是它们各自生成的文本内容&#xff0c;大家一看便知了。 GPT-3.5&#xff1a; 在我个人使用GPT模型的过程中&#xff0c;我…

Facebook的创新征程:社交媒体的演进之路

在当今数字化时代&#xff0c;社交媒体已经成为人们生活中不可或缺的一部分&#xff0c;而Facebook作为社交媒体领域的巨头&#xff0c;一直在不断创新和演进。本文将深入探讨Facebook的创新征程&#xff0c;追溯其社交媒体的发展历程&#xff0c;探讨其对用户、社会和数字时代…

echart 实现自定义地图

先上效果图 需求&#xff1a;自定义区域平面图&#xff0c;支持区域高亮 // 2D详情const initChartsMapItemB async (flow: any, mapbg: any) > {// mapbg 为svg的地址 import mapbg from //assets/json/map/F42d.svgconst svgData (await request.get(mapbg)) as anye…

WPF应用程序(.Net Framework 4.8) 国际化

1、新建两个资源字典文件zh-CN.xaml和en-US.xaml&#xff0c;分别存储中文模板和英文模板 (1) zh-CN.xaml <ResourceDictionary xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml&q…

基于链表实现贪吃蛇游戏

本文中&#xff0c;我们将使用链表和一些Win32 API的知识来实现贪吃蛇小游戏 一、功能 &#xff08;1&#xff09;游戏载入界面 &#xff08;2&#xff09;地图的绘制 &#xff08;3&#xff09;蛇身的移动和变长 &#xff08;4&#xff09;食物的生成 &#xff08;5&…