所以,外部中断总共有五步。
1.将所有的GPIO口都配置为输入
2.开启GPIO口复用时钟,然后将GPIO口和中断线的映射关系安排好
3.初始化外部中断,设置触发条件
4.设置中断分组(NVIC),中断事件那么多,总得先排好队才好提高打断效率。
5.编写中断服务函数。
(这个和按键输入实验不一样的一点就是,按键输入实验是用按键扫描函数检测按键的状态(是否按下),这个是靠中断实验检测按键是否已经按下。)
中断的代码是:首先是各种头文件,写了一大堆,比如,exti.h,delay.h等等。然后,就是开始EXTIX_Init()的编写了。
说简单其实也特别简单因为里面就只有几个个小函数,第一个是配置中端线的函数EXTI_Init(),分别初始化出三条中断通道来,但是总得先知道中断通道是哪个吧。所以就用到了一个函数:GPIO_EXTILineConfig()来给GPIO口牵中断线。
因为三个按键分别对应三个通道,分别是
EXTI0_IRQHandler()和EXTI9_5IRQHandler()
和EXTI15_10IRQHandler()
然后分别给这三个通道设置中断优先级,所以,控制器大叔NVIC出场。草草将每个通道分组后,这个大函数就成立了。
然后另辟函数,名字叫做中断服务函数,给每个中断通道都分一个。然后是这样的,先延时10ms,防抖。
单片机:要我亮灯,请给我10ms发抖的时间。
然后就判断了,如果按下了哪个键,就哪个灯亮,到最后,还一定要清除中断标志位。不然的话,这个,按键就控制不了等,他就要屹立不倒,常亮不衰了。
具体代码如下图