打印
[STM32F1]

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

[复制链接]
1810|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
熊歌|  楼主 | 2015-8-27 22:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
/*¶¨Ê±Æ÷3ÖжϺ¯ÊýÀ´×Ôstartup_stm32f10x_hd.s*/
unsigned long count=0,count2=0;;
void TIM3_IRQHandler(void)
{                                                                   
        if(TIM3->SR&0X0001)//Òç³öÖжÏ
        {
                count++;//LED0=!LED0;
        }
        else{//出于好好奇,做了个ELSE 结果还真进去了,查来查去不知道为什么,论坛请教。
                LED0=!LED0;
                count2++;
                //count++;//LED0=!LED0;       
        }
        TIM3->SR=0;
        //TIM3->SR&=~(1<<0);//Çå³ýÖжϱê־λ
}

int main(void)
{
        short a;
        Stm32_Clock_Init(9);                //ϵͳʱÖÓÉèÖÃ
        delay_init(72);                                  //ÑÓʱ³õʼ»¯
        LED_Init();                                          //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
       
        TIM3_Int_Init(9999,7199);//10KhzµÄ¼ÆÊýƵÂÊ£¬Ã¿ÃëÖжÏ1´Î
       
        while(1)
        {
                a++;
        }
}
沙发
熊歌|  楼主 | 2015-8-27 22:17 | 只看该作者
看手册貌似没有其他中断来源,另外,调试时进入中断CNTR老是有数,是不是调试造成的时延?
当中断置位时,CNTR值比较小。
一并发问,请有知道的朋友不吝赐教。

QQ截图20150827221639.png (87.55 KB )

QQ截图20150827221639.png

QQ截图20150827221722.png (87.69 KB )

QQ截图20150827221722.png

QQ截图20150827221751.png (86.1 KB )

QQ截图20150827221751.png

使用特权

评论回复
板凳
734774645| | 2015-8-28 08:25 | 只看该作者
没看出来问题,我是菜鸟啊,帮你来点人气。

使用特权

评论回复
地板
643757107| | 2015-8-28 19:06 | 只看该作者
楼主的编码用的什么啊,好多乱码,最好改成UTF-8或者GB2312

使用特权

评论回复
5
香水城| | 2015-8-31 10:21 | 只看该作者
看没看SR寄存器的状态有什么不同?

使用特权

评论回复
6
hanabishi| | 2015-8-31 10:34 | 只看该作者
32的没用过,不过我用过stm8也遇到同样的问题,如果原理差不多的话,可能原因跟你一样,你参考下(时间长了,有些寄存器英文名字忘了)。定时器初始化的时候,貌似有个叫事件更新寄存器(应该是IGR还是EGR啥的记不清了),一旦设置了这个,就会立刻产生一个中断,中断服务程序都会进去,然而每次设置定时器工作的时候,这个东西必须得设置,所以每次都会遇到,然后后面你定时到了的时候,也会产生一个中断。看你的描述的话,有可能是这个事件更新的中断是不置位SR的,但是还是会响应。我当时的解决方法很简单,中断服务程序加个判定就好了,第一次进去的直接跳出,第二次进去的就好了。

使用特权

评论回复
7
badboyhzg| | 2015-8-31 10:54 | 只看该作者
纯小白,过来给你帮顶的

使用特权

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

本版积分规则

2

主题

15

帖子

0

粉丝