我的设想是使能TIM1更新中断,在服务程序里变量 count 自增,在调试过程中发现了这个问题,所以来请教一下,先谢谢各位。
![](http://www.openedv.com/upload/2012/8/17/3f3c1bd32532bdf8b20e2fcac381d9c8_38.bmp)
主函数如上所示,我的设想就是在count增加到20时失能TIM1,在隔一小段时间后再使能TIM1,这么说来count的值应该在0-20之间变化。
当服务程序里清标志位是
TIM_ClearFlag(TIM1, TIM_FLAG_Update);
或者是
TIM_ClearITPendingBit(TIM1, TIM_FLAG_Update);
时是可行的
![](http://www.openedv.com/upload/2012/8/17/2ff0cec46861f7df44e5062b71a17cad_413.bmp)
count的值在0-20间变化
![](http://www.openedv.com/upload/2012/8/17/ed742abb594caa6f4495f838b41a3850_741.bmp)
但是如果是
TIM1->SR&=~(1<<0);
count的值则是在0-0xffff中变化: 我的问题就是
TIM1->SR&=~(1<<0);
与下面两个
TIM_ClearFlag(TIM1, TIM_FLAG_Update);
TIM_ClearITPendingBit(TIM1, TIM_FLAG_Update);
有什么差别
我猜想
TIM1->SR&=~(1<<0);
并没有清除中断标志位,所以程序一直在中断,所以count的值才会在0-0xffff范围内。
但是TIMx_SR的UIF位应该就是更新标志位,跟 TIM_FLAG_Update 有什么差别呢?
![](http://www.openedv.com/upload/2012/8/17/bd62f7c04fbfccf33f0a113f42005a68_486.bmp)
再次拜谢!
|