打印

STM8定时器4初始化详细步骤及注意事项

[复制链接]
2216|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huiafs|  楼主 | 2013-10-1 11:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void Init_Tim4(void)  //定时器4初始化
{         
               
    TIM4_CR1=0x02;//关闭中断标志(如果你软件写入更新事件,不关闭将导致开启定时器中断及总中断后马上先进入中断函数)
    TIM4_CNTR=0; //计数器初值
    TIM4_ARR=0xFf; //自动重装寄存器值255,从0-255供计数256次
    TIM4_PSCR=0x07; //预分频系数为128 ,2的7次方,因为定时器4的时钟就等于主时钟Fmaster,如果你的主频fmaster是2MHZ的话,那么计数器就是2MHZ除以128  
    TIM4_EGR=0x01; //手动产生一个更新事件,让ARR寄存器的值送影子寄存器,使TIM4_ARR里的值生效(因为之前关闭了中断标志,所以TIM4_SR里的中断标志不会置位)
    TIM4_IER=0x01; //定时器4中断使能   
    TIM4_CR1=0x01; //使能计时器,并使能中断标志
    _asm("rim");//开总中断(这里因为中断标志位为0,所以不会马上开始进入中断函数,要等下一个更新时,中断标志位才会置位,并进入中断函数,在中断函数里要清除中断标志位)               
}

上面几部中不管你有没使能ARPE位都通用,如果你不使能ARPE位,TIM4_CR1=0x02;TIM4_EGR=0x01;这两句可以不要,也不会马上进入中断函数
沙发
金融小数| | 2013-10-1 12:36 | 只看该作者
本帖最后由 金融小数 于 2013-10-1 12:37 编辑

“TIM4_CR1=0x02;//关闭中断标志(如果你软件写入更新事件,不关闭将导致开启定时器中断及总中断后马上先进入中断函数)”
-------这样是关闭中断?

“TIM4_EGR=0x01; //手动产生一个更新事件,让ARR寄存器的值送影子寄存器,使TIM4_ARR里的值生效(因为之前关闭了中断标志,所以TIM4_SR里的中断标志不会置位)”
-------你上面的TIM4_CR1的bit7没有置1,你这个操作就是画蛇添足。

“_asm("rim");//开总中断”
------在Timer4初始化中开总中断?之前你关过吗?如果其他外设还没初始化,此时开中断是否合适?

使用特权

评论回复
板凳
huiafs|  楼主 | 2013-10-6 14:11 | 只看该作者
金融小数 发表于 2013-10-1 12:36
“TIM4_CR1=0x02;//关闭中断标志(如果你软件写入更新事件,不关闭将导致开启定时器中断及总中断后马上先进 ...

上面几部中不管你有没使能ARPE位都通用,如果你不使能ARPE位,TIM4_CR1=0x02;TIM4_EGR=0x01;这两句可以不要,也不会马上进入中断函数

使用特权

评论回复
地板
huiafs|  楼主 | 2013-10-6 14:12 | 只看该作者
金融小数 发表于 2013-10-1 12:36
“TIM4_CR1=0x02;//关闭中断标志(如果你软件写入更新事件,不关闭将导致开启定时器中断及总中断后马上先进 ...

主函数关总中断

使用特权

评论回复
5
hkcj| | 2013-10-7 10:11 | 只看该作者
应该将函数的中断关闭   再试一试  应该就行了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

1

粉丝