STM32
直播中

李宸如

7年用户 174经验值
私信 关注
[问答]

TIM2做定时器中断实验PA8的状态一直不变

大家好:
       我在用tiM2做定时器中断实验,用自己写的程序,然后用原子的板,但发觉PA8的状态一直不变,但是软件仿真的时候是好明显看的出输出是方波信号(定时时间是500毫秒),我将整个工程上传,希望各位朋友能帮忙解决,感激万分啊!!!!!

TIM_LED_Test.rar (3.66 MB )

回帖(3)

李淑嘉

2019-3-25 15:14:38
问题解决了,原来是清楚中断源的问题,如果如附件那样:
void TIM2_IRQHandler(void)
{
 if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET);
 {
      //GPIO_ResetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_2);
   GPIO_WriteBit(GPIOA,GPIO_Pin_8,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8)));
   GPIO_WriteBit(GPIOD,GPIO_Pin_2,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2)));
   TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
 }
}
是不能正常工作,但是如果改成如下这样:
void TIM2_IRQHandler(void)
{
 if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET);
 {
  TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
    //GPIO_ResetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_2);
   GPIO_WriteBit(GPIOA,GPIO_Pin_8,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8)));
   GPIO_WriteBit(GPIOD,GPIO_Pin_2,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2)));
  }
}
程序就能正常工作,灯每500毫秒闪一次
究竟这个清中断源的顺序有什么讲究的?
举报

董英灏

2019-3-25 15:23:13
回复【2楼】xiaohunhunalan:
-------------------------------
有可能你处理的时间,比中断的时间长,所以会有这样的问题。
你单步调试看看问题出在哪里,重点看TIM2的寄存器。
举报

杜茂仁

2019-3-25 15:36:19
EXTI_ClearITPendingBit(EXTI_Line2);把中断标志位清除,以防它不断地进入中断
我们进入中断服务程序后,首先做的就是清除中断标志位,
否则它会不断响应中断,不断进入中断函数。当然,我们这里做这个步骤,只是
为了预防万一,您也可以删除此句试验下。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分