STM8S供给三种类型的TIM 守时器:高档操控型(TIM1)、通用型(TIM2/TIM3/TIM5)和根本型守时器(TIM4/TIM6)。它们虽有不同功用但都根据一起的架构。此一起的架构使得选用各个守时器来规划运用变得十分容易与便利(相同的寄存器映射,相同的根本功用)。
运用守时能够确认一个时刻片,便利操控发送速率,采样速率,等等一些对时刻要求比较高的使命,而这些操作能够放入守时器中止里边履行。这次的比如,守时1s,让LED灯翻转一次,到达2s闪耀一次的作用。因为守时操作简略,咱们运用根本守时器:TIMER4
void Init_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的守时时刻。
接下来是守时终端函数,在函数中咱们能够其他操作:
u16 i=0;
#pragma vector = TIM4_OVR_UIF_vector //0x19
__interrupt void TIM4_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、I%&&&&&%、PWM、AWU、USART、EEPROM等片上硬件的初始化代码。
http://download.csdn.net/detail/devintt/9454188