[STM32F1] 请教关于103定时器一个中断周期进去两次的原因。

[复制链接]
2349|6
 楼主| 熊歌 发表于 2015-8-27 22:11 | 显示全部楼层 |阅读模式
  1. /*¶¨Ê±Æ÷3ÖжϺ¯ÊýÀ´×Ôstartup_stm32f10x_hd.s*/
  2. unsigned long count=0,count2=0;;
  3. void TIM3_IRQHandler(void)
  4. {                                                                   
  5.         if(TIM3->SR&0X0001)//Òç³öÖжÏ
  6.         {
  7.                 count++;//LED0=!LED0;
  8.         }
  9.         else{//出于好好奇,做了个ELSE 结果还真进去了,查来查去不知道为什么,论坛请教。
  10.                 LED0=!LED0;
  11.                 count2++;
  12.                 //count++;//LED0=!LED0;       
  13.         }
  14.         TIM3->SR=0;
  15.         //TIM3->SR&=~(1<<0);//Çå³ýÖжϱê־λ
  16. }

  1. int main(void)
  2. {
  3.         short a;
  4.         Stm32_Clock_Init(9);                //ϵͳʱÖÓÉèÖÃ
  5.         delay_init(72);                                  //ÑÓʱ³õʼ»¯
  6.         LED_Init();                                          //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
  7.        
  8.         TIM3_Int_Init(9999,7199);//10KhzµÄ¼ÆÊýƵÂÊ£¬Ã¿ÃëÖжÏ1´Î
  9.        
  10.         while(1)
  11.         {
  12.                 a++;
  13.         }
  14. }
 楼主| 熊歌 发表于 2015-8-27 22:17 | 显示全部楼层
看手册貌似没有其他中断来源,另外,调试时进入中断CNTR老是有数,是不是调试造成的时延?
当中断置位时,CNTR值比较小。
一并发问,请有知道的朋友不吝赐教。
QQ截图20150827221639.png
QQ截图20150827221722.png
QQ截图20150827221751.png
734774645 发表于 2015-8-28 08:25 | 显示全部楼层
没看出来问题,我是菜鸟啊,帮你来点人气。
643757107 发表于 2015-8-28 19:06 | 显示全部楼层
楼主的编码用的什么啊,好多乱码,最好改成UTF-8或者GB2312
香水城 发表于 2015-8-31 10:21 | 显示全部楼层
看没看SR寄存器的状态有什么不同?
hanabishi 发表于 2015-8-31 10:34 | 显示全部楼层
32的没用过,不过我用过stm8也遇到同样的问题,如果原理差不多的话,可能原因跟你一样,你参考下(时间长了,有些寄存器英文名字忘了)。定时器初始化的时候,貌似有个叫事件更新寄存器(应该是IGR还是EGR啥的记不清了),一旦设置了这个,就会立刻产生一个中断,中断服务程序都会进去,然而每次设置定时器工作的时候,这个东西必须得设置,所以每次都会遇到,然后后面你定时到了的时候,也会产生一个中断。看你的描述的话,有可能是这个事件更新的中断是不置位SR的,但是还是会响应。我当时的解决方法很简单,中断服务程序加个判定就好了,第一次进去的直接跳出,第二次进去的就好了。
badboyhzg 发表于 2015-8-31 10:54 | 显示全部楼层
纯小白,过来给你帮顶的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

15

帖子

0

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