你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

一个关于定时器的奇怪现象

[复制链接]
漂泊的雨林 提问时间:2017-4-13 09:47 /
本帖最后由 漂泊的雨林 于 2017-4-13 09:48 编辑

我在写程序的时候发现一个奇怪的现象 我用的是定时器4  开启了更新中断  但是在中断函数里面 发现其他的原因触发了中断
void TIM4_IRQHandler(void)
{
        if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET) //溢出中断
        {
          timeup++;
                LEDCHANGE;
//                if(timeup%2)
//                LEDON;
//                else
//                        LEDOFF;
        }
        else
        {
                timeup=0;
        }
        TIM_ClearITPendingBit(TIM4,TIM_IT_Update);  //清除中断标志位
}

程序运行到了else 里面


void TIMER4_Config(u32 nms)
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);  ///使能TIM4时钟
        //配置定时器
  TIM_TimeBaseInitStructure.TIM_Period = 42000-1;         //自动重装载值
        TIM_TimeBaseInitStructure.TIM_Prescaler=2*nms-1;  //定时器分频
        TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
        TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);//初始化TIM4
        //配置定时器的中断
//        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//        NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn; //定时器4中断
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00; //抢占优先级1
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01; //子优先级3
//        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
//        NVIC_Init(&NVIC_InitStructure);
        //使能定时器中断开启定时器
//        TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
        TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE); //允许定时器4更新中断
        TIM_Cmd(TIM4,ENABLE); //使能定时器4
        //清空定时器列表
        listtmr.head=(TMR *)0;
        listtmr.end=(TMR *)0;
        listtmr.present=(TMR *)0;
}   此为定时器的配置函数  



我想问下大家有遇到同样情况的没  顺便看看有没有大神能解惑的没
收藏 1 评论5 发布时间:2017-4-13 09:47

举报

5个回答
wenyangzeng 回答时间:2017-4-13 10:21:38
貌似进入定时器的其他中断。你可以在中断处判断是定时器的哪个中断源引起的。
anobodykey 回答时间:2017-4-13 13:58:20
看着代码应该没啥问题?中断ISR中else经常进去迈?
漂泊的雨林 回答时间:2017-4-13 14:35:29
wenyangzeng 发表于 2017-4-13 10:21
貌似进入定时器的其他中断。你可以在中断处判断是定时器的哪个中断源引起的。 ...

问题是中断只开了一个更新中断     其他的都没有开
wenyangzeng 回答时间:2017-4-13 16:09:39
漂泊的雨林 发表于 2017-4-13 14:35
问题是中断只开了一个更新中断     其他的都没有开

对呀,你在中断那个“else”里设置断点,然后查看中断标志位,就可以知道是哪个意外中断,再来查找意外中断的原因。
漂泊的雨林 回答时间:2017-4-25 18:40:31
wenyangzeng 发表于 2017-4-13 16:09
对呀,你在中断那个“else”里设置断点,然后查看中断标志位,就可以知道是哪个意外中断,再来查找意外中 ...

我发现TIM4->SR的值为1F   CCxIF 4个标识位全都置位了   UIF也置位了   按道理说 中断使能只开了一个UIF  其他的不应该触发中断  但是为什么会进中断呢   而且UIF位之前也情了 为什么这次置位了 但是没有触发前面的中断呀

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版