试过key1之后我试着把两个按键的程序合并起来,key1控制led1,key2控制led2,但是只有led1和key1有用,led2常亮,以下是部分代码,还请高手赐教。
exti.c部分:
#include "exti.h"
void NVIC_chushihua_PA0(void)
{
//dingyi jiegouti
NVIC_InitTypeDef NVIC_PA0;
//peizhi youxianji
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
//shezhi jiegouti chengyuan
NVIC_PA0.NVIC_IRQChannel=EXTI0_IRQn;
NVIC_PA0.NVIC_IRQChannelCmd=ENABLE;
NVIC_PA0.NVIC_IRQChannelPreemptionPriority=0;
NVIC_PA0.NVIC_IRQChannelSubPriority=0;
//
NVIC_Init(&NVIC_PA0);
}
void EXTI_chushihua_PA0(void)
{
EXTI_InitTypeDef EXTI_PA0;
GPIO_InitTypeDef GPIO_PA0;
//
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA,ENABLE);
/////IMPORTANT STEP!!!
NVIC_chushihua_PA0();
/////
//
GPIO_PA0.GPIO_Mode=GPIO_Mode_IPU;//SHANG LA MODE
GPIO_PA0.GPIO_Pin=GPIO_Pin_0;
GPIO_Init(GPIOA,&GPIO_PA0);
//
EXTI_PA0.EXTI_Line=EXTI_Line0;
EXTI_PA0.EXTI_LineCmd=ENABLE;
EXTI_PA0.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_PA0.EXTI_Trigger=EXTI_Trigger_Falling ;
//
EXTI_Init(&EXTI_PA0);
}
////////////////////////////////////////////////////////
void NVIC_chushihua_PC13(void)
{
//dingyi jiegouti
NVIC_InitTypeDef NVIC_PC13;
//peizhi youxianji
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
//shezhi jiegouti chengyuan
NVIC_PC13.NVIC_IRQChannel=EXTI15_10_IRQn;
NVIC_PC13.NVIC_IRQChannelCmd=ENABLE;
NVIC_PC13.NVIC_IRQChannelPreemptionPriority=0;
NVIC_PC13.NVIC_IRQChannelSubPriority=0;
//
NVIC_Init(&NVIC_PC13);
}
void EXTI_chushihua_PC13(void)
{
EXTI_InitTypeDef EXTI_PC13;
GPIO_InitTypeDef GPIO_PC13;
//
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOC,ENABLE);
/////IMPORTANT STEP!!!
NVIC_chushihua_PC13();
/////
//
GPIO_PC13.GPIO_Mode=GPIO_Mode_IPU;//SHANG LA MODE
GPIO_PC13.GPIO_Pin=GPIO_Pin_13;
GPIO_Init(GPIOC,&GPIO_PC13);
//
EXTI_PC13.EXTI_Line=EXTI_Line13;
EXTI_PC13.EXTI_LineCmd=ENABLE;
EXTI_PC13.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_PC13.EXTI_Trigger=EXTI_Trigger_Falling ;
//
EXTI_Init(&EXTI_PC13);
}
中断程序部分:
void EXTI0_IRQHandler(void)
{
if (EXTI_GetFlagStatus(EXTI_Line0) == SET)
{
GPIO_WriteBit(GPIOB,GPIO_Pin_0,(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_0)));
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
void EXTI15_10_IRQHandler(void)
{
if (EXTI_GetFlagStatus(EXTI_Line13) == SET)
{
GPIO_WriteBit(GPIOF,GPIO_Pin_7,(1-GPIO_ReadOutputDataBit(GPIOF,GPIO_Pin_7)));
EXTI_ClearITPendingBit(EXTI_Line13);
}
}
初学者,先谢谢了! |