1. 外部中断的例子和io查询刚好对应起来,中断的效率明显高于查询。
2. 本实验设计和io查询的例子一样,按一下按键,led灯亮灭一次。
GPIO_Init(LED_GPIO_PORT, LED_GPIO_PINS, GPIO_Mode_Out_PP_High_Slow);
GPIO_Init(KEY_GPIO_PORT, KEY_GPIO_PINS, GPIO_Mode_In_PU_IT);//上拉带中断输入(经过测试,设置为上拉时该引脚初始化为高电平)
EXTI_DeInit();
EXTI_SelectPort(EXTI_Port_B);
EXTI_SetPinSensitivity(GPIO_Pin_6, EXTI_Trigger_Falling);//下降沿触发中断
enableInterrupts();
while (1)
{
}
INTERRUPT_HANDLER(EXTI6_IRQHandler,14)//中断服务函数
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
EXTI_ClearITPendingBit(EXTI_IT_Pin6);//清除中断,此句如果放到后面会不正常
GPIO_ResetBits(LED_GPIO_PORT, LED_GPIO_PINS);
delayMs(100);
GPIO_SetBits(LED_GPIO_PORT, LED_GPIO_PINS);
}
3. 本实验采用2块单片机来实现外部中断,单片机A去触发单片机B,需要主要的是两块单片机尽量使用同一个电源,确保在同一个电压参考系,不然可能会出问题,实物图如下所示。
void testExt()//能够保证产生上升沿或者下降沿
{
GPIO_SetBits(GPIOE, GPIO_Pin_1);
GPIO_ResetBits(GPIOE, GPIO_Pin_1);
GPIO_SetBits(GPIOE, GPIO_Pin_1);
}
void extIntConfig()
{
changeClock();
GPIO_Init(GPIOE, GPIO_Pin_1, GPIO_Mode_In_PU_IT);
EXTI_SetPinSensitivity(EXTI_Pin_1, EXTI_Trigger_Falling);
}