[信息] 开机后定时器一旦使能即进入中断,不经定时。何解?

[复制链接]
1670|11
 楼主| flycamelaaa 发表于 2021-6-4 15:06 | 显示全部楼层 |阅读模式
定时器初始化:

void Init_Timer1(void)
{
    TIM1_CR1=0x00;       //不使能计数器
    TIM1_ARRH=0x2F;     //自动重装的值
    TIM1_PSCRL=0xFF;    //分频值,根据初值和分频值,定时在2秒多;
    TIM1_IER=0x01;        //更新中断使能
    TIM1_CR1=0x01;       //使能计数器
}
------------------------
中断服务程序:

#pragma vector=TIM1_OVR_UIF_vector
__interrupt void TIM1_OVR_UIF_IRQHandler(void)
{
      asm("sim");               //关中断;   
      PB_ODR^=0x20;       //改变LED状态;
      TIM1_SR1=0x00;       //清除状态寄存器;
      TIM1_CR1=0x00;       //不使能计数器;
       asm("rim");              //开中断,然后中断返回;
}

-------------------------
B5端口初始化:

void Init_GPIO(void)
{
    PB_DDR|=0x20;
    PB_CR1|=0x20;
    PB_CR2&=0xDF;
}

------------------------------------
利用B5端口的推挽输出LED,通过LED亮灭判断状态。

现在问题是,一开机就会进中断,可以观察到LED迅速闪一下。按照预想的情况,开机应该是亮定时的时间后灭,实际不然。

在下开发环境是IAR,Debugger设备是ST-Link。在编译调试环境里单步运行的时候是正常的,能正常进入计数的进程,计数溢出后才进中断。

以上问题困扰在下2天了,望各位前辈不吝赐教,感激不尽。
极客晨星 发表于 2022-12-23 08:28 | 显示全部楼层
你赋值了么,在中断里

銀河 发表于 2022-12-23 09:00 | 显示全部楼层
不是很理解你说的,为啥能进中断还没定时呢?

风吻过你的不羁 发表于 2022-12-23 09:32 | 显示全部楼层
是不是中断的时间设置的比较小呢?导致人眼看不出

林间有新绿 发表于 2022-12-23 10:04 | 显示全部楼层
你可以用变量++的方式实现的,这样还比较简单

討厭和人归類 发表于 2022-12-23 10:36 | 显示全部楼层
你咋不用库函数的方式去编写呢?

热爱童话世界 发表于 2022-12-23 11:08 | 显示全部楼层
你用STcubemx吧,直接就帮你配置定时器了

地下縱情搖擺 发表于 2022-12-23 11:40 | 显示全部楼层
建议楼主可以用demo跑一下吧,demo例程就有你说的这种例子

笨蛋无需搭理 发表于 2022-12-23 12:12 | 显示全部楼层
我觉得有没有可能是你的B5与你配置的定时器不在一个组啊?

漫过岁月 发表于 2022-12-23 12:44 | 显示全部楼层
仿真就好用?开机就进入到一次中断?

晚晚皆安 发表于 2022-12-23 13:16 | 显示全部楼层
你可以初始化的时候清一下变量,把初始化那段时间忽略掉

SantaBunny 发表于 2023-2-19 22:51 | 显示全部楼层
可能是因为你上次没有清理相关中断标志或定时器参数设置有问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

837

主题

4432

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部