外部中断的一个现象?

2019-07-20 20:44发布

当外部中断服务函数里只写一句翻转io的代码的时候,实验现象是有时能翻转有时不能翻转,但当我加一句延时1us后,就每次都能翻转了,为什么会这样?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
27条回答
jinggx
1楼-- · 2019-07-22 15:51
也曾遇到过个问题,用STM32F103R8的PB8还是PB9来的?记不太准了,反正是这两个IO的其中一,与你的问题一样,试了多种办法无解,最后不用那个IO,问题才得以解决。
jinggx
2楼-- · 2019-07-22 16:35
 精彩回答 2  元偷偷看……
kingnike
3楼-- · 2019-07-22 21:18
IO操作频率设置到最大试试,103的最大貌似是50MHZ吧?
dfbb123
4楼-- · 2019-07-23 02:37
本帖最后由 dfbb123 于 2016-8-9 19:12 编辑
特朗姆斯 发表于 2016-8-9 14:28
建议贴一下关键部分的代码,有时候发生问题的原因是其它因素导致的

你觉得有必要?好吧那就贴下中断服务函数里的内容吧
void EXTI4_IRQHandler(void)
{
        c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
        c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
        c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
        c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
        c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
        c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
delay_us(1);        
        c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
        c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
        c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
        c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
        c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
        c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);
c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);c=(((a+b)/999+300)*((a+b)/999+300))*((a+b)/999+300)*((a+b)/999+300)*((a+b)/999+300);        
        
        PEout(2)=!PEout(2);
        PBout(9)=!PBout(9);
        

        EXTI->PR=1<<4;  //&#199;&#229;3yLINE0é&#207;μ&#196;&#214;D&#182;&#207;±ê&#214;&#190;&#206;&#187;  
}         
还有中断初始化的部分
void EXTIX_Init(void)
{
        KEY_Init();
        Ex_NVIC_Config(GPIO_E,4,1);                 //&#207;&#194;&#189;μ&#209;&#216;′¥·¢
//        Ex_NVIC_Config(GPIO_E,3,FTIR);                 //&#207;&#194;&#189;μ&#209;&#216;′¥·¢
//        Ex_NVIC_Config(GPIO_E,4,FTIR);                 //&#207;&#194;&#189;μ&#209;&#216;′¥·¢
//         Ex_NVIC_Config(GPIO_A,0,RTIR);                  //é&#207;éy&#209;&#216;′¥·¢
//        MY_NVIC_Init(3,2,EXTI2_IRQn,2);                //&#199;à&#213;&#188;3£&#172;×óó&#197;&#207;è&#188;&#182;2£&#172;×é2
//        MY_NVIC_Init(2,2,EXTI3_IRQn,2);                //&#199;à&#213;&#188;2£&#172;×óó&#197;&#207;è&#188;&#182;2£&#172;×é2           
//        MY_NVIC_Init(1,2,EXTI4_IRQn,2);                //&#199;à&#213;&#188;1£&#172;×óó&#197;&#207;è&#188;&#182;2£&#172;×é2           
        MY_NVIC_Init(0,2,EXTI4_IRQn,2);                //&#199;à&#213;&#188;0£&#172;×óó&#197;&#207;è&#188;&#182;2£&#172;×é2           
}
还有的就是io的初始化这没什么好贴的吧,其他就是原子的例程部分我没动。
dfbb123
5楼-- · 2019-07-23 07:44
 精彩回答 2  元偷偷看……
dfbb123
6楼-- · 2019-07-23 09:55
jinggx 发表于 2016-8-9 15:01
也曾遇到过个问题,用STM32F103R8的PB8还是PB9来的?记不太准了,反正是这两个IO的其中一,与你的问题一样 ...

以你的说法,我们是现象一样,但成因是否一样就不知道了,只是我的是换io也还那样的
至于换程序,就说的通了,说不定你刚好换了个有延时的。

一周热门 更多>