理论教育 STM32物联网应用:系统时基定时器

STM32物联网应用:系统时基定时器

时间:2023-11-09 理论教育 版权反馈
【摘要】:Cortex-M3处理器内部包含了一个简单的定时器。所有的CM3芯片都带有这个定时器,因而软件在不同CM3器件间的移植工作得以简化。STM32F103x系列系统默认是外部时钟。SysTick为一个24位递减计数器,SysTick设定初值并使能后,每经过1个系统时钟周期,计数值就减1。如图4.15所示,利用系统时基定时器,完成对蜂鸣器的控制,要求响停时间均为0.5秒。由前面的知识可知,使用软件延时、定时器均可。本例介绍使用Systick定时器,采用查询方式实现精确延时的一种方法。

STM32物联网应用:系统时基定时器

Cortex-M3处理器内部包含了一个简单的定时器。所有的CM3芯片都带有这个定时器,因而软件在不同CM3器件间的移植工作得以简化。该定时器的时钟源可以是内部时钟,或者是外部时钟。STM32F103x系列系统默认是外部时钟。

Cortex-M3的内核中包含一个SysTick时钟。SysTick为一个24位递减计数器,SysTick设定初值并使能后,每经过1个系统时钟周期,计数值就减1。计数到0时,SysTick计数器自动重装初值并继续计数,同时内部的COUNTFLAG标志会置位,触发中断(如果中断使能情况下)。

1.SysTick包含的寄存器

STM32中的Systick部分内容属于NVIC控制部分,一共有4个寄存器,名称和地址分别是:

(1)STK_CSR控制寄存器

STK_CSR控制寄存器内的4个位具有下述意义。

第0位:ENABLE,Systick使能位(0:关闭Systick功能;1:开启Systick功能)。

第1位:TICKINT,Systick中断使能位(0:关闭Systick中断;1:开启Systick中断)。

第2位:CLKSOURCE,Systick时钟源选择(0:使用HCLK/8作为Systick时钟;1:使用HCLK作为Systick时钟)。

第16位:COUNTFLAG,Systick计数比较标志,如果在上次读取本寄存器后,SysTick已经数到了0,则该位为1。如果读取该位,该位将自动清零。

(2)STK_LOAD重载寄存器

Systick是一个递减的定时器,当定时器递减至0时,重载寄存器中的值就会被重装载,继续开始递减。STK_LOAD重载寄存器是个24位的寄存器,最大计数为0xFFFFFF。

(3)STK_VAL当前值寄存器

它也是个24位的寄存器,读取时返回当前倒计数的值。写它,则使之清零,同时还会清除在SysTick控制及状态寄存器中的COUNTFLAG标志。

(4)STK_CALRB校准值寄存器

该功能很少使用,这里不再赘述。(www.daowen.com)

【例4.7】如图4.15所示,利用系统时基定时器(Systick定时器),完成对蜂鸣器的控制,要求响停时间均为0.5秒。

图4.15 蜂鸣器硬件电路

2.编程分析

为了控制蜂鸣器的响停,只要循环输出高低电平即可。由前面的知识可知,使用软件延时、定时器均可。本例介绍使用Systick定时器,采用查询方式实现精确延时的一种方法。当然,也可使用Systick定时器中断方式实现,方法和通用定时器类似,不再介绍了。

编程要点:

(1)配置PE2引脚。

(2)配置Systick定时器。

(3)编写主函数。

程序编写及源程序代码分析如下。

(1)复制前面的工程模板文件,由于延时程序常用,建立delay文件夹,用以保存delay.h、delay.c文件,以备后续移植使用,并按前面的方法添加编译路径及源文件到工程中。

(2)编写源程序代码。

delay.h源程序代码如下所述。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈