电子工程师技术服务社区
- 社区首页
- 下载
- Template.rar
资料描述
在单片机开发过程中,必然会涉及到一个延时程序的编写的问题,而一般的做法是一个for循环里去减一个很大的数,直到为0,则延时完成,那个数的值则是根据时钟频率和指令运行周期,估算出来的,不够精确。其中常用的一种方法是,在keil中设定好时钟频率,然后通过软件仿真试来算延时时间,以达到较精确定时。但这种方法一般都不够方便,延时也不够精确,更高阶一点的方法便是开一个定时器,在定时中断里面计数达到精确延时的目的。
在stm32的应用中,可考虑利用systick系统嘀嗒定时器来实现。但在stm32开发手册中对它的介绍却很少,几乎到没有的程度。因为它是cortex内核的部分,cm3为它专门开出一个异常类型,并且在中断向量表中占有一席之地(异常号15),这样它可以很方便的移植到不同厂商出cm3内核的芯片上,并且对于有实时操作系统的软件,它一般会作为整个系统的时基,这个对操作系统非常重要。有关systick的详细介绍可参考《cortex-m3 权威指南》第133 页第八章及第179页第十三章。
1 认识systick时钟
stm32中的systick,属于nvic控制部分,一共有4个寄存器,如下图所示
(1)stk_csr控制寄存器:
其中:
第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)