延时函数是怎么来的?频率和滴答计数之间的计算?(无ucos,小白向)

news2024/9/28 13:25:02

延时函数是怎么来的?频率之间的计算?(无ucos,小白向)

文章目录

  • 延时函数是怎么来的?频率之间的计算?(无ucos,小白向)
    • `Systick定时器`
    • `4个Systick寄存器`
      • `1、CTRL - SysTick 控制和状态寄存器`
      • `2、VAL - SysTick 当前值寄存器`
      • `3、LOAD - SysTick 重装载数值寄存器`
      • `4、CALIB - SysTick 校准数值寄存器(了解)`
    • `Systick库函数`
    • `void delay_init()函数剖析(计算)`
    • `PS:时间戳`
  • `如果对你有帮助,就点赞收藏把!(。・ω・。)ノ♡`


以stm32f103芯片,外接8MHz晶振 为例


延时函数Delay:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这几个函数相比几乎人人在使用
但是很多小白都只会用不知道含义是什么?
怎么写出来的?

当我从标准库转到HAl库的时候,再次移植了这个DELAY文件,这些函数引起了我的兴趣
我就想要知道这些函数具体是怎么操作时钟频率的

诶,会用,不会写,诶,老经典了


Systick定时器

Systick定时器就是系统滴答定时器,一个 24 位的倒计数定时器,计到 0 时,将从 RELOAD寄存器 中自动重装载定时初值。
只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。

Systick定时器,是一个简单的定时器,对于CM3,CM4内核芯片,都有Systick定时器。
Systick定时器常用来做延时,或者实时系统的心跳时钟。
可以节省MCU资源,不用浪费一个通用定时器。

SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。
Systick中断的优先级也可以设置。

4个Systick寄存器

CTRL             SysTick 控制和状态寄存器  
LOAD            SysTick 自动重装载除值寄存器 
VAL                SysTick 当前值寄存器
CALIB            SysTick 校准值寄存器

1、CTRL - SysTick 控制和状态寄存器

《Cortex-M3 权威指南》SysTick定时器:在这里插入图片描述
常用到的是以上四位:
位0:是否使能
位1:是否产生中断
位16:第一次读到置0,第二次置1,第三次置0……(以此类推)
位2:选择时钟源
对于STM32,外部时钟源是 HCLK(AHB总线时钟)的1/8
内核时钟是 HCLK时钟

实际应用:
代码位置::SysTick_CTRL_ENABLE_Msk
在这里插入图片描述

2、VAL - SysTick 当前值寄存器

《Cortex-M3 权威指南》SysTick定时器:
在这里插入图片描述

代码位置:
计数前后均要,清零
在这里插入图片描述

3、LOAD - SysTick 重装载数值寄存器

用来装载重装载值,前24位有效(如果有更高的位数的话)
在这里插入图片描述
代码位置:
在这里插入图片描述

4、CALIB - SysTick 校准数值寄存器(了解)

用的比较少
在这里插入图片描述

Systick库函数

固件库中的Systick相关函数:
//Systick时钟源选择 m i s c . c misc.c misc.c 文件中
SysTick_CLKSourceConfig()
//初始化systick,时钟为HCLK,并开启中断,位于core_cm3.h/core_cm4.h$文件中
SysTick_Config(uint32_t ticks)
//Systick中断服务函数
void SysTick_Handler(void)


void delay_init()函数剖析(计算)

在这里插入图片描述

void delay_init()
{
	/* 选择8分频 */
	HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8); //选择外部时钟  HCLK/8
	/* fac_us 微秒时间戳 */
	fac_us = SystemCoreClock/8000000;				//为系统时钟的1/8
	/* fac_ms 毫秒时间戳 */
	fac_ms = (u16)fac_us*1000;					//非OS下,代表每个ms需要的systick时钟数
}	

/*
* 标准库函数接口是SYSTICK_CLKSourceConfig()
* HAL库在前面加了HAL_,就成了HAL_SYSTICK_CLKSourceConfig()
*/

为什么 S y s t e m C o r e C l o c k SystemCoreClock SystemCoreClock 除于的是 8000000?

首先要明确几个已知条件:
系统频率 S y s t e m C o r e C l o c k = 72 M SystemCoreClock =72M SystemCoreClock=72M
分频数( n u m num num)是8分频
需要1微妙延时的计数值( a r r arr arr
计数值 ∗ 1 频率 = 1 微妙 计数值 * \frac{1}{频率} = 1微妙 计数值频率1=1微妙
频率 = 系统频率 / 分频数 频率 = 系统频率 / 分频数 频率=系统频率/分频数

列出公式:
计数值 / 系统频率 分频数 = 1 微妙 计数值 / \frac{系统频率}{分频数} = 1微妙 计数值/分频数系统频率=1微妙

代入: a r r / 72 M 8 = 1 / 1000000 arr / \frac{72M}{8} = 1 / 1000000 arr/872M=1/1000000

化简得: a r r = 72 M 8000000 arr = \frac{72M}{8000000} arr=800000072M

即 fac_us = S y s t e m C o r e C l o c k 8000000 \frac{SystemCoreClock}{8000000} 8000000SystemCoreClock

所以 S y s t e m C o r e C l o c k SystemCoreClock SystemCoreClock 除于的是 8000000

通过计算你可以发现 a r r = S y s t e m C o r e C l o c k n u m ∗ 1000000 arr = \frac{SystemCoreClock}{num * 1000000} arr=num1000000SystemCoreClock

这便就是1微妙需要滴答时钟计数arr次

而且 a r r = 9 arr = 9 arr=9,即滴答定时器每跳9次为1微妙延时

PS:时间戳

时间戳通常指的是表示某一时刻的时间标记,它可以是一个绝对时间点,也可以是一个相对于某个起始点的偏移量。
在计算机科学中,时间戳往往用来记录事件发生的时间顺序,或者用于同步和测量时间。
时间戳可以是简单的整数或浮点数,表示从某个固定的起始点以来的经过的秒数或微秒数。
(例如1970年1月1日00:00:00 UTC,即Unix时间)

在不同的上下文中,时间戳有不同的表现形式和用途。
例如,在网络通信中,时间戳可能用于确保数据包的有序到达;
在数据库中,时间戳可能用于记录记录最后更新的时间;
在编程中,时间戳可以用来创建一个唯一的标识符,或者作为算法的一部分来同步进程和设备。


┈┈┈┈▕▔╲┈┈┈┈┈┈┈ ┈┈┈┈▕▔╲┈┈┈┈┈┈┈ ┈┈┈┈▕▔╲┈┈┈┈┈┈┈┈
┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈
┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈
▂▂▂▂╱┈┈▕▂▂▂▂▏┈ ▂▂▂▂╱┈┈▕▂▂▂▂▏┈ ▂▂▂▂╱┈┈▕▂▂▂▂▏┈┈
▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈
▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈
▔▔▔▔╲▂▂▕▂▂▂▂▏┈ ▔▔▔▔╲▂▂▕▂▂▂▂▏┈ ▔▔▔▔╲▂▂▕▂▂▂▂▏┈┈

如果对你有帮助,就点赞收藏把!(。・ω・。)ノ♡

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

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

相关文章

SSE打扮你的AI应用,让它美美哒

❝ 我从不幻想成功。我只会为了成功努力实践 大家好,我是柒八九。一个专注于前端开发技术/Rust及AI应用知识分享的Coder ❝ 此篇文章所涉及到的技术有 SSE Node( Express) EventSource React Tailwindcss 打字效果 因为,行文字数所限,有些概念…

【React】Google 账号之个性化一键登录按钮功能

“使用 Google 帐号登录”功能可快速管理网站上的用户身份验证。用户登录 Google 账号、表示同意,并安全地与平台共享其个人基础资料信息。 官方文档:链接 一、获取 Google API 客户端 ID 打开 Google API 控制台 中的凭据页面 创建或选择 Google API 项…

小米采取措施禁止国行版设备安装国际版系统 刷机后将报错无法进入系统

据知名官改版系统 Xiaomi.EU 测试者 Kacper Skrzypek 发布的消息,小米目前已经在开机引导中新增区域检测机制,该机制将识别硬件所属的市场版本,例如中国大陆市场销售的小米即将在安装国际版系统后将无法正常启动。 测试显示该检测机制是在开…

有浏览器就行,手把手带你从零微调大模型!

有浏览器就行,手把手带你从零微调大模型! 今天分享一篇技术文章,你可能听说过很多大模型的知识,但却从未亲自使用或微调过大模型。 今天这篇文章,就手把手带你从零微调一个大模型。 大模型微调本身是一件非常复杂且…

自动化测试全攻略:从入门到精通!

1、自动化测试专栏 随着技术的发展和工作需求的增长,自动化测试已成为软件质量保障体系中不可或缺的一环。 为了帮助广大测试工程师、开发者和对自动化测试感兴趣的读者们更好地掌握这一技能,今年特别推出了全新的《自动化测试全攻略:从入门…

[Python爬虫] 抓取京东商品数据||京东商品API接口采集

本文结构: 一、引言 二、代码分享 三、问题总结 引言 这两天因为一些需求,研究了一下如何爬取京东商品数据。最开始还是常规地使用selenium库进行商品页的商品抓取,后来因为想要获取优惠信息,只能进入到商品详情页进行抓取&#x…

阶段三:项目开发---民航功能模块实现:任务24:航空实时监控

任务描述 内 容:地图展示、飞机飞行轨迹、扇区控制。航空实时监控,是飞机每秒发送坐标,经过终端转换实时发送给塔台,为了飞机位置的精准度,传输位置的密度很大,在地图位置显示不明显。本次为了案例展示效…

如何成功的设计BGA?

目前,用于容纳各种先进多功能半导体器件(如 FPGA 和微处理器)的标准封装是球栅阵列 (BGA)。BGA 封装中的组件用于各种嵌入式设计中,既可用作主机处理器,也可用作存储器等外设。多年来&#xff0…

抖音机构号授权源码全解析

抖音机构号授权源码是抖音平台为了方便机构用户进行授权管理而推出的一项服务。随着抖音平台的快速发展,越来越多的机构开始意识到抖音作为一种强大的营销渠道的价值。为了更好地利用抖音平台的资源,许多机构开始了解抖音机构号的功能和优势,…

css 文件重复类样式删除

上传文件 进行无关 className 删除 <div style"display: flex;"><input type"file" change"handleFileUpload" /><el-button click"removeStyles" :disabled"!fileContent">Remove Styles and Download&…

科普文:Linux服务器常用命令和脚本

Linux服务器常用的命令&#xff1a;find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk&#xff1b;提供的例子和参数都是最常用和最为实用的。 1.find 文件查找 查找txt和pdf文件 find . \( -name "*.txt" -o -name "*.pdf" \) -print 正…

VS2019 因公司加密无法运行程序原因

问题原因&#xff0c;点击编译运行按钮出现以下问题 首先右击项目&#xff0c;然后点击属性&#xff0c;点击应用程序&#xff0c;将资源里面的清单修改为 创建不带清单的应用程序&#xff0c;即可

竞速赛车游戏推荐:极品飞车14:热力追踪 (Win/Mac) 安装包

《极品飞车14&#xff1a;热力追踪》&#xff08;Need for Speed: Hot Pursuit&#xff09;是《极品飞车》系列的第14部作品&#xff0c;于2010年11月发行。这款游戏是继《极品飞车&#xff1a;热力追踪2》后&#xff0c;系列再次回归该名称。 游戏采用 Criterion Games 的开放…

STM32的独立看门狗详解

目录 1.独立看门狗是什么&#xff1f; 2.独立看门狗的作用 3.独立看门狗的实现原理 4.独立看门狗用到的寄存器 4.1 IWDG_KR &#xff08;关键字计时器&#xff09; 4.2 IWDG_PR&#xff08;预分频寄存器&#xff09; 4.3 IWDG_RLR&#xff08;重装载寄存器&#xff09…

土壤水分及其频谱分析

祁连山综合观测网&#xff1a;黑河流域地表过程综合观测网&#xff08;混合林站自动气象站-2018&#xff09; import pandas as pd dfpd.read_excel(rC:\Users\mengx\Desktop\土壤水分的频谱分析\祁连山综合观测网&#xff1a;黑河流域地表过程综合观测网&#xff08;混合林站…

RocketMQ之消费者,重平衡机制与流程详解附带源码解析

1. 背景 本文是 RocketMQ 消费者系列的第三篇&#xff0c;介绍消费者重平衡。 我把 RocketMQ 消费分成如下几个步骤 重平衡 消费者拉取消息 Broker 接收拉取请求后从存储中查询消息并返回 消费者消费消息 其中重平衡是消费者开始消费的起点。 1.1 重平衡的含义 RocketMQ 的 To…

【单片机毕业设计选题24052】-基于STM32的智能书桌设计

系统功能: 基于stm32单片机的智能书桌设计 1.手动&#xff1a;升降桌&#xff0c;调整桌面高度&#xff0c;实现升降功能&#xff0c; 2.自动&#xff1a;光敏控制灯的亮度 手动&#xff1a;开关灯 3.自动&#xff1a;检测学习姿势报警&#xff0c;超声波检测人是否坐的太…

【单片机毕业设计选题24051】-基于STM32的温室大棚控制系统

系统功能: 1、检测环境温湿度&#xff0c;土壤湿度&#xff0c;光照强度和二氧化碳浓度并在OLED和APP上显示。 2、当空气温度过高时则打开风扇通风。 3、当空气湿度过低时打开加湿器加湿。 4、土壤湿度过低&#xff0c;打开水泵。 5、光照不足则打开LED,反之则关闭…

麒麟系统设置中添加打印机按钮无响应的解决办法

原文链接&#xff1a;麒麟系统设置中添加打印机按钮无响应的解决办法 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在麒麟桌面操作系统上点击设置中的添加打印机按钮无响应的解决办法的文章。打印机是我们日常办公的重要工具&#xff0c;如果添加打印机按钮无…

昇思25天学习打卡营第15天|应用实践之ShuffleNet图像分类

基本介绍 今天的应用实践的领域是计算机视觉领域&#xff0c;更确切的说是图像分类任务&#xff0c;不过&#xff0c;与昨日不同的是&#xff0c;今天所使用的模型是ShuffleNet模型。ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一…