STM32-笔记11-手写带操作系统的延时函数

1、为什么带操作系统的延时函数,和笔记10上的延时函数不能使用同一种?

        因为笔记10的延时函数在每次调用的时候,会一直开关定时器,而在FreeRTOS操作系统中,SysTick定时器当作时基使用。

        时基是一个时间显示的基本单位。时基即时间基准,在电子线路中主要用来表示数字电路中的基准时钟。

        FreeRTOS的时基(Timebase)是指系统时钟的基础节拍,用于控制任务调度和定时功能。在FreeRTOS中,时基是通过系统时钟节拍(System Tick)来实现的。

2、分析滴答定时器的倒数情况

        流程如下:给滴答定时器一个重装载值:reload,当滴答定时器开始计时,从重装载值开始倒数(从16777215‌倒数到0),然后自动重载再倒数...... ,ticks是一共需要计多少数,获取刚进入while循环时计数器时VAL的值(tnow)和进入while循环时,当前VAL的值作为told,然后,不断的累加told和tnow的差值(tcnt),不断的判断tcnt是否大于等于ticks,当是的时候,证明已达到需要的数值,故可以退出循环。

差值tcnt有三种情况

情况1、

        第一次查询SysTick->VAL的值时told 和 第二次查询SysTick->VAL的值时tnow,正好在一次数数内。

情况2、

第一次查询SysTick->VAL的值时told 和 第二次查询SysTick->VAL的值时tnow,不在一次数数内。

情况3、

第一次查询SysTick->VAL的值时told 和 第二次查询SysTick->VAL的值时tnow,正好在同一个位置。(先不对其做出讨论,只把它当作条件)

流程图如下:

问题1:为什么直接给reload赋值SysTick->LOAD,SysTick->LOAD在赋值之前也没有手动赋值重装载值。原因是什么?

        回答:这里利用的是SysTick的自动重载功能,没有给SysTick->LOAD(重装载数值)手动赋值就会自动的重装载初始值,重装载初始值(SysTick是24位计数器)是2^24-1(数到0停止,不是数到1停止)。即从16777215‌倒数到‌0‌,所以这里直接给reload赋值SysTick->LOAD。

问题2:为什么在这里不需要手动开启SysTick的使能位(ENABLE)?

        回答:在这里确实没有显式地开启 SysTick 定时器的使能位。这是因为该函数的设计是基于一个前提:SysTick 定时器已经在系统的其他部分(如系统初始化或操作系统内核启动代码中)被配置并启用了。

注意:SysTick的LOAD寄存器在没有外界赋值的情况下会自动重载值。‌SysTick定时器是一个24位的自动重载递减计数器,当计数器从初始值(即LOAD寄存器的值)递减到0时,会自动重新装载这个初始值,并继续递减,形成一个循环。这个过程是由硬件自动完成的,不需要外界手动赋值‌

3、代码

实现的代码如下所示:

复制03-流水灯项目文件,在delay.c文件中重写delay_us();函数如下

void delay_us(uint32_t nus)
{uint32_t ticks;uint32_t tcnt = 0, told, tnow;uint32_t reload = SysTick->LOAD;                //重装载值ticks = nus * 72;                               //需要计的节拍数told = SysTick->VAL;                            //刚进入while循环时计数器的值while(1){tnow = SysTick->VAL;if(tnow != told){if(tnow < told)tcnt += told - tnow;elsetcnt += reload - (tnow -told);told = tnow;                            //下次进入while循环时,当前VAL的值作为toldif(tcnt >= ticks)                       //已计的数超过/等于需要计的数时,退出循环break;}}
}
 4、验证实现

先点击魔术棒

配置完记得点击确定

运行程序,连接好开发板

 

 对比两张图片的时间可以看出来,经历了0.5s也就是500ms

证明以上实验完成

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

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

相关文章

JWT令牌与微服务

1. 什么是JWT JWT&#xff08;JSON Web Token&#xff09;是一种开放标准(RFC 7519)&#xff0c;它定义了一种紧凑且自包含的方式&#xff0c;用于作为JSON对象在各方之间安全地传输信息。JWT通常用于身份验证和信息交换。 以下是JWT的一些关键特性&#xff1a; 紧凑&#xff…

代码随想录Day37 动态规划:完全背包理论基础,518.零钱兑换II,本周小结动态规划,377. 组合总和 Ⅳ,70. 爬楼梯(进阶版)。

1.完全背包理论基础 思路 完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 完…

【多时段】含sop的配电网重构【含分布式电源】【已更新视频讲解】

1 主要内容 之前分享了很多配电网重构的程序&#xff0c;每个程序针对场景限定性比较大&#xff0c;程序初学者修改起来难度较大&#xff0c;本次分享一个基础程序&#xff0c;针对含sop的配电网重构模型&#xff0c;含风电和光伏&#xff0c;优化了33节点网络电压合理性&…

查看php已安装扩展命令

在powershell中查看完整的拓展 php -m 指定搜索某几个拓展 php -m | Select-String -Pattern "xml"

YOLOv11 引入高效的可变形卷积网络 DCNv4 | 重新思考用于视觉应用的动态和稀疏算子

我们介绍了可变形卷积v4(DCNv4),这是一种为广泛的视觉应用设计的高效且有效的算子。DCNv4通过以下两项关键改进解决了其前身DCNv3的局限性: 在空间聚合中移除softmax归一化,以增强其动态特性和表达能力。优化内存访问,减少冗余操作以提高速度。这些改进使得DCNv4相比DCNv…

vue 基础学习

一、ref 和reactive 区别 问题&#xff1a;发生跨域问题 Access to script at file:///Users/new/Desktop/webroot/vue/vue.esm-browser.js from origin null has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: chrome, chrom…

AIA - IMSIC之二(附IMSIC处理流程图)

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 ​​​​​​​通过IMSIC接收外部中断的CSR 软件通过《AIA - 新增的CSR》描述的CSR来访问IMSIC。 machine level 的 CSR 与 IMSIC 的 machine level interrupt file 可相互互动;而 supervisor level 的 CSR…

光谱相机的工作原理

光谱相机的工作原理主要基于不同物质对不同波长光的吸收、反射和透射特性存在差异&#xff0c;以下是其具体工作过程&#xff1a; 一、光的收集 目标物体在光源照射下&#xff0c;其表面会对光产生吸收、反射和透射等相互作用。光谱相机的光学系统&#xff08;如透镜、反射镜…

Kafka可视化工具 Offset Explorer (以前叫Kafka Tool)

数据的存储是基于 主题&#xff08;Topic&#xff09; 和 分区&#xff08;Partition&#xff09; 的 Kafka是一个高可靠性的分布式消息系统&#xff0c;广泛应用于大规模数据处理和实时, 为了更方便地管理和监控Kafka集群&#xff0c;开发人员和运维人员经常需要使用可视化工具…

TLDR:终端命令的简洁百科全书

TLDR&#xff0c;全称 “Too Long, Don’t Read”&#xff0c;是一款特别实用的终端命令百科全书工具。通过 TLDR&#xff0c;您可以快速查找到常用命令的使用方法&#xff0c;避免繁琐冗长的官方文档&#xff0c;让日常工作更加高效。 为什么选择 TLDR&#xff1f; 简单易用&…

2024-12-25-sklearn学习(20)无监督学习-双聚类 料峭春风吹酒醒,微冷,山头斜照却相迎。

文章目录 sklearn学习(20) 无监督学习-双聚类1 Spectral Co-Clustering1.1 数学公式 2 Spectral Biclustering2.1 数学表示 3 Biclustering 评价 sklearn学习(20) 无监督学习-双聚类 文章参考网站&#xff1a; https://sklearn.apachecn.org/ 和 https://scikit-learn.org/sta…

数据结构(Java版)第六期:LinkedList与链表(一)

目录 一、链表 1.1. 链表的概念及结构 1.2. 链表的实现 专栏&#xff1a;数据结构(Java版) 个人主页&#xff1a;手握风云 一、链表 1.1. 链表的概念及结构 链表是⼀种物理存储结构上⾮连续存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引⽤链接次序实现的。与火车…

《Java核心技术I》Swing的网格包布局

复杂的布局管理 网格包布局 行列大小可改变&#xff0c;先建立表格&#xff0c;合并相邻单元格&#xff0c;组件指定在格内的对齐方式。 字体选择器组件&#xff1a; 另个指定字体和字体大小的组合框两个组合框标签两个选择粗体和斜体的复选框一个显示示例字符串的文本区 将容…

Python——day09

os模块 sys模块 time模块 logging模块

IIC驱动EEPROM

代码参考正点原子 i2c_dri:主要是三段式状态机的编写 module iic_dri#(parameter SLAVE_ADDR 7b1010000 , //EEPROM从机地址parameter CLK_FREQ 26d50_000_000, //模块输入的时钟频率parameter I2C_FREQ 18d250_000 //IIC_SCL的时钟频率)( …

《计算机组成及汇编语言原理》阅读笔记:p86-p115

《计算机组成及汇编语言原理》学习第 6 天&#xff0c;p86-p115 总结&#xff0c;总计 20 页。 一、技术总结 1.if statement 2.loop 在许多编程语言中&#xff0c;有类种循环&#xff1a;一种是在程序开头检测条件(test the condition),另一种是在程序末尾检测条件。 3.C…

(带源码)宠物主题商场系统 计算机项目 P10083

项目说明 本号所发布的项目均由我部署运行验证&#xff0c;可保证项目系统正常运行&#xff0c;以及提供完整源码。 如需要远程部署/定制/讲解系统&#xff0c;可以联系我。定制项目未经同意不会上传&#xff01; 项目源码获取方式放在文章末尾处 注&#xff1a;项目仅供学…

目标检测——基于yolov8和pyqt的螺栓松动检测系统

目录 1.项目克隆和环境配置1.1 我这里使用的是v8.0.6版本1.2 项目代码结构介绍 2.数据集介绍2.1 数据集采集2.2采集结果介绍 3.模型训练4.pyqt界面设计4.1 界面内容介绍4.2 界面实现 5.操作中的逻辑实现5.1 图片检测5.2 文件夹检测5.3 视频检测和摄像头检测 6. 效果展示 1.项目…

宠物行业的出路:在爱与陪伴中寻找增长新机遇

在当下的消费市场中&#xff0c;如果说有什么领域能够逆势而上&#xff0c;宠物行业无疑是一个亮点。当人们越来越注重生活品质和精神寄托时&#xff0c;宠物成为了许多人的重要伴侣。它们不仅仅是家庭的一员&#xff0c;更是情感的寄托和生活的调剂。然而&#xff0c;随着行业…

原点安全再次入选信通院 2024 大数据“星河”案例

近日&#xff0c;中国信息通信研究院和中国通信标准化协会大数据技术标准推进委员会&#xff08;CCSA TC601&#xff09;共同组织开展的 2024 大数据“星河&#xff08;Galaxy&#xff09;”案例征集活动结果正式公布。由工银瑞信基金管理有限公司、北京原点数安科技有限公司联…