STM8L152R8T6定时器中断异常,求助~~!

2019-03-23 16:16发布

本帖最后由 ZXDSCCD 于 2018-3-29 06:02 编辑

//定时器初始化和启动
void TIM2_Init(void)
{
CLK_PCKENR1_PCKEN10=1;//开启定时器2外设时钟
TIM2_PSCR=0x0f;//不分频
TIM2_ARRH = 0x27; // 自动重载寄存器,10000
TIM2_ARRL = 0x10; // 计数达到该值即重头开始计数,(更新)
TIM2_CNTRH =0x00;//设定计数器起始值(出现异常后增加了这段程序)
TIM2_CNTRL =0x00;
TIM2_IER = 0x01; // 允许更新中断
TIM2_SR1_UIF=0;//清除中断标志 (出现异常后才加的这代码,异常照旧)
TIM2_CR1 = 0x85; // 允许溢出中断,开始计数
}

//下面是定时器2中断程序
//TIM2溢出中断,采样时间进行定时
#pragma vector = TIM2_OVR_UIF_vector
__interrupt void EXIT_TIM2_OVR(void)     //中断服务函数
{         
TIM2_SR1_UIF=0;//清除中断标志      
TIM2_CR1 = 0x00; //停止计数器2      
TIM2_CNTRH =0x13;//设定计数器起始值,5000(出现异常后增加了这段程序)      
TIM2_CNTRL =0x88;      
TIM2_CR1 = 0x85;//// 允许溢出中断,开始计数
}

#include <iostm8l152r8.h>
//主函数
int main( void )               
{                  
asm("rim");                  
TIM2_Init();                     
while(1);                 
}
照上面的程序运行,在计数到10000时能够进入中断,但是问题在于定时器一起动就先进入中断(从5000开始计数),然后才正常计数到10000后再次进入中断。换成定时器3,定时器4,定时器5,都一样的情况,不管是先请中断标志再启动定时器,还是启动定时器立即清除中断标志都一样的效果,初始化顺序来回调整都一样的效果,折腾一晚上了,还没搞定。







此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。