STM32——时钟树与滴答计时器

news2024/11/25 23:45:06

STM32——时钟树与滴答计时器

使用的开发板为stm32F407VET6的芯片,主要介绍stm32的时钟树与滴答计时器的一些理论和一个自己编写的delay函数。

时钟树的结构图可以在STM32F4xx中文参考手册.pdf中的时钟这块找到。而滴答计时器是内核资源,需要到Cortex M3与M4权威指南.pdf.

文章目录

  • STM32——时钟树与滴答计时器
    • 一、 时钟树
      • 1.1 时钟源的介绍
      • 1.2 速时钟输出 PLLP 的计算方法
    • 二、 滴答计时器(SysTick 定时器)
      • 2.1 滴答计时器的介绍
      • 2.2 延迟函数

一、 时钟树

1.1 时钟源的介绍

在 STM32F4 中,有5 个最重要的时钟源,为 HSI、HSE、LSI、LSE、PLL

其中 PLL 实际是分为两个时钟源,分别为主 PLL 和专用 PLL。

时钟频率来分可以分为高速时钟源低速时钟源,
在这 5 个中 HSIHSE 以及 PLL高速时钟;
==LSI ==和 LSE低速时钟

来源可分为外部时钟源内部时钟源,外部时钟源就是从外部通过接晶振的方式获取时钟源,其中 HSE 和LSE是外部时钟源,其他的是内部时钟源。

器件具有以下两个次级时钟源:
● 32 kHz 低速内部 RC (LSI RC),该 RC 用于驱动独立看门狗,也可选择提供给 RTC 用
于停机/待机模式下的自动唤醒。
● 32.768 kHz 低速外部晶振(LSE 晶振),用于驱动 RTC 时钟 (RTCCLK)
在这里插入图片描述

1.2 速时钟输出 PLLP 的计算方法

主要要知道的就是主 PLL 时钟第一个高速时钟输出 PLLP 的计算方法。
在这里插入图片描述

上图中,主 PLL 时钟的时钟源要先经过一个分频系数为 M 的分频器,然后经过倍频系数为 N 的倍频器出来之后的时候还需要经过一个分频系数为 P(第一个输出 PLLP)或者 Q(第二个输出 PLLQ)的分频器分频之后,最后才生成最终的主 PLL 时钟。

例如我们的外部晶振选择 8MHz。同时我们设置相应的分频器 M=8,倍频器倍频系数 N=336,分频器分频系数 P=2,那么主 PLL 生成的第一个输出高速时钟 PLLP 为:

PLL=8MHz * N/ (MP)=8MHz 336 /(8*2) = 168MHz
如果选择HSE为PLL时钟源,同时SYSCLK时钟源为PLL,那么SYSCLK时钟为 168MHz。

在SystemInit()函数中设置的系统时钟大小:

SYSCLK(系统时钟) =168MHz
AHB 总线时钟(HCLK=SYSCLK) =168MHz
APB1 总线时钟(PCLK1=SYSCLK/4) =42MHz
APB2 总线时钟(PCLK2=SYSCLK/2) =84MHz
PLL 主时钟 =168MHz

二、 滴答计时器(SysTick 定时器)

2.1 滴答计时器的介绍

CM4 内核的处理和 CM3 一样,内部都包含了一个 SysTick 定时器,SysTick 是一个 24 位倒计数定时器,当计到 0 时,将从 RELOAD 寄存器中自动重装载定时初值。只要不把它在 SysTick 控制及状态寄存器中的使能位清除,就永不停息。

SysTick 在《STM32xx 中文参考手册》里面基本没有介绍,其详细介绍,请参阅《STM32F3与 F4 系列Cortex M4内核编程手册》第230 页。我们就是利用 STM32的内部 SysTick来实现延时的,这样既不占用中断,也不占用系统定时器。

滴答计时器属于内核,使一个精确度很高的定时器,所以在内核资料中。

因为stm32F407VET6是M4的内核,所以在M4的权威手册中可以找到滴答计时器的相关寄存器。
在这里插入图片描述

在这里插入图片描述

控制寄存器如下:
在这里插入图片描述
在这里插入图片描述

设计内核的函数在misc.c中

定时器的本质是数脉冲的个数
来一个脉冲,数值就会加一或者减一,由于晶振产生的脉冲是固定的,也就是每一次脉冲时间是一样的,就可以通过对脉冲计数来记录时间
关键:知道一个脉冲是多少时间

频率:单位时间内产生脉冲的次数 21MHZ(延迟更长,168主频延时的时间短不利于定时)

所以一个脉冲的时间是 1/21MHZ = 1/(211000 000)=4.76110^(-8)s 【得到的数值,单位是s】–>转换一下大概就是多少us

1/21=。。us,所以可以使用us为最小单位

通过这个us来进行次数的累加来定时/计时。

如果计数器达到0,从上次读寄存器开始读为1;清楚当读取或当前计数器值被清除时自动O

2.2 延迟函数

下面是自己写的一个延迟函数,不过一般使用的都是移植的。


void my_delay()
{
 u32 temp;//定义一个临时变量
 
//选择systick的时钟源 选择8分频的时钟,分频之后是21MHZ
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
//配置定时时间
 SysTick->LOAD = 21*1000*500;//500ms
 SysTick->VAL=0x00;//清空计数器的值
 
 //启动定时器
 //SysTick->CTRL |=0x00000001;//使能位
 SysTick->CTRL |=SysTick_CTRL_ENABLE_Msk;
 do
 {
 temp=SysTick->CTRL;
 }
 while((temp&0X01)&& !(temp&(1<<16)));//等待计时完成,1.判断16位是否在工作,并且判断状态寄存器的状态位是否为0(跳出)
 
 SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; //关闭计数器
 
 SysTick->VAL=0x00;//清空计数器的值
 
}

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

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

相关文章

Vue中的数据变化监控与响应——深入理解Watchers

目录 ​编辑 前言 1. 基本用法&#xff1a; 2. 深度监听&#xff1a; 3. 立即执行&#xff1a; 4. 监听多个数据&#xff1a; 5. 清理监听器&#xff1a; 6. 监听路由变化&#xff1a; 总结&#xff1a; 我的其他博客 前言 在Vue.js中&#xff0c;watch是一种用于监听…

【MATLAB】数据拟合第11期-基于粒子群迭代的拟合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 基于粒子群迭代的拟合算法是一种优化技术&#xff0c;它基于粒子群优化算法&#xff08;PSO&#xff09;的基本思想。该算法通过群体中个体之间的协作和信息共享来寻找最优解。 在基于粒…

vue3 插槽slot

插槽是子组件中的提供给父组件使用的一个占位符&#xff0c;用 <slot> 表示&#xff0c;父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&#xff0c;填充的内容会替换子组件的<slot> 元素。<slot> 元素是一个插槽出口 (slot outlet)&…

自由编程学习资源:free-programming-books

最近&#xff0c;我发现了一个在GitHub上备受欢迎的项目&#xff0c;它为程序员和编程爱好者提供了丰富、免费且高质量的学习资料&#xff0c;这就是"free-programming-books"。目前&#xff0c;这个项目在GitHub上已经有305k的star&#xff0c;显示出它在开发者社区…

分享66个JavaGame源码总有一个是你想要的

分享66个JavaGame源码总有一个是你想要的 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 游戏下载链接&#xff1a;https://pan.baidu.com/s/1BUVmun2RhAY4vAMJwcY0mQ?pwd6666 提取码&#xff1a;6666 游戏项目名称 java实现…

千兆多模光模块SFP-GE-SX是什么?特点和应用领域有哪些?

千兆多模光模块SFP-GE-SX是一种用于光纤通信的光模块&#xff0c;用于传输千兆&#xff08;1 Gbps&#xff09;速率的数据。它使用多模光纤作为传输介质&#xff0c;并通过光信号来实现数据的传输。多模光纤是一种光纤&#xff0c;它具有相对较大的纤芯直径&#xff0c;通常为5…

UltraISO(软碟通)制作U盘启动盘完整教程

一、 准备工作 UltralSO 软件、ISO系统镜像、容量合适的U盘 二、详细步骤 首先&#xff0c;确保你已经安装了UltraISO软件&#xff0c;如果没有&#xff0c;可以从官方网站下载并安装。插入你的U盘&#xff0c;并确保U盘上没有重要的数据&#xff0c;先格式化优盘。然后打开…

ASF-YOLO:一种基于注意尺度序列融合的细胞实例分割YOLO模型

摘要 我们提出了一种基于注意力尺度序列融合的You Only Look Once&#xff08;YOLO&#xff09;框架&#xff08;ASF-YOLO&#xff09;&#xff0c;该框架结合了空间和尺度特征&#xff0c;用于准确快速的细胞实例分割。在YOLO分割框架的基础上&#xff0c;我们采用尺度序列特…

电子电器架构( E/E) 演化 —— 大算力

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

Proxifier安装与激活

proxifier官网链接 步骤 1&#xff1a;购买 Proxifier 许可证 访问 Proxifier 官方网站&#xff1a;https://www.proxifier.com/ 在网站上查找并选择 “Purchase” 或类似的选项。 选择适合你需求的许可证类型&#xff0c;填写相关信息并完成购买。 如果不想购买&#xff0c…

每天五分钟计算机视觉:网络中的网络(NiN)

本文重点 前面的课程中我们学习了众多的经典网络模型&#xff0c;比如LeNet、AlexNet、VGG等等&#xff0c;这些网络模型都有共同的特点。 它们的特点是&#xff1a;先由卷积层构成的模块充分提取空间特征&#xff0c;然后再由全连接层构成的模块来输出分类结果。也就是说它们…

【C语言】基础刷题训练4(含全面分析和代码改进示例)

系列文章目录 提示&#xff1a;该系列文章暂未全部完成&#xff0c;暂时欠缺系列文章目录&#xff0c;见谅 基础刷题训练4&#xff08;含全面分析和代码改进示例&#xff09; 文章目录 系列文章目录前言题目链接(有需要的请自行链接做题)T1&#xff1a;思路1&#xff1a;思路2&…

基于Java SSM框架实现课程思政元素收集系统项目【项目源码+论文说明】

基于java的SSM框架实现课程思政元素收集系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认…

git教程(基于vscoede)

Git&#xff08;读音为/gɪt/&#xff09;是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 1.打开vscode&#xff0c;创建文件夹gittest&am…

keithley 吉时利6221源表

特点 优势 10 14 Ω 输出阻抗 提供广泛的输出阻抗&#xff0c;确保负载中有稳定的电流源。 65000 点源内存 允许直接从电流源执行全面的测试电流扫描。 输出 0.1V 至 105V 的恒流电压&#xff0c;10mV 步长 防止潜在损坏对过电压敏感的设备。 源交流电源范围为 4pA 至…

FFmpeg转码流程和常见概念

视频格式&#xff1a;mkv&#xff0c;flv&#xff0c;mov&#xff0c;wmv&#xff0c;avi&#xff0c;mp4&#xff0c;m3u8&#xff0c;ts等等 FFmpeg的转码工具&#xff0c;它的处理流程是这样的&#xff1a; 从输入源获得原始的音视频数据&#xff0c;解封装得到压缩封装的音…

iOS应用如何通过广告变现?有哪些变现优势?

2021年&#xff0c;在ios 14.5发布后&#xff0c;移动应用生态正式进入「后 IDFA 时代」&#xff0c;收集用户数据的方式发生了变化&#xff0c;这让通过定向广告变现变得比以往更加困难&#xff0c;且苹果还禁止对安装应用提供奖励。即便如此&#xff0c;iOS的“吸金”能力只增…

优质全套SpringMVC教程

三、SpringMVC 在SSM整合中&#xff0c;MyBatis担任的角色是持久层框架&#xff0c;它能帮我们访问数据库&#xff0c;操作数据库 Spring能利用它的两大核心IOC、AOP整合框架 1、SpringMVC简介 1.1、什么是MVC MVC是一种软件架构的思想&#xff08;不是设计模式-思想就是我们…

java 角色访问控制管理系统Myeclipse开发mysql数据库MVC结构serlvet编程计算机网页项目

一、源码特点 java 角色访问控制管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统采用serlvetdaobean&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发 开发工具myeclipse8.5 mysql5…

java8实战 lambda表达式和函数式接口(上)

前言&#xff1a; 本博客对java8实战第三章的总结&#xff0c;也是上一篇博客行为化参数的延续&#xff0c;介绍一下函数式接口 Lambda表达式 lambda的表达式的结构由&#xff1a;参数&#xff0c;箭头&#xff0c;主体构成。 lambda示例 函数式接口&#xff1a; 先看上一篇…