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源程序代码如下所述。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。