STM32的滴答时钟怎么设置延时时间?
在以前,大多数系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如把每个定时器的某个时间范围给予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访它的寄存器,以维持操作系统“心跳”的节律。
滴答定时器可以简单作为延时用,那么设置我们所需要的延迟时间就很重要了。
基础知识预备:
- 01
首先创建STM32工程,本文以简单的点亮LED及其闪烁实例为例,给大家介绍怎么用滴答定时器(SysTick),编写简单延时程序(就要用51一样的延时)。
- 02
新建两个文件delay.c和delay.h,添加到工程中。
- 03
SysTick 是一个 24 位的倒计数定时器,当计到 0 时,将从 RELOAD 寄存器中自动重装载定时初值。当 SysTick 控制及状态寄存器中的使能位永不清除时,SysTick 就将永不停止的进行计数。下面是关于它的寄存器关键位介绍。
延时构思:
- 01
第一步:首先确定时钟源(本例为72Mhz),滴答时钟的时钟为系统源时钟的8分频;
- 02
第二步:算出各个时间所占的时钟份数,比如说:1ms占72000000/8/1000 =9000这么多个时钟周期;所以要延时10ms需要10*9000=90000个时钟周期。(1ms = 1/1000s)
- 03
第三步:对各个寄存器进行操作。(重装寄存器,当前计数寄存器,控制及状态寄存器);判断计数为零的时候,停止循环,就达到了延时的目的。
程序完整设计:
- 01
LED引脚端口初始化。
- 02
主函数完善:延时初始化,LED管脚初始化,while循环(LED0隔400毫秒闪烁)
结果与分析:
- 01
程序下载,最终效果图。效果如理想一样隔400毫秒闪烁。
赞 (0)