STM32
精确延时的实现方法
前面用
STM32
的
GPIO
模拟液晶驱动时序时遇到一个问题,就是怎样产生一段较为精确的延时。通常产生一小段延时的方法就是
利用一个递增或者递减循环进行软件延时。
例:
void delay(void)
{
int i="0x0ff";
while (i--)
;
}
我在使用
MPLAB
IDE
进行
PIC
单片机的开发时,
MPLAB
提供了一个
Watch
(跑表)功能,可以很方便的查看一个函数或一段代码
的运行时间,
利用这个功能就可以很容易的编写能产生精确延时的代码。
而据我目前了解的情况,
不管是
IAR
还是
RealView
MDK
都没有提供类似的功能,这样就不能像上例那样来获得较为精确的延时了。
有人说了,可以用定时器中断的方法来产生精确延时,一点没错,不过在
STM32
中还可以采用更简单的方法来产生精确延时,
那就是利用
Cortex
系统定时器—
SysTick
。
在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许以不
同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提
供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意
访问它的寄存器,以维持操作系统“心跳”的节律。
SysTick
的最大使命,就是定期地产生异常请求,作为系统的时基。