您现在的位置: 主页 > MCU > 单片机技术应用 > stm8s开发(五) TIMER的使用:定时! -
本文所属标签:
为本文创立个标签吧:

stm8s开发(五) TIMER的使用:定时! -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]STM8S提供三种类型的TIM定时器:高级控制型(TIM1)、通用型(TIM2/TIM3/TIM5)和基本型定时器(TIM4/TIM6)。它们虽有不同功能但都基于共同的架构。此共同的架构使得采用各个定时器来设计应用变得非常容易与方便(相同的寄

STM8S提供三种类型的TIM定时器:高级控制型(TIM1)、通用型(TIM2/TIM3/TIM5)和基本型定时器(TIM4/TIM6)。它们虽有不同功能但都基于共同的架构。此共同的架构使得采用各个定时器来设计应用变得非常容易与方便(相同的寄存器映射,相同的基本功能)。

本文引用地址: http://www.21ic.com/app/mcu/201807/781325.htm



使用定时可以确定一个时间片,方便控制发送速率,采样速率,等等一些对时间要求比较高的任务,而这些操作可以放入定时器中断里面执行。这次的例子,定时1s,让LED灯翻转一次,达到2s闪烁一次的效果。由于定时操作简单,我们使用基本定时器:TIMER4


voidInit_Timer4(void)

{

//128分频256计数,在16MHz下是2.048ms一次中断!

//128分频256计数,在128KHz下是256ms一次中断!

TIM4_CR1=0x00;//关闭计数器

//TIM4_IER=0x00;

TIM4_IER=0x01;//更新中断使能

TIM4_EGR=0x01;

TIM4_CNTR=255;//计数器值

TIM4_ARR=255;//自动重装的值

TIM4_PSCR=0x07;//分频值

TIM4_CR1=0x01;//使能计数器

}


值得注意的是,如果我们使用16M为主时钟的话,通过最大分频和最大计数,我们也最多能达到2.048ms的定时时间。同理,使用128K为主时钟的话,最多能达到256ms的定时时间。

接下来是定时终端函数,在函数中我们可以其他操作:



u16i=0;


#pragmavector=TIM4_OVR_UIF_vector//0x19

__interruptvoidTIM4_OVR_UIF_IRQHandler(void)

{

i++;

TIM4_SR=0x00;

if(i==488)//2.048*488=1000ms

{

LED_Reverse();

i=0;

}

}


这里变量 i 用于计算进入中断的次数,如果我们需要1s翻转LED一次的话,则需要进入中断488次。


当中断返回后, 定时器会自动重载:(TIM4_ARR=255;//自动重装的值)

定时器定时时间与计数器的值有关:(TIM4_CNTR=255;//计数器值)

同时也和分频值有关:(TIM4_PSCR=0x07;//分频值)

开启个关闭寄存器只需要修改TIM4_CR1寄存器:(TIM4_CR1=0x00;//关闭计数器 TIM4_CR1=0x01;//使能计数器)



附上stm8s在IAR环境下的项目工程,包括了SPI、IIC、PWM、AWU、USART、EEPROM等片上硬件的初始化代码。

http://download.csdn.net/detail/devintt/9454188




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > stm8s开发(五) TIMER的使用:定时! -
 

"stm8s开发(五) TIMER的使用:定时! -"的相关文章

网站地图

围观()