一,你没说清楚PA0是否挂载按键,按键另外一端是Vcc还是接地
默认为外部中断挂载按键
若PA0挂载了按键且按键另外一端接地,则应设置PA0为上拉输入,触发方式为下降沿触发
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
若PA0挂载了按键且按键另外一端接Vcc,则应设置PA0为下拉
输入,触发方式为上升沿触发
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOA, &GPIO_InitStructure);
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
修改中断handler函数
void EXTI0_IRQHandler(void)
{
if( EXTI_GetITStatus(EXTI_Line0) != RESET )
{
EXTI_ClearITPendingBit(EXTI_Line0);
GPIO_SetBits(GPIOA , GPIO_Pin_2);
}
}
定义PA2LED翻转函数
void Toggle_PA2()
{
if(GPIO_ReadOtputDataBit (GPIOA,GPIO_Pin_2)==1)
{
GPIO_WriteBit(GPIOA,GPIO_Pin_2,0);
}
if(GPIO_ReadOtputDataBit (GPIOA,GPIO_Pin_2)==0)
{
GPIO_WriteBit(GPIOA,GPIO_Pin_2,1);
}
}
为
(若PA0挂载按键且另一端接地,PA0为上拉输入的情况)
void EXTI0_IRQHandler(void)
{
delay_ms(10); //消抖
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0)
{
Toggle_PA2();
}
EXTI_ClearITPendingBit(EXTI_Line0); //清除EXTI0线路挂起位
}
(若PA0挂载按键且另一端接Vcc,PA0为下拉输入的情况)
void EXTI0_IRQHandler(void)
{
delay_ms(10); //消抖
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1)
{
Toggle_PA2();
}
EXTI_ClearITPendingBit(EXTI_Line0); //清除EXTI0线路挂起位
}