历史上的今天
今天是:2026年03月14日(星期六)
2023年03月14日 | 单片机定时功能用什么实现?有哪几种方式?
2023-03-14 来源:zhihu
在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函数里即可,这就很舒服…
上一篇:单片机定时器和计数器的概念
史海拾趣
|
如果单纯为了帖子数量,我支持复制和重复。 但是一个服务器能不能承受这么多复制帖子真让我失望。 比如一个资料,老是发来发去,我觉得很没意思的。 代码也是很多复制,粘贴形式。 解决问题的人少了,都是一些瞎话。比如我帮你顶,我也在等,希 ...… 查看全部问答> |
|
我才学汇编,课后有一个题:判断主存0070:0开始的1KB中有无字符串 DEBUG ,我编好后用MASM 运行,没错,但是DOS窗口出来总是显示乱码,麻烦大家帮忙看下哪错了~~~~谢谢啦~~~~ 下面是全部的代码: &n ...… 查看全部问答> |
|
入门同志编写的程序,简析其写法与表达错误! LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Manchester_encoder IS PORT(D:IN STD_LOGIC; Q ...… 查看全部问答> |
|
同样的电路HDMI一致性测试,我们北京office的同事和上海的同事测试的结果为什么有时候差距甚大呢?(测试仪器是完全相同的型号,相同的板子)谁有类似的遭遇分享一下?谢谢~~… 查看全部问答> |
|
AP5056 大电流充电管理代理 13927409969 李生 AP5056是一颗超好用的大电流充电管理IC,充电电流可达1A,SOP-8封装。价格低廉,品质稳定,被广泛用于移动电源,PSP等锂电供电产品中。本公司为一级代理商,长期稳定供货。原厂技术支持。需要联系。 … 查看全部问答> |
|
一点一点搭建起程序框架,实现方便移植,异于管理的一个通用模版 这个帖子,实际上可以认为是先前我发的那个帖子 让我们一起来搭建一个 单片机通用程序模版 的 后续篇章。那一章里,主要阐述了我自己的观点和想法,最后觉得比较空,毕竟这个模版要在实际操作中,针对遇到的新情况重新分析,增删修改,才能真正实现 ...… 查看全部问答> |
|
高手们给分析下void (*func(void (*p)(void *)))(void *) void (*func(void (*p)(void *)))(void *) { return p; }看了好久没怎么明白。这样写的意思,目的。 [ 本帖最后由 zw357234798 于 2012-9-4 07:39 编辑 ]… 查看全部问答> |
|
刚接触51单片机的串口知识,遇到一个问题,希望大家解答 串口控制LED灯的程序: #include unsigned char flag; unsigned char temp; main() { TMOD=0x20; TH1=0xFD; TL1=0xFD; TR1=1; ...… 查看全部问答> |
|
本人刚接触9b96时间不长,现在遇到这样一个问题: 采用的UDP协议,初始化配置后简单的发送与接收都正常,但是中间加入其他一些GPIO配置 ,整个程序就无法正常工作,也ping不通板子。 不知道大侠们知道其中的问题吗 ?真心请教! 就加 ...… 查看全部问答> |




