标题: STM8学习笔记—定时器定时功能和中断相关 [打印本页]

作者: 51黑黑黑    时间: 2016-2-12 20:37
标题: STM8学习笔记—定时器定时功能和中断相关
  定时器都差不多,无非就是计数,溢出了标志置位,如果中断允许的话产生一个中断。说到中断,STM8S105的中断向量表如下

时基单元:

  在选用内部时钟的情况下,CK_PSC是由fmaster提供的,经过定时器预分频器分频产生CK_CNT时钟,然后作为一次计数的时基,举个例子,16M的内部RC,经过16分频,则CK_CNT为1M,那么定时1ms只需计数1000次。

计数模式:
共有三种:向上,向下,中央对齐

以向上计数为例:计数器从0计数到用户定义的比较值(TIMx_ARR寄存器的值),然后重新从0开始计数并产生一个计数器溢出事件,同时,如果TIM1_CR1寄存器的UDIS位是0,将会产生一个更新事件(UEV)。

关于IAR中断函数的写法
asm("sim");//关全局中断
asm("rim");//开全局中断

#pragma vector=TIM2_OVR_UIF_vector (这里根据上面的中断向量表选择要进入的中断的向量)
__interrupt void TIM2_OVR_UIF(void)//__interrupt关键字表示中断函数
{
  TIM2_SR1&=~0x01;  //清除更新中断标记,这步不能漏掉,否则会连续进入中断程序
//内容
}

参考程序:(以TIM2为例)
void TIM2_Init(void)
{//定时器1初始化
CLK_PCKENR1|=0x20;//开启定时器1外设时钟
  TIM2_ARRH=(1000-1)/256;//设定重装载值
  TIM2_ARRL=(1000-1)%6;
  TIM2_PSCR=4;//预分频
  TIM2_IER=0x01;
  TIM2_CR1=1;//边沿对齐,向上计数
}

#pragma vector=TIM2_OVR_UIF_vector
__interrupt void TIM2_OVR_UIF(void)
{
  TIM2_SR1&=~0x01;  //清除更新中断标记,这步不能漏掉,否则会连续进入中断程序
}






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1