|
本帖最后由 qiancuit2012 于 2020-11-5 10:37 编辑
请教下 配置了4路外部中断唤醒,但是其中的PD2 无法唤醒,测量是有上升沿波形的数据,其他三路都正常
void exit_run_system(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE);
//GPIOA.3 中断线以及中断初始化配置 下降沿触发 //KEY
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //PA3 上拉输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource3);
EXTI_InitStructure.EXTI_Line=EXTI_Line3;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//EXTI_Trigger_Rising EXTI_Trigger_Falling
EXTI_Init(&EXTI_InitStructure);
//GPIOC.5 中断线以及中断初始化配置 上降沿触发 //IN 外部输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //PC5 浮空输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);
EXTI_InitStructure.EXTI_Line=EXTI_Line5;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//EXTI_Trigger_Rising EXTI_Trigger_Falling
EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
//GPIOB.10 中断线以及中断初始化配置 上降沿触发 //IN 外部输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10 浮空输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource10);
EXTI_InitStructure.EXTI_Line=EXTI_Line10;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//EXTI_Trigger_Rising EXTI_Trigger_Falling
EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
//GPIOD.2 中断线以及中断初始化配置 上降沿触发 //IN USB输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PD2 浮空输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource2);
EXTI_InitStructure.EXTI_Line=EXTI_Line2;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//EXTI_Trigger_Rising EXTI_Trigger_Falling
EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //GPIO2 所在的中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; //GPIO3 所在的中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按键所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; //子优先级1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //使能按键所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子优先级1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
}
void EXTI9_5_IRQHandler(void)
{
delay_ms(10);//消抖
if(EXTI_GetITStatus(EXTI_Line5) != RESET) //检查指定的EXTI5线路触发请求发生与否
{
EXTI_ClearITPendingBit(EXTI_Line5); //清除EXTI5线路挂起位
EXTI_ClearFlag(EXTI_Line5); //清楚EXTI5线路挂起标志位
exit_delete();
board_init();
myprintf("checkin ent exit 5\n");
keyFlag.press=1;
}
}
void EXTI15_10_IRQHandler(void)
{
delay_ms(10);//消抖
if(EXTI_GetITStatus(EXTI_Line10) != RESET) //检查指定的EXTI5线路触发请求发生与否
{
EXTI_ClearITPendingBit(EXTI_Line10); //清除EXTI10线路挂起位
EXTI_ClearFlag(EXTI_Line10); //清楚EXTI10线路挂起标志位
exit_delete();
board_init();
myprintf("ir person ent exit 10\n");
}
}
void EXTI3_IRQHandler(void)
{
delay_ms(10);//消抖
if(EXTI_GetITStatus(EXTI_Line3) != RESET) //检查指定的EXTI3线路触发请求发生与否
{
EXTI_ClearITPendingBit(EXTI_Line3); //清除EXTI3线路挂起位
EXTI_ClearFlag(EXTI_Line3); //清楚EXTI3线路挂起标志位
exit_delete();
board_init();
myprintf("key ent exit 3\n");
keyFlag.press=1;
while(KEY1==KEY_PRESS){
}
}
}
void EXTI2_IRQHandler(void)
{
delay_ms(10);//消抖
if(EXTI_GetITStatus(EXTI_Line2) != RESET) //检查指定的EXTI2线路触发请求发生与否
{
EXTI_ClearITPendingBit(EXTI_Line2); //清除EXTI2线路挂起位
EXTI_ClearFlag(EXTI_Line2); //清楚EXTI2线路挂起标志位
exit_delete();
board_init();
myprintf("usb ent exit 2\n");
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|