蓝桥杯嵌入式——滴答定时器

蓝桥杯嵌入式——滴答定时器

作者:张阿永  QQ:793805481

  在用液晶驱动参考例程编写程序时,可以发现这个工程里面还为我们提供了一个滴答定时器的MS延时函数,达到一个延时的效果。这篇文章,我们就介绍一下滴答定时器。
在这里插入图片描述
  SysTick定时器(系统滴答定时器)是一个倒计时定时器,被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15),每1ms产生一次中断。
中断函数在:
在这里插入图片描述
中断服务函数:
中断函数
  因此,调用函数时,也就是每过1ms,TimingDelay的值会自动减1,当TimingDelay不等于0时,不断循环,直到延时结束。

void Delay_Ms(u32 nTime)
{
	TimingDelay = nTime;
	while(TimingDelay != 0);	
}

  至于滴答定时器的相关配置,液晶驱动例程里边已经帮我们配置好了,我们直接调用Delay_Ms()就行,当要在main.c文件之外的其他.c文件调用时,我们只需要如下声明后即可正常调用。

extern void Delay_Ms(u32 nTime);

  比起让系统循环等待实现延时,直接利用滴答定时器实现延时显然比较方便。而且,滴答定时器的中断函数中,还可以写入其他内容,实现定时等效果。
比如:
在这里插入图片描述
关于静态变量,简单理解,也就是只定义一次,在函数调用完成时值会一直被保留。
然后,在main函数中:
在这里插入图片描述
就实现了每过50ms,就会自动执行一次KEY_Scan()函数。显然,这样比起让系统循环等待,利用stm32处理程序所用的机器时间去延时更有效。

那么,在这个中断函数里面添加代码,会不会导致延时不准呢?
答案是,会的,但这对这个定时器的精准度影响是很小的,几乎可以忽略不计,我们一般不予考虑。


蓝桥杯嵌入式比赛中,滴答定时器的应用还是很重要的,我们有必要弄清楚它。这篇文章就介绍到这里,欢迎大家私信提问。
发布了6 篇原创文章 · 获赞 1 · 访问量 1179

猜你喜欢

转载自blog.csdn.net/qq_44944624/article/details/104943628