【概念理解】HAL库的滴答定时器HAL_Delay()函数的实现原理

news2024/10/5 17:21:29

来源:bilibili视频

这里写目录标题

  • 概述
  • 一、寄存器部分
    • 1. 控制和状态寄存器(STK_CTRL)
    • 2. 加载值寄存器(STK_LOAD)
    • 3.当前值寄存器(STK_VAL)
  • 二、代码部分
    • hal_delay()
      • 1. hal_initTick()滴答定时器的初始化
      • 2. 将七万二传入SysTick_Config()
      • 3. 中断函数
  • 三、注意点

概述

在这里插入图片描述

一、寄存器部分

1. 控制和状态寄存器(STK_CTRL)

在这里插入图片描述

2. 加载值寄存器(STK_LOAD)

在这里插入图片描述

3.当前值寄存器(STK_VAL)

每过1个周期,当前值就会往下减1,减到0时,会触发中断,会到加载值寄存器,把数值读入,从头开始计数。

在这里插入图片描述

二、代码部分

hal_delay()

在这里插入图片描述

  1. 这个函数刚开始是用 HAL_GetTick()获取了当前的uwTick的值(也就是初始值),赋给tickstart
    在这里插入图片描述
  2. 判断一下,我们刚进来的uwtick与当前的uwtick 的差值,如果差值大于1000,则退出while(也就是 1000个的时候,已经是满足了系统时钟 计数72M个数了)
    在这里插入图片描述

1. hal_initTick()滴答定时器的初始化

  • 系统时钟 SystemCoreClock 我在cube MX中,已经设置了72MHz,然后除以1000(也就是1000U),变成了72000(也就是七万二)

在这里插入图片描述

2. 将七万二传入SysTick_Config()

系统时钟72MHz 意味着 一秒钟可以计数72M个数,然后1000分频后,变七万二,也就是它当前可以计七万个数(1ms),这就如同上面的 当前值寄存器的倒计时,减到0 触发中断,重新赋值计数。

在这里插入图片描述

3. 中断函数

在这里插入图片描述

每次发生中断,也就是每1毫秒(计数七万二)uwTick自加1

在这里插入图片描述

三、注意点

由此可见,滴答寄存器的中断优先级是最低的,所以在中断中不可以使用Hal_delay(),优先级太低,不会被执行,甚至可能会卡死
在这里插入图片描述

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

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

相关文章

Redis 客户端有哪些?

文章目录 JedisLettuceRedisson最佳实践 - 到底用哪个? Redis 最常见的 Java 客户端有两个,Jedis 和 Lettuce,高级客户端有 Redisson,见下图(图源 Clients | Redis) Jedis Github地址:redis/j…

Windows下安装Hive(包安装成功)

Windows下安装Hive Hive与Hadoop的版本选择很关键,千万不能选错,否则各种报错。一、Hive下载1.1、官网下载Hive1.2、网盘下载Hive 二、解压安装包,配置Hive环境变量2.1、环境变量新增:HIVE_HOME2.2、修改Path环境变量,…

Oracle免费在线编程:Oracle APEX

前提: 注意:你要有个梯子才能更稳定的访问。 不需要安装Oracle,但是需要注册。(还算方便的) 注册&登录过程 进入Oracle APEX官网,我们选择免费的APEX工作区即可,点击“免费注册”。在注册…

基于H5或者微信小程序开发GIS地图实战全套代码

1 下面有一定基础的可以不看 (1)第一篇请看 微信小程序开发天地图 (2)第二篇请看 http://GeoServer+PostgreSQL+PostGIS+Tomcat+QGIS一整套相关 (3)第三篇请看 有国产化需求的 (4)第四篇请看 支持国家EPSG:4490 2 vue+openlayers实例代码

ThreadLocal原理

ThreadLocal原理 ThreadLocal对象new出来存放到堆中,ThreadLocal引用是存放在栈里 Thread 类有个 ThreadLocalMap 成员变量,Map的key是Threadlocal 对象,value是你要存放的线程局部变量。 public void set(T value) {//获取当前线程Thread&…

SpringBoot复习:(11)SpringApplication中的listeners成员变量是怎么初始化的?

initializers成员变量定义如下: 在构造方法中: setListeners代码如下: 给setListeners方法传递的是getSpringFactoriesInstances(ApplicationListener.class). getSpringFactoriesInstances代码如下: 调用的重载的getSpringFa…

redis 高级篇4 分布式锁

一 redis架构图 1.1 redis的架构图 1.2 分布式锁满足条件 1.独占性;2.高可用;3.防死锁;4.不乱抢;5.重入性 二 分布式锁的案例情况 2.1 分布式锁1:单机分布式部署 描述: 使用lock锁和synchronized,单机…

【shell】获取ping的时延数据并分析网络情况及常用命令学习

文章目录 获取ping的时延数据并分析网络情况|、||、&、&&辨析teetailkillall 获取ping的时延数据并分析网络情况 网络情况经常让我们头疼,每次都需要手动在终端ping太麻烦了,不如写个脚本ping并将数据带上时间戳存入文件,然后也…

iPhone 6透明屏是什么?原理、特点、优势

iPhone 6透明屏是一种特殊的屏幕技术,它能够使手机屏幕变得透明,让用户能够透过屏幕看到手机背后的物体。 这种技术在科幻电影中经常出现,给人一种未来科技的感觉。下面将介绍iPhone 6透明屏的原理、特点以及可能的应用。 iPhone 6透明屏的原…

【外卖系统】新增菜品

需求分析 在后台中,通过新增功能来添加一个新的菜品,在添加菜品时需要选择当前菜品所属的菜品分类,并且需要上传的菜品图片。 代码开发 需要添加的类和基本接口:实体类DishFlavor、Mapper接口DishFlavorMapper、业务层接口Dish…

顶尖211,央企收割机!面试仅16%!超线30分,稳稳上岸!

一、学校及专业介绍 南京理工大学(Nanjing University of Science and Technology),简称南理,位于南京市,是隶属于工业和信息化部的全国重点大学,是国家“双一流”建设高校,“211工程”。由于学…

百模征战,如何解决数据卡脖子问题?

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 继ChatGPT以来,大模型在国内掀起了一股热潮,大有百模征战之意。而其中数据、算法、算力作为大模型训练的三驾马车,预训练数据的数量、质量、多样性成为大模型能力表现的关键性因素&#x…

8.Winform界面打包成DLL提供给其他的项目使用

背景 希望集成一个Winform的框架,提供权限菜单,根据权限出现各个Winform子系统的菜单界面。不希望把所有的界面都放放在同一个解决方案下面。用各个子系统建立不同的解决方案,建立代码仓库,进行管理。 实现方式 将Winform的UI界…

Linux系统使用(超详细,暑假弯道超车!!)

目录 Linux操作系统简介 Linux和windows区别 Linux常见命令 Linux目录结构 Linux命令提示符 常用命令 ls cd pwd touch cat echo mkdir rm cp mv vim vim的基本使用 grep netstat Linux面试题 Linux操作系统简介 Linux操作系统是和windows操作系统是并列的关系。只不过只…

牛客网Verilog刷题——VL54

牛客网Verilog刷题——VL54 题目答案 题目 实现一个深度为8,位宽为4bit的双端口RAM,数据全部初始化为0000。具有两组端口,分别用于读数据和写数据,读写操作可以同时进行。当读数据指示信号read_en有效时,通过读地址信号…

SpringBoot 集成Swagger2

一、入门 1、导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!-- https://mvnrepository.com…

IIC协议原理及IIC通信的具体实现(S3C2440裸机开发)

文章目录 前言一、IIC协议二、IIC的控制2.1 IIC控制相关寄存器2.2 IIC控制中的特征信号2.3 IIC的数据传输格式2.3.1 ACK信号2.3.2 数据读写操作2.3.3 中止通信 三、 IIC编程3.1 IIC编程的相关寄存器3.2 IIC代码实现 总结 前言 本期和大家主要分享的是一种非常常见并且非常常用…

【笔记】欧拉回路与欧拉路径

先放结论 对于一个无向连通图1&#xff1a; 存在欧拉路径的充分必要条件为&#xff1a;度数为奇数的点只有 0 0 0 或 2 2 2 个。存在欧拉回路的充分必要条件为&#xff1a;没有度数为奇数的点。 对于一个有向连通图&#xff1a; 存在欧拉路径的充分必要条件为&#xff1a; 所…

asm:常用语法

常用语法 1、循环1.1、使用条件跳转指令实现循环1.2、使用LOOP指令实现循环 2、字符串2.1、指定字符串的长度2.2、字符串指令2.3、重复前缀 3、数组4、递归5、宏6、文件操作7、内存管理 1、循环 1.1、使用条件跳转指令实现循环 汇编语言中实现循环通常需要使用跳转指令和条件…

k8s概念-DaemonSet

回到目录 参考链接https://v1-23.docs.kubernetes.io/zh/docs/concepts/workloads/controllers/daemonset/ DaemonSet 确保全部&#xff08;或者某些&#xff09;节点上运行一个 Pod 的副本 当节点加入到K8S集群中&#xff0c;pod会被&#xff08;DaemonSet&#xff09;调度到…