我的配置代码是这样的:
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Configure IO connected to LD1, LD2, LD3 and LD4 leds *********************/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 |GPIO_Pin_3 |GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
//系统中断管理
void NVIC_Configuration(void)
{
/* Configure the NVIC Preemption Priority Bits */
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
}
//配置系统时钟,使能各外设时钟
void RCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB
| RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO
| RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE );
}
void EXTI_Configuration(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
//清空中断标志
EXTI_ClearITPendingBit(EXTI_Line0);
EXTI_ClearITPendingBit(EXTI_Line10);
EXTI_ClearITPendingBit(EXTI_Line11);
EXTI_ClearITPendingBit(EXTI_Line12);
EXTI_ClearITPendingBit(EXTI_Line14);
EXTI_ClearITPendingBit(EXTI_Line15);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource13);
EXTI_InitStructure.EXTI_Line = EXTI_Line0|EXTI_Line13 ;
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_PortSourceGPIOD,GPIO_PinSource11);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource12);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource14);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource15);
EXTI_InitStructure.EXTI_Line = EXTI_Line11| EXTI_Line12| EXTI_Line14| EXTI_Line15;
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_PortSourceGPIOE,GPIO_PinSource10);
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);
}
void EXTI0_IRQHandler(void)
{
GPIO_SetBits(GPIOD,GPIO_Pin_2);
GPIO_ResetBits(GPIOD,GPIO_Pin_3);
EXTI_ClearITPendingBit(EXTI_Line0);
}
void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line10)!=RESET)
{
GPIO_ResetBits(GPIOE, GPIO_Pin_2);
EXTI_ClearITPendingBit(EXTI_Line10) ;
}
if(EXTI_GetITStatus(EXTI_Line11)!=RESET)
{
GPIO_ResetBits(GPIOE, GPIO_Pin_3);
EXTI_ClearITPendingBit(EXTI_Line11) ;
}
if(EXTI_GetITStatus(EXTI_Line12)!=RESET)
{
GPIO_ResetBits(GPIOE, GPIO_Pin_4);
EXTI_ClearITPendingBit(EXTI_Line12) ;
}
if(EXTI_GetITStatus(EXTI_Line14)!=RESET)
{
GPIO_ResetBits(GPIOE, GPIO_Pin_2);
EXTI_ClearITPendingBit(EXTI_Line14) ;
}
if(EXTI_GetITStatus(EXTI_Line15)!=RESET) //暂时未添加响应函数
{
GPIO_SetBits(GPIOE, GPIO_Pin_3);
EXTI_ClearITPendingBit(EXTI_Line15) ;
}
if(EXTI_GetITStatus(EXTI_Line13)!=RESET)
{
GPIO_SetBits(GPIOE, GPIO_Pin_4);
EXTI_ClearITPendingBit(EXTI_Line13);
}
}
void Init_All_Periph(void)
{
RCC_Configuration();
NVIC_Configuration();
EXTI_Configuration();
GPIO_Configuration();
}
int main(void)
{
Init_All_Periph();
while(1) ;
}
如果大家愿意看代码我将不胜感激,恳请各位大侠帮忙,谢谢!
|