[STM32F1] 关于EXTI_GetITStatus的问题

[复制链接]
 楼主| fql19931128 发表于 2016-6-18 10:17 | 显示全部楼层 |阅读模式
void EXTI0_IRQHandler()
{       
        if(EXTI_GetITStatus(EXTI_Line0)==SET)                //读取中断标志位
        {
                EXTI_ClearITPendingBit(EXTI_Line0);               
                delay_ms(10);                                                                       
                if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==Bit_SET)       
                {
                        LED_Display();
                }
                while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==Bit_SET);
        }       
}
进入了中断为什么还要读取标志位
popeye021 发表于 2016-6-19 20:08 | 显示全部楼层
很多时候一个中断向量对应了好几个中断,所以读一下中断标志位,确认中断
popeye021 发表于 2016-6-19 20:10 | 显示全部楼层
你这个应该是中断方式读取按键信号的demo程序,正式使用不会在中断处理程序里用硬延时
 楼主| fql19931128 发表于 2016-6-20 16:45 | 显示全部楼层
popeye021 发表于 2016-6-19 20:10
你这个应该是中断方式读取按键信号的demo程序,正式使用不会在中断处理程序里用硬延时 ...

谢谢指教,我是初学者,那在中断里应该怎么延时呢
Rangar 发表于 2016-6-20 22:03 | 显示全部楼层
什么叫硬延时
popeye021 发表于 2016-6-21 08:47 | 显示全部楼层
fql19931128 发表于 2016-6-20 16:45
谢谢指教,我是初学者,那在中断里应该怎么延时呢

一般采用定时器延时,延时的时候mcu还可以执行其他的程序。你随便搜索一下按键扫描程序就有了。
采用mcu强制等待延时的一般是教学demo,或者系统实时性实在不高的时候采用的。
popeye021 发表于 2016-6-21 08:48 | 显示全部楼层

就是mcu强制等待的延时方式,好像是在哪看到的说法,我就沿用了,可能说法不规范吧。
bbapple 发表于 2016-6-21 14:09 | 显示全部楼层
读取中断标志位没是怎么问题呀。。。。
 楼主| fql19931128 发表于 2016-6-27 16:12 | 显示全部楼层
popeye021 发表于 2016-6-21 08:47
一般采用定时器延时,延时的时候mcu还可以执行其他的程序。你随便搜索一下按键扫描程序就有了。
采用mcu ...

那用systick可以吗
popeye021 发表于 2016-6-27 16:44 | 显示全部楼层

可以
dongnanxibei 发表于 2016-6-28 10:05 | 显示全部楼层
读取标志位才知道具体是哪个中断,而中断入口是包含多个并列管脚的。
dongnanxibei 发表于 2016-6-28 10:05 | 显示全部楼层
不仅要读,而且还有关闭中断,清理标志位,读出来后,执行对应的操作,最后清理,退出钱恢复中断。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

9

帖子

0

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

6

主题

9

帖子

0

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