定时器在单片机开发中是会被经常用到的,接下来我们一起在STM8中了解一下如何使用定时器。我们的目标是实现开发板出厂Demo程序功能,通过按键来控制LED闪烁的速度。
通过查看STM8S的用户手册可以,STM8S内部有三类6个定时器,其中定时器4比较适合作为时基来使用,这里我们使用定时器4实现一个1ms的定时。
根据STM8S的时钟树可以,定时器的时钟来源于单片机的主时钟,当单片机主频为16MHz是,定时器的时钟源也是16MHz。
定时器4是一个8位自动装载自增定时器,提供可编程的预分频,定时器溢出可以产生中断。
定时器4有3bit可编程预分频,可以实现1,2,4,8,16,32,64,128八种预分频值。
首先在main函数中配置系统时钟,这里采用内部高速时钟,经过一分频,也就是16MHz主频。
在main函数中配置定时器4,采用128分频,对于16MHz来说16 MHz / 128 = 125 000 Hz。
根据定时器计算公式TIM4_PERIOD = (0.001 * 125000 - 1) = 124 ,所以最终定时器重装载值TIM4_PERIOD为124。
接下来使能定时器4中断即可。经过以上配置,定时器就可以产生时间间隔为1ms的溢出中断了。
在stm8s_it.c中修改定时器4的中断函数,调用TimingDelay_Decrement函数后清中断。
在按键中断中调用SetDelayTime函数。
在main.c中定义变量和函数原型。
实现在终端中调用的几个函数,定时器中断产生时调用TimingDelay_Decrement函数,实现TimingDelay变量的递减。
Delay函数实现对递减变量TimingDelay进行赋值。
SetDelayTime函数则相应按键中断,改变延时的数值。
最后在主函数中的主循环调用延时和LED翻转函数,实现LED灯的闪烁。
编译下载后,就可以实现开发板出厂程序的功能,通过按键改变定时器计时长短,达到改变LED闪烁速度改变的效果了。
总结,STM8的定时器有8位和16位两种,8位定时器配合预分频器,可以满足大部分情况下的计时功能了。定时器的使用也不复杂,只要掌握了时钟源和预分频器以及重装载值计算公式,就可以使用定时器的定时功能了。本文转载于【STM8-SO8-DISCO】5定时器
http://www.stmcu.org.cn/module/forum/thread-619216-1-1.html
|