单片机定时功能用什么实现?有哪几种方式?

看了这么多回答,忍不住来终结下这个问题。

不管你是菜鸡还是大佬,总有一种方式适合你,尤其最后一个

在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函数里即可,这就很舒服…

我绝对不是那种装完逼就跑的人…

这套架构有系统的教程,是我2019年录来玩的,本来打算拿出来卖,后面被工作分心了,现在不收费,交个朋友。

想在线看的直接在小破站找无际单片机编程,想下载到电脑看的,可以找我拿。

给TA买糖
共{{data.count}}人
人已赞赏
单片机百科

esp32能取代stm32吗?哪个好?

2023-2-28 14:46:49

单片机百科

无际单片机编程怎么样?是坑人的吗?

2023-3-1 16:50:06

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧