标题:
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