15:【stm32】时钟树

news2024/9/23 21:22:16

时钟树

  • 1、时钟树
    • 1.1:简要的介绍
    • 1.2:基本结构
      • 1.2.1:stm32的内部结构
      • 1.2.2:树的关键节点
      • 1.2.3:系统时钟的来源
  • 2、RCC标准库编程
    • 2.1:片上外设的复位与释放
    • 2.2:时钟系统配置
    • 2.3:时钟树的初始状态
    • 2.4:配置CPU的频率
      • 2.4.1设置Flash参数
      • 2.4.2:配置时钟树

1、时钟树

1.1:简要的介绍

   由我们前面写的的代码可知,我们每次使用片上外设都需要先打开片上外设的时钟,这样才能使用片上外设。如下图所示。

在这里插入图片描述
在这里插入图片描述

那么为什么会是这样喃?
   我们查看一下时钟树的样子:如下图所示:左边的是时钟大树,右边的是时钟小树。如图:APB2/APB2/AHB分配器上面都连接的不同的片上外设,在使用某个片上外设是,我们打开连接的分频器,然后给他提供被处理过的脉冲波形。

在这里插入图片描述

1.2:基本结构

  • 小树:
    ①RTC:实时的计数器,就像是一个手表,记录当前的世界时间
    ②IWGD:独立看门狗
    ③他们由低频率的晶振(LSI(内部晶振)/LSE(外部晶振))提供频率,一般是32.768kHz的晶振,然后通过2^15分配后,得到1Hz的频率。

  • 大树
    ①HSI和HSE是高频率晶振:HSI是内部晶振,一般为8MHzHSE是外部晶振,一般为4~16MHz。我们最小系统板上面的外部晶振是8MHz。
    ②锁相环PLL:是一个倍频器,倍率一般为2~16。
    ③AHB/APB1/APB2:都是分频器,对频率做除法。AHB(1~512),APB1/APB2(1~16)

  • 分频的实现:
    通过计数器,比较器来实现的。

在这里插入图片描述如图:想要分频率的频率脉冲连接计数器,作为输入信号。当计数器从1开始计数,数值和计数周期通过比较器相较,如果计数值 > 计数周期时,比较器输出一个脉冲,计数值归0,重新开始计数。

如上图所示:计数周期为7,输入脉冲输入了8个脉冲,比较器才输出1个脉冲,实现8分频

1.2.1:stm32的内部结构

在这里插入图片描述
在这里插入图片描述

1.2.2:树的关键节点

在这里插入图片描述

1.2.3:系统时钟的来源

在这里插入图片描述

2、RCC标准库编程

RCC也是stm32内部的一个片上外设,①它负责控制芯片的复位,②负责对时钟系统的配置

2.1:片上外设的复位与释放

在使用片上外设之前,最好是对其总线的时钟进行复位和释放。

RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1,ENABLE);//对APB2总线上USART1进行复位,相当于对里面的所有寄存器数据清除
RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1,DISABLE);//对APB2总线上USART1进行释放

2.2:时钟系统配置

标准库对时钟系统配置的接口如下图所示:

在这里插入图片描述
在这里插入图片描述

RCC_PLLConfig(uint32_t RCC_PLLSource,uint32_t RCC_PLLMul);//PLL来源的选择,倍率的设定。

在这里插入图片描述

RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//系统时钟来源的选择

在这里插入图片描述

RCC_HCLKConfig(uint32_t RCC_SYSCLK);//对AHB分频器倍率的选择

在这里插入图片描述

2.3:时钟树的初始状态

在这里插入图片描述

但是,当stm32执行代码的时候时:stm32会执行启动文件里面的SystemInit()函数,执行完这个函数后,才去执行用户编写的main()函数里面的代码。

在这里插入图片描述
而SystemInit()函数,就是将时钟树里面频率时钟为最大值。

在这里插入图片描述
在这里插入图片描述

2.4:配置CPU的频率

配置流程图

在这里插入图片描述

2.4.1设置Flash参数

为什么要设置Flash参数喃?
在这里插入图片描述
在这里插入图片描述

  • 指令配置Flash
    先设置指令预取模式,为什么要设置为这个模式喃?因为这样能避免指令的丢失
    在这里插入图片描述
  • 设置对Flash的访问延迟
    为什么需要设置对Flash的访问延迟喃?因为Flash的最大频率为24MHz,当我们要把系统时钟的频率配置为>24MHz的时钟,为了更好的接收到指令,所以需要设置访问延迟。
    在这里插入图片描述

代码①:

#include "stm32f10x.h"

int main(void)
{
	FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//开启指令预取模式
	FLASH_SetLatency(FLASH_Latency_2);//我们想要将系统时钟设置为72M,所以等待2个周期
	while(1)
	{

	}
}

2.4.2:配置时钟树

  • 开启HSE---->配置锁相环PLL---->配置系统时钟来源SYSCLK----->配置AHB/APB1APB2的系数
    == 默认情况下,HSI是开启的,HSE是关闭的,所以如果我们想要使用HSE时,我们需要开启HSE==
#include "stm32f10x.h"

int main(void)
{
	FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//开启指令预取模式
	FLASH_SetLatency(FLASH_Latency_2);//我们想要减系统时钟设置为72M,所以等待2个周期
	
	//开启HSE
	RCC_HSEConfig(RCC_HSE_ON);
	while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);//等待HSE开启成功
	
	//配置锁相环PLL
	RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//选择HSE,9倍
	RCC_PLLCmd(ENABLE);
	while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);//等待PLL配置成功
	
	//配置系统时钟SYSCLK的来源
	RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择来自锁相环PLL
	
	//配置AHB,APB1,APB2
	RCC_HCLKConfig(RCC_SYSCLK_Div1);//AHB分频系数为1 72MHz
	RCC_PCLK1Config(RCC_HCLK_Div2);//APB1分频系数为2 72MHz
	RCC_PCLK2Config(RCC_HCLK_Div1);//APB2分频系数为1 72MHz
	
	//关闭HSI
	RCC_HSICmd(DISABLE);
	
}

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

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

相关文章

算法:DFS之记忆化搜索

目录 记忆化搜索 题目一:不同路径 题目二:最长递增子序列 题目三:猜数字大小II 题目四:矩阵中的最长递增路径 记忆化搜索 说到记忆化搜索,首先就需要引入斐波那契数这道题,非常经典,可以很…

第44课 Scratch入门篇:无限画中画

无限画中画 故事背景: 无止境的显示一幅画。 程序原理: 利用多张基本一样的图,不停循环显示,产生视觉上的错觉,原理很简单,只是一种实现方式而已。 开始编程 1、删除预设的猫咪角色,上传以后在那个无限循环的图片,大小为 480*360 2、接下来复制造型,使用选择工具…

.net 8.0 下 Blazor 通过 SignalR 与 Winform 交互

定义一个Hub using Microsoft.AspNetCore.SignalR;namespace Beatrane.Connect.Blazor {public class DeviceHub : Hub{public async Task SendMessage(string user, string message){await Clients.All.SendAsync("ReceiveMessage", user, message);}public async …

静态分析、动态调试与重打包:去除Android APK烦人广告

最近,一直使用的某款APP,广告越来越多,更令人发指的是,广告弹框最后都变成无法关闭的形式,不使用会员压根没法正常使用。应用市场广大用户的评论说出了我们的心声。 虽说充会员可以免广告,这点小钱&#xf…

《python语言程序设计》2018版第7章第7题代数2x2线性方程式设计一个名为LinearEquation

#大家可以看一下 两道题的内容 第n次刷第4章第3题的代码。朝纲用来函数的概念 def judge_num(a, b, c, d):return (a * d) - (b * c)def run_cont(a, b, c, d, e, f):cc judge_num(a, b, c, d)if cc 0:print("The equation has no solution")else:x ((e * d) - (…

苹果手机怎么清理重复照片的解决方案

随着智能手机摄像头技术的飞速发展,我们越来越依赖iPhone来记录生活中的点点滴滴。不可避免地,这也导致了大量重复照片的产生,这些重复照片不仅占用了宝贵的存储空间,还使得照片库显得混乱无序。本文将介绍苹果手机怎么清理重复照…

微信小程序开发的强大助力:HTTP 虚拟专线

​编辑 一、微信小程序开发的热潮与挑战 二、HTTP 虚拟专线的引入 三、HTTP 虚拟专线的关键功能 (一)用于回调 (二)助力运维 四、HTTP 虚拟专线的技术优势 (一)80 和 443 端口的灵活访问 &#xff0…

测试架构师技能修炼---关系化透明

目录 一、该信任时就给别人信任 二、你说的话长久不变 三、道歉表明你的透明化 四、学会在做出反应前倾听 五、允许别人对你透明化 它涉及与别人之间的关系应保持透明化,包括给别人信任;持续给别人传递一致的消息;向别人道歉&#xff1b…

[SDK]-键盘消息和鼠标消息

前言 各位师傅大家好,我是qmx_07,今天给大家讲解键盘消息和鼠标消息,下一节讲解控件的相关知识点 键盘消息 应用程序从windows接收的关于键盘事件的消息分为击键和字符两种windows再发送击键消息的同时 还会发送字符消息Shift、ctrl、alt…

【C++】string讲解

一、string的理解 我们可以把string看作一个更高级用类实现的char* 。或者直接叫他字符串类型,一听就是定义字符串的。 二、string的使用 用法就和int、char 类型一样,而且功能比他们强大很多。 三、string的功能 只列举常用功能 1、通过“[]”访问…

日撸Java三百行(day26:栈实现二叉树深度遍历之前后序遍历)

目录 一、栈实现前序遍历 二、栈实现后序遍历 三、完整的程序代码 总结 一、栈实现前序遍历 先来看看我们之前写的用递归实现前序遍历的程序代码: /************************ Pre-order visit.**********************/public void preOrderVisit() {System.out…

Simple RPC - 06 从零开始设计一个服务端(上)_注册中心的实现

文章目录 Pre核心内容服务端结构概述注册中心的实现1. 注册中心的架构2. 面向接口编程的设计3. 注册中心的接口设计4. SPI机制的应用 5. 小结 Pre Simple RPC - 01 框架原理及总体架构初探 Simple RPC - 02 通用高性能序列化和反序列化设计与实现 Simple RPC - 03 借助Netty…

【与C++的邂逅】--- 类和对象(上)

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 与C的邂逅 本篇博客将讲解C中的类和对象,C是面向对象的语言,面向对象三大特性是封装,继承,多态。学习类和对象,我们可…

Adobe Dimension DN v4.0.2 解锁版下载和安装教程 (专业的三维3D建模工具)

前言 Adobe Dimension(简称DN)是一款3D设计软件,三维合成和渲染工具,2D平面的二维转为3D立体的三维合成工具,用于3Dmax\C4D\MAYA等三维软件生成的效果图,在3D场景中排列对象、图形和光照。3D应用程序使用的…

Nginx实验

编译安装 Nginx 准备rhel9环境 下载安装包nginx-1.24.0(xftp)/复制下载链接 (nginx.org——>download) 解压 [rootnginx nginx-1.24.0]# tar zxf nginx-1.24.0.tar.gz [rootnginx nginx-1.24.0]#tar zxf nginx-1.24.0.tar.…

yolov8安装教程

一、资源下载 1.下载YOLOv8代码 github:YOLOv8-github gitee:YOLOv8-gitee(推荐使用国内的gitee) 2.conda、cuda 如果没有安装conda,按照流程安装好conda,还要下载好符合自己电脑版本的CUDA 后续会用。 二、创建conda虚拟环…

C语言典型例题43

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题3.3 有一个函数&#xff1a;y{x,x<1;2x-1,1≤x≤10;3x-11,x≥10。写程序&#xff0c;输入x&#xff0c;输出y。 代码&#xff1a; //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //习题3.3…

OD C卷 - 传递悄悄话

传递悄悄话 &#xff08;100&#xff09; 给定一个二叉树&#xff0c;节点采用顺序存储&#xff0c;如 i0 表示根节点&#xff0c;2i 1 表示左子树根&#xff0c;2i 2 表示右子树根;每个节点站一个人&#xff0c;节点数值表示由父节点到该节点传递消息需要的时间&#xff1b…

周末休整

我写的东西&#xff0c;不爱看的人可以不看&#xff0c;我是给喜欢我的人写的&#xff0c;不喜欢我的人&#xff0c;我也讨厌她。 今天故意写点教人学坏的东西&#xff0c;因为以前写了很多正能量的东西&#xff0c;虽然阅读量还可以&#xff0c;但当见面聊天之后&#xff0c;…

【CSS】CSS新单位vmin和vmax

通过vmin单位可以自动取视口宽度和高度中较小的那个值&#xff0c;vmax同理。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1…