打印
[信息]

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

[复制链接]
976|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 | 只看该作者
是不是中断的时间设置的比较小呢?导致人眼看不出

使用特权

评论回复
5
林间有新绿| | 2022-12-23 10:04 | 只看该作者
你可以用变量++的方式实现的,这样还比较简单

使用特权

评论回复
6
討厭和人归類| | 2022-12-23 10:36 | 只看该作者
你咋不用库函数的方式去编写呢?

使用特权

评论回复
7
热爱童话世界| | 2022-12-23 11:08 | 只看该作者
你用STcubemx吧,直接就帮你配置定时器了

使用特权

评论回复
8
地下縱情搖擺| | 2022-12-23 11:40 | 只看该作者
建议楼主可以用demo跑一下吧,demo例程就有你说的这种例子

使用特权

评论回复
9
笨蛋无需搭理| | 2022-12-23 12:12 | 只看该作者
我觉得有没有可能是你的B5与你配置的定时器不在一个组啊?

使用特权

评论回复
10
漫过岁月| | 2022-12-23 12:44 | 只看该作者
仿真就好用?开机就进入到一次中断?

使用特权

评论回复
11
晚晚皆安| | 2022-12-23 13:16 | 只看该作者
你可以初始化的时候清一下变量,把初始化那段时间忽略掉

使用特权

评论回复
12
SantaBunny| | 2023-2-19 22:51 | 只看该作者
可能是因为你上次没有清理相关中断标志或定时器参数设置有问题。

使用特权

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

本版积分规则

640

主题

2620

帖子

0

粉丝