当前位置: 首页 > news >正文

(四)Proteus仿真STM32单片机使用定时器控制LED

(四)Protues仿真STM32单片机使用定时器控制LED – ARMFUN

定时器在单片机中具有重要的作用,它可以提供精确的时间控制和事件触发功能。相比之下,使用延时函数(delay function)来实现时间控制存在以下一些坏处:

  1. 阻塞程序执行:使用延时函数会导致程序在延时期间无法执行其他任务,因为延时函数通常是通过循环等待一段时间来实现的。这会浪费处理器的计算资源,并且可能导致程序响应变慢或失去实时性。
  2. 不精确的时间控制:延时函数的延时时间通常是通过估算或试错来确定的,而不是精确的时间控制。这意味着延时函数的实际延时时间可能会受到许多因素的影响,如处理器速度、其他任务的执行等。这样就无法保证在不同的环境下延时时间的准确性和一致性。
  3. 无法处理并发事件:延时函数只能提供固定的延时时间,无法根据实际情况处理并发事件。例如,在需要同时处理多个事件或任务的情况下,延时函数无法灵活地调整延时时间以适应不同的事件触发。

相比之下,定时器可以解决上述问题,并提供更灵活和精确的时间控制。定时器可以设置特定的时间间隔,并在达到指定时间间隔时触发相应的事件或任务。它可以在后台运行,不会阻塞程序的执行,并且可以处理并发事件。定时器还可以提供更高的精度和稳定性,以满足实时性要求。

因此,使用定时器而不是延时函数可以提供更好的时间控制和任务调度能力,提高程序的效率和可靠性。

再上一篇文章中,我们使用HAL_Delay()函数实现延时切换灯的状态,是非常糟糕的代码设计模式,在CubeMX生成的代码中,默认已经启动了系统定时器,定时中断1毫秒。我们只需要重写定时器中断回调函数即可。下面的代码重新实现了led灯的控制,由于使用了定时器计时模式,不会造成主循环CPU空转不能处理其它任务的问题了。

在main.c文件中增加一个变量led_delay和 HAL_IncTick函数如下,可以在keil项目中搜索这个函数,这样函数原来定义的地方有__weak前缀,代表函数可以重写,HAL_Delay()用到了uwTick,所以重新时保留原来的代码,增加led_delay++;

int led_delay=0;
void HAL_IncTick(void)
{uwTick += uwTickFreq;led_delay++;
}

while循环中改成如下代码:

while(1)
{if(led_delay==500){HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET);}else if(led_delay==1000){HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);led_delay=0;}
}

这里注意主循环内没有耗时的任务,所以每毫秒内会循环多次,所以在led_delay==500时会多次调用HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET);虽然目前看起来正常,但最好避免这种情况,修改后的代码如下

while(1)
{static char led_on_flag=0;if(led_delay>=500){if(led_on_flag==0){       HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET); led_on_flag=1;        }else{HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);led_on_flag=0;}led_delay=0;}
}

相关文章:

(四)Proteus仿真STM32单片机使用定时器控制LED

(四)Protues仿真STM32单片机使用定时器控制LED – ARMFUN 定时器在单片机中具有重要的作用,它可以提供精确的时间控制和事件触发功能。相比之下,使用延时函数(delay function)来实现时间控制存在以下一些坏…...

Python快速编程小案例——打印蚂蚁森林植树证书

提示:(个人学习),案例来自工业和信息化“十三五”人才培养规划教材,《Python快速编程入门》第2版,黑马程序员◎编著 蚂蚁森林是支付宝客户端发起“碳账户”的一款公益活动:用户通过步行地铁出行、在线消费等…...

Cherno游戏引擎笔记(61~72)

---------------一些维护和更改------------- 》》》》 Made Win-GenProjects.bat work from every directory 代码更改: echo off->pushd ..\->pushd %~dp0\..\call vendor\bin\premake\premake5.exe vs2019popdPAUSE 为什么要做这样的更改? …...

FWA(固定无线接入),CPE(客户终端设备)简介

文章目录 FWA(Fixed Wireless Access),固定无线接入CPE(Customer Premise Equipment),用户驻地设备 FWA(Fixed Wireless Access),固定无线接入 固定无线接入&#xff08…...

使用IDEA启动项目build时,解决Java编译时内存溢出问题:OutOfMemoryError深入解析

文章目录 简介问题描述解决方案常见解决方案示例代码示例1:增加JVM堆内存代码示例2:检查并修复内存泄漏代码示例3:分批编译代码示例4:使用编译器参数减少内存使用代码示例5:升级编译器和库 结论进一步的资源 简介 在J…...

Kafka如何实现高可用

Kafka实现高可用性主要依赖于其副本机制和Leader选举。以下是Kafka实现高可用的关键点: 多副本机制:Kafka中的每个分区(Partition)都有多个副本(Replica),这些副本分布在不同的Broker上。其中一…...

高级java每日一道面试题-2024年10月1日-服务器篇[Redis篇]-Redis数据结构压缩列表和跳跃表的区别?

如果有遗漏,评论区告诉我进行补充 面试官: Redis数据结构压缩列表和跳跃表的区别? 我回答: 关于Redis数据结构的理解是一个重要的考察点,特别是压缩列表(ziplist)和跳跃表(skiplist)这两种数据结构&…...

使用 ElLoading 组件来实现加载(loading)功能

在 Element Plus 中,你可以使用 ElLoading 组件来实现加载(loading)功能。ElLoading 通常用于在数据加载或某些异步操作进行时,向用户展示一个覆盖整个页面的加载提示。 以下是如何在你的 Vite Vue 3 JavaScript 项目中使用 El…...

Win10 IDEA连接虚拟机中的Hadoop(HDFS)

获取虚拟机的ip 虚拟机终端输入 ip a关闭虚拟机防火墙 sudo ufw disable修改Hadoop的core-site.xml文件 将localhost修改为虚拟机局域网IP # 位置可能不一样,和Hadoop安装位置有关 cd /usr/local/hadoop/etc/hadoop vim core-site.xmlIDEA 连接 创建Maven项目…...

tp8自带的文件缓存如何配置

TP8自带的缓存是文件缓存。‌ ThinkPHP6默认的缓存驱动是文件缓存,它将缓存数据存储在应用的runtime目录下的cache目录中。文件缓存适用于单机环境下的应用,对于数据量较小且读写频率较低的应用场景,是一种简单有效的缓存方案‌。 ThinkPHP8…...

【环境搭建】MAC M1安装ElasticSearch

STEP1 官网下载ES Download Elasticsearch | Elastic,下载mac m1对应版本的es STEP2 进入bin文件夹,执行./elasticSearch 浏览器输入 127.0.0.1:9200 STEP 3 下载对应Kibana版本,Download Kibana Free | Get Started Now | Elastic 出现报错…...

[linux 驱动]网络设备驱动详解

目录 1 描述 2 结构体 2.1 net_device 2.2 sk_buff 2.3 net_device_ops 2.4 ethtool_ops 3 相关函数 3.1 网络协议接口层 3.1.1 dev_queue_xmit 3.1.2 netif_rx 3.1.3 alloc_skb 3.1.4 kfree_skb 3.1.5 skb_put 3.1.6 skb_push 3.1.7 skb_reserve 3.2 网络设备驱…...

【ShuQiHere】 重新定义搜索:本体搜索引擎的时代

🌐 【ShuQiHere】 什么是本体搜索引擎?🤖 本体搜索引擎(Ontological Search Engine, OSE) 是一种基于语义理解和本体结构的智能搜索工具。与传统的关键词搜索不同,本体搜索引擎能够理解搜索背后的深层语义…...

Ruby脚本:自动化网页图像下载的实践案例

随着互联网的快速发展,网页上的内容变得越来越丰富,尤其是图像资源。对于需要大量图像资源的设计师、内容创作者或数据分析师来说,手动下载这些图片不仅耗时耗力,而且效率低下。因此,自动化网页图像下载成为了一个迫切…...

ArcGIS中分区统计栅格值前需要进行投影吗(在投影坐标系下进行吗),为什么?

最近,我接到了一个分区统计栅格数值前需要进行投影,或者说是必须需要在投影坐标系下进行吗的咨询。 答案是不需要刻意去变。 但是他又说他把地理坐标系下分区统计结果与投影坐标系下的分区统计结果分别做了一遍,并进行了对比,两个…...

怎么将视频原声提出来?视频原声提取,让创作更自由

在数字媒体时代,视频已成为我们日常生活和工作中不可或缺的一部分。有时,我们可能想要提取视频中的音频部分,无论是为了制作音频素材、学习语言,还是为了其他创意用途。那么,怎么将视频原声提出来呢?本文将…...

在IDEA里用XDebug调试PHP,断点....

做程序开发,调试必不可少,这里最近用到了PHP,顺便写个关于PHP的调试安装使用: 1、首先是PHP先安装xdebug扩展(还有zend的),这个我的工具是IDEA,所以安装方法也相对简单,如果你是用VSCode等应该也是一样,如下图,找到这个PHP->DEBUG 2、直接点上面的Install XDebug 就可以帮你…...

如何设置 GitLab 密码过期时间?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 60天专业…...

重学SpringBoot3-集成Redis(十二)之点赞功能实现

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(十二)之点赞功能实现 1. 点赞功能的场景分析2. 项目环境配置2.1. 依赖引入2.2. Redis 配置 3. 点赞功能的实现3.1. 点…...

Django-rest-framework(DRF)怎么实现Excel文件导出

目录 一、安装openpyxl库 二、openpyxl库介绍 1、工作簿 a、创建工作簿 b、加载工作簿 c、保存工作簿 2、工作表 a、获取工作表 b、创建和删除工作表 c、工作表属性设置 3、单元格 a、获取单元格 b、合并单元格 C、设置单元格样式 三、django集成openpyxl库 一、…...

Rufus安装ubantu系统全过程

清水补充:这次安装的是ubantu22.04版本,准备来给两个电脑装,内存分配是分别是,微星老电脑是一个盘200G,/boot 使用1G,/swap 17G , 、/ 根目录90G,/home 文件目录96G ,实验…...

对话意图识别新选择:轻量ESFT模型高效易用

对话意图识别新选择:轻量ESFT模型高效易用 【免费下载链接】ESFT-token-intent-lite 基于HuggingFace平台,deepseek-ai团队推出的ESFT-token-intent-lite模型,是ESFT-vanilla-lite的精简版,专为意图识别优化,性能卓越&…...

RWKV7-1.5B-g1a部署案例:从零搭建轻量中文对话服务,60秒完成API调用

RWKV7-1.5B-g1a部署案例:从零搭建轻量中文对话服务,60秒完成API调用 1. 模型简介 rwkv7-1.5B-g1a是基于新一代RWKV-7架构开发的多语言文本生成模型,特别适合中文场景下的轻量级对话应用。这个1.5B参数的版本在保持较高生成质量的同时&#…...

3步精通FanControl:从噪音难题到智能散热的技术蜕变

3步精通FanControl:从噪音难题到智能散热的技术蜕变 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/F…...

别再拷贝sxs文件夹了!Win10教育版1903安装.NET 3.5最简方案(实测有效)

彻底解决Win10安装.NET 3.5报错0x800F081F的高效方案 每次在Win10上安装.NET Framework 3.5时遇到0x800F081F错误,都让人抓狂。网上那些让你拷贝sxs文件夹的教程,99%都在误导人。作为一位经历过无数次失败的老手,我要分享的是经过上百次验证的…...

保姆级教程:用Docker Compose一键部署Calibre-Web,再也不用担心电子书管理了

零基础打造个人电子书库:Docker Compose全栈部署Calibre-Web实战指南 在数字阅读时代,如何高效管理日益增长的电子书资源成为许多读者的痛点。传统文件管理方式难以满足多设备同步、元数据整理和阅读进度跟踪等需求,而Calibre-Web正是为解决这…...

Nano Banana API 来了:不到半价享官方同款品质,仅需约 ¥0.10/张!

最近被谷歌新发布的 Nano Banana(Gemini 2.5 Flash Image)图像生成模型 霸屏了。 从手办秒变真人级 Cosplay,到一键统一多图风格,从个性化头像到产品概念设计,甚至连静态画作都能一键生成电影级动态分镜——这波 AI 生…...

JPEXS Free Flash Decompiler与Web3.0存储:去中心化SWF文件管理的终极指南

JPEXS Free Flash Decompiler与Web3.0存储:去中心化SWF文件管理的终极指南 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler JPEXS Free Flash Decompiler是一款功能强大的开源…...

聚焦数据中心基建核心:我国服务器机架导轨市场规模达8.1亿元,产业支撑力凸显

据恒州诚思最新调研数据显示,2025年全球服务器机架导轨市场规模达8.1亿元,预计至2032年将增长至11.61亿元,期间复合增长率(CAGR)为5.3%。这一增长受多重因素驱动:全球数据中心建设加速,预计2026…...

League-Toolkit:英雄联盟智能辅助工具的效率提升之道

League-Toolkit:英雄联盟智能辅助工具的效率提升之道 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit是…...