STM32实现延时

news2024/11/19 15:24:43

在STM32单片机中,实现延时一般都是使用定时器,既可以使用Systick定时器,也可以使用常规的定时器。

定时器在设置了定时并开启之后,就会进入自主运行模式,其中,初始化设置这一阶段是由CPU执行相应指令完成的,之后,定时器外设就会自行计数,这个过程中,CPU就不需要再参与了。这一过程,不管定时器有没有配置中断,定时器都会独立于CPU自主工作。

那么,定时器配置中断和不配置中断有什么区别呢?

定时器在工作时,我们怎么知道有没有到达定时时间呢?因为我们需要判断是否到达,然后据此触发一些相应的动作。如果不配置中断,就需要CPU去不断判断定时器状态标志位是否被置位,这时候,才需要CPU的参与,这就是常说的轮询,效率不高;如果配置了中断,就不用CPU去轮询,定时器模块完成计时的时候,就会给CPU发一个中断通知,然后CPU再去处理中断事务,也就是说,不需要CPU去轮询。

所以,CPU参与不是为了实现定时,而只是去判断定时器有没有完成定时。

之前,我以为定时器计时也是CPU来实现的,还在想,是不是通过并发来实现的,其实,并不是的,各外设在配置完成后都可以独立工作,并不需要CPU全程参与。所以不要弄错了。如果按照这种错误的思路,那么,延时就不可能会实现,因为定时和主循环和并发执行的,不可能会等待计时完成再执行后面的程序。

 

延时的思路

在学习51时,常使用for循环来实现延时。

延时的思路,其实就是让程序在一个地方空等一段时间,for循环就是在一个地方等待来实现延时,只是这种for循环的方式,难以准确估计等待的时间。

要想实现精准的延时,就需要用到定时器。

让定时器一直阻塞轮询,只有到达计时时间,才会结束轮询,继续执行后续的指令。

接下来,分别使用Systick和定时器来实现延时。

Systick实现延时

直接参考:

【STM32】Systick滴答定时器_一只大喵咪1201的博客-CSDN博客

Systick定时器,是一个简单的定时器,对于CM3、CM4内核芯片,都有Systick定时器。Systick定时器常用来做延时,或者实时系统的心跳时钟。这样可以节省MCU资源,不用浪费一个定时器。
Systic定时器也叫做滴答定时器,是一个24 位的倒计数定时器,计到0时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。
如果想熟悉框图,可直接参考:

嵌入式学习笔记——SysTick(系统滴答)_systick寄存器_小向是个Der的博客-CSDN博客

SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15),被操作系统所调用(当上了操作系统时,其他应用程序则不能再使用该滴答时钟来延时)。

延时程序示例:

具体程序实现详见正点原子示例代码。

常规定时器实现延时

定时器实现的思路也比较简单,配置好定时器之后,在程序里打开定时器,然后循环判断计数值是否到0,或者判断状态标志位是否满足要求即可。

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

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

相关文章

Spring Cloud_Spring Cloud Alibaba_00000

contents 微服务介绍版本选择创建项目创建Maven工程 说明 微服务介绍 微服务架构是一种架构模式。它提倡将单一应用程序划分成一组小的服务。服务之间相互协调、相互配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通…

html通过web3JS 获取当前连接的区块链信息和账号信息

前面 我们讲了 MetaMask和ganache的配置安装 并用 MetaMask管理ganache的启动的虚拟区块链 那么 我们现在也完全可以写一个网页来做这个东西的管理 您可以先查看文章web3.js获取导入做一个导入了 web3的html文件 首先我们可以来试着 获取 自己当前是在哪个区块的 getBlockNum…

【深度学习】【分布式训练】DeepSpeed:AllReduce与ZeRO-DP

AllReduce与ZeRO-DP ​ ZeRO-DP是分布式训练工具DeepSpeed的核心功能之一,许多其他的分布式训练工具也会集成该方法。本文从AllReduce开始,随后介绍大模型训练时的主要瓶颈----显存的占用情况。在介绍完成标准数据并行(DP)后,结合前三部分的内…

玩游戏提示d3dx9丢失-找不到d3dx9怎么修复

相信有些朋友遇到了d3dx9丢失的情况不知道怎么解决,而今日小编带来的这篇文章就是讲解关于d3dx9丢失进行修复的操作内容,d3dx9丢失怎么解决?(修复方法)d3dx9文件是DirectX中必备文件,许多游戏需要此文件运行。 d3dx9丢…

文件系统概述

目录 概述用户空间层面1.应用程序可以直接使用内核提供的系统调用访问文件:2.应用程序也可以使用 glibc 库封装的标准 I/O 流函数访问文件: 硬件层面1.块设备2.闪存3.NVDIMM 内核空间层面 概述 在 Linux 系统中,一切皆文件,除了通…

【MySQL 】:测试数据准备、SQL语句规范与基本操作

前言 欢迎来到小K的MySQL专栏,本节将为大家准备MySQL测试数据、以及带来SQL语句规范、数据库的基本操作的详细讲解~✨文末送书,小K赠书活动第二期 目录 前言一、准备测试数据二、SQL语句规范三、数据库的基本操作四、总结:文末赠书 一、准备测…

直线导轨在焊接领域有什么作用?

焊接技术在现代制造业中的应用越来越广泛,直线导轨作为重要的传动元件,已经成为焊接设备中不可或缺的部分。 相对于直线轴承来说,直线导轨具有较高的负载能力和刚度,能够保证高精度的直线运动,滑动摩擦小,惯…

【Python】异常处理 ③ ( 捕获所有类型的异常 | 默认捕获所有类型异常 | 捕获 Exception 异常 )

文章目录 一、Python 默认捕获所有类型异常1、默认捕获所有类型异常 - 无法获取异常类型2、代码实例 - 默认捕获所有类型异常 二、Python 捕获所有类型异常 - 捕获 Exception 异常1、捕获 Exception 类型异常 - 可获取异常类型2、代码实例 - 捕获 Exception 异常 一、Python 默…

管理类联考——逻辑——知识篇——形式逻辑——三、直言——haimian

直言 考点分析 直言 年度 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023题量786223232 性质定义 直言命题也叫做性质命题,是判断事物是否具有某种性质的命题。直言命题由四部分组成:主项、谓项、联项、量项。 不同种类 对当关系 对…

PID控制算法:2、Derivative Kick(微分冲击)

什么是微分冲击Derivative Kick 引入微分,就是为了减少超调量的,但是根据PID的经典公式 就看微分部分 在PID刚开始时,误差值肯定是存在的,但是PID启动的瞬间,这个dt是很小的,这就导致是一个很大的值&#…

软件开发实习个人总结

软件开发实习个人总结篇1 一、实习目的 随着时代发展和社会进步,用人单位对游戏软件专业大学生的要求越来越高,对于即将毕业的游戏软件专业在校生而言,为了能更好的适应游戏软件专业严峻的就业形势,毕业后能够尽快的融入到社会&am…

Golang学习日志 ━━ 通过将gin-vue-admin项目上传到自己的仓库并且与原版保持更新来学习github操作

gin-vue-admin是一套国人用golang开发的后台管理系统,本文是从作者早期原文中截取的一部分,后期会以本文为框架进行扩展说明。 官网:https://www.gin-vue-admin.com/ 学习视频:https://www.bilibili.com/video/BV1kv4y1g7nT/?p6 …

Redis 2023面试5题(七)

一、Redis redlock 实现原理 Redlock是一种基于Redis的分布式锁实现,它可以解决在分布式系统中由于主从切换、网络延迟等导致的锁竞争问题。 Redlock的实现原理如下: 创建多个Redis实例,每个实例都有相同的锁名称。使用Redis的SETNX命令尝试…

如何选择消息中间件

一、 分布式系统消息通信技术简介 分布式系统消息通信技术主要包括以下几种: 1. RPC(Remote Procedure Call Protocol). 一般是C/S方式,同步的,跨语言跨平台,面向过程 2. CORBA(Common Object Request Broker Architecture). CO…

Vlan与ARP讲解

目录 Vlan讲解 Vlan标签 二层接口类型 ARP ARP的作用 ARP地址解析报文讲解 免费ARP报文讲解 ARP缓存表 Vlan讲解 Vlan(Virtual Local Area Network)虚拟局域网,将一个物理的LAN在逻辑上划分为多个广播域;可以理解为一个V…

RT-Thread-11-事件集

事件集 举例说明事件集: 1、A坐公交车去某地,只有一趟公交车去该地,等此公交车即可出发; 2、A坐公交车去某地,有三趟公交车去该地,等其中任意一辆公交车即可出发; 3、A约B一起去某地&#xff0…

点亮你的创意,使用Python与树莓派制作呼吸灯的详细教程

文章目录 前言PWM的介绍实现PWM控制LED亮度结果与分析 前言 在上一篇文章中,我们介绍了如何在树莓派上点亮一个LED灯,并让它以时间间隔为1秒进行闪烁。闪亮登场!在树莓派上点亮LED灯的简单详细方法_☞黑心萝卜三条杠☜的博客-CSDN博客。现在&…

【剑指offer刷题记录 java版】数组双指针 之 其它题目

本系列文章记录labuladong的算法小抄中剑指offer题目 【剑指offer刷题记录 java版】数组双指针 之 其它题目 剑指 Offer II 018. 有效的回⽂剑指 Offer 58 - I. 翻转单词顺序剑指 Offer 21. 调整数组顺序使奇数位于偶数前⾯剑指 Offer 57. 和为s的两个数字剑指 Offer II 007. 数…

【裸机开发】IRQ 中断服务函数(三)—— 中断处理逻辑实现

实现了 IRQ 中断服务函数的汇编部分以后,接下来我们要使用C代码实现IRQ中断服务函数的具体逻辑,主要包含初始化和中断处理两部分。 全局中断初始化(全局中断使能、IRQ中断使能)具体中断处理逻辑实现 我们这里的中断是由按键产生…

springboot+mybatisplus复习笔记

1.环境搭建 依赖配置 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifa…