微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32学习笔记——外部中断的初步了解

STM32学习笔记——外部中断的初步了解

时间:09-21 来源:互联网 点击:

IO_Mode = GPIO_Mode_IPU;

GPIO_Init(GPIOC, &GPIO_InitStructure);

//设置KEY12->PC12, KEY11->PC11, KEY10->PC10中断

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource3); //开启肞B3与中断线的映射

EXTI_InitStructure.EXTI_Line = EXTI_Line3;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource12);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource11);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource10);

EXTI_InitStructure.EXTI_Line = EXTI_Line12;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

EXTI_InitStructure.EXTI_Line = EXTI_Line11;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

EXTI_InitStructure.EXTI_Line = EXTI_Line10;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

void EXTI3_IRQHandler(void)

{

//delay_ms(10);

if(EXTI_GetITStatus(EXTI_Line3) !=RESET)

{

LED4 =!LED4;

}

EXTI_ClearITPendingBit(EXTI_Line3);

}

void EXTI15_10_IRQHandler(void)

{

//delay_ms(10);

if (EXTI_GetITStatus(EXTI_Line12) !=RESET)

{

LED3 =!LED3;

}

else if (EXTI_GetITStatus(EXTI_Line11) !=RESET)

{

LED2 =!LED2;

}

else if (EXTI_GetITStatus(EXTI_Line10) !=RESET)

{

LED1 =!LED1;

}

EXTI_ClearITPendingBit(EXTI_Line12); //清除EXTI线路挂起位

EXTI_ClearITPendingBit(EXTI_Line11); //清除EXTI线路挂起位

EXTI_ClearITPendingBit(EXTI_Line10); //清除EXTI线路挂起位

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top