延时功能,虽然简单,不过不同的延时需求多了,就很头疼。
在stm32中实现延时2小时的功能,有以下几种方式:
1.使用延时函数
可以使用stm32提供的延时函数来实现延时功能,延时函数根据cpu时钟频率和延时时间计算出延时的时间,在延时期间cpu处于忙等待状态。
需要注意的是,延时函数会占用过多的cpu资源,并且在延时期间无法执行其他任务。
这种方式是初学者玩的,如果用到实际项目,除了大聪明,我找不到更好的词夸你。
2.使用定时器和中断
可以使用stm32内置的定时器和中断来实现延时功能。
将定时器配置为2小时的定时周期,并启用定时器中断。
在中断处理函数中设置标志位表示延时结束,并执行相应的操作。
需要注意的是,定时器中断的频率不能太高,否则会占用过多的系统资源,但中断频率也不能太慢,毕竟定时器是稀缺资源,一个定时器可能有很多不同的定时需求。
这个可能是最多人的选择,毕竟省心、省成本。
3.使用rtc实时时钟
可以使用stm32内置的rtc实时时钟模块来实现延时功能。
将rtc设置为2小时的计时周期,并启用rtc中断。
在中断处理函数中设置标志位表示延时结束,并执行相应的操作。
需要注意的是,rtc的精度相对于定时器较高,但配置和使用上相对复杂。
我一般不会用这种,因为配置比较麻烦,我比较懒。
4.使用外部实时时钟模块
可以使用外部的实时时钟模块,如ds1302等,来实现延时功能。
将实时时钟模块连接到stm32的gpio口,通过spi或i2c等总线协议与stm32进行通信,获取当前时间并计算出延时结束的时间。
需要注意的是,外部实时时钟模块的精度和配置相对于rtc更加复杂。
这种方式有点脱裤子放屁的感觉,还会增加硬件成本,不过有些场合确实需要这样做,比如你看老板不爽,老板又不懂技术的时候。
5.无际原创的程序架构
做了单片机开发10几年,终于轮到我装逼了,如果是我,我肯定用自己写的轮询架构去实现。
比如说上面hal_ledproc这个任务,不管我要定时多长时间去执行,我只需要修改一个数值就可以。
比如2小时换算成ms就是7200000ms,任务tick的时间是10ms,如果想让hal_ledproc任务2小时执行一次,那就设置成72000方可实现。
定时时间到了以后,需要执行什么程序,直接放在hal_ledproc函数里即可,这就很舒服…
源码学习之MyBatis的底层查询原理
传音控股入选“2023中国制造业500强”
小米AIoT布局利好,生态优势能保持住吗
【轴类在线修复】结晶机轴轴承位磨损在线修复
广信材料龙南基地加快投产进程
在STM32中实现延时两小时功能的方法
年底发布的苹果Siri智能音箱能有什么用?
深度解读2.5D/3D及Chiplet封装技术和意义
针对接入网PON OLT光模块产品
PCB设计如何在实操中规范的布局
国产手机“芯”的未来之路在何方?
三星官方宣布GalaxyFold将于今年9月重新上架发售
软通动力天枢元宇宙研究院签约江宁 助力工业元宇宙加速发展
“捷豹最便宜的SUV”-捷豹E-PACE将在伦敦进行全球首发,预售价低于26万
美国警告牙买加,拒绝华为5G建设否则面临金融重击等
魅族Pro7、魅族MX7最新消息:魅族Pro7全面屏真机跑分曝光,魅族MX7或将延迟发布
安卓之父正研发AI手机 美光投资1亿美元押宝AI
瑞萨Pet Tracker解决方案用于宠物训练
英伟达在华发布降性能RTX 4090 D显卡,以满足出口管制
电竞如何实现AR?