新手入门
- 积分
- 19
- 金钱
- 19
- 注册时间
- 2018-3-26
- 在线时间
- 2 小时
|
10金钱
求助,mini板的外部中断,将IO口的设为上拉输入,下降沿有效,为什么用杜邦线一碰就会进中断了,杜邦线的另一端什么都没有接。用的是EXTI15_10_IRQHandler这一组中断,我把EXTI_Line10,EXTI_Line11,EXTI_Line12,EXTI_Line13,EXTI_Line15这几个中断线全部用上了,对应的IO口是PB10,PB11,PC12,PA13,PA15。这样这几个IO口任意的一个有低电平输入的话就会进入EXTI15_10_IRQHandler这个函数。但是我用杜邦线或者其他的导电的东西碰一下这几个IO也会立马进入中断,杜邦线另一端是空的,没有接地也没接其他的东西。这是怎么回事啊?用mini的外部中端的例程也没有发现有这种情况。求大佬解答,这是为什么会有这种现象?怎样解决?以下是EXTI15_10_IRQHandler函数内的代码[mw_shl_code=c,true]void EXTI15_10_IRQHandler(void)
{
stop();//关于用定时器1产生PWM波的程序,使其停止输出PWM波
delay_ms(10);
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)|GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)|GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_12)|GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_13)|GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)==0)
{
stop();
if(EXTI_GetITStatus(EXTI_Line10)!=RESET)
{
input1();//关于用定时器1产生PWM波的程序,下同
EXTI_ClearITPendingBit(EXTI_Line10);
}
else if(EXTI_GetITStatus(EXTI_Line11)!=RESET)
{
input2();
EXTI_ClearITPendingBit(EXTI_Line11);
}
else if(EXTI_GetITStatus(EXTI_Line12)!=RESET)
{
input3();
EXTI_ClearITPendingBit(EXTI_Line12);
}
else if(EXTI_GetITStatus(EXTI_Line13)!=RESET)
{
input4();
EXTI_ClearITPendingBit(EXTI_Line13);
}
else if(EXTI_GetITStatus(EXTI_Line15)!=RESET)
{
input5();
EXTI_ClearITPendingBit(EXTI_Line15);
}
}
}[/mw_shl_code]
以下是关于IO口的配置和EXTI的配置
[mw_shl_code=c,true]void EXTI_TIM1()
{
EXTI_InitTypeDef exti;
NVIC_InitTypeDef nvic;
GPIO_InitTypeDef gpio;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
gpio.GPIO_Pin = GPIO_Pin_10;
gpio.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &gpio);
gpio.GPIO_Pin = GPIO_Pin_11;
gpio.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &gpio);
gpio.GPIO_Pin = GPIO_Pin_12;
gpio.GPIO_Mode = GPIO_Mode_IPU; //
GPIO_Init(GPIOC, &gpio);//
gpio.GPIO_Pin = GPIO_Pin_13;//
gpio.GPIO_Mode = GPIO_Mode_IPU; //
GPIO_Init(GPIOA, &gpio);//
gpio.GPIO_Pin = GPIO_Pin_15;//
gpio.GPIO_Mode = GPIO_Mode_IPU; //
GPIO_Init(GPIOA, &gpio);//
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource10);
exti.EXTI_Line=EXTI_Line10;
exti.EXTI_Mode= EXTI_Mode_Interrupt;
exti.EXTI_Trigger = EXTI_Trigger_Falling;//
exti.EXTI_LineCmd = ENABLE;
EXTI_Init(&exti);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource11);
exti.EXTI_Line=EXTI_Line11;
exti.EXTI_Mode= EXTI_Mode_Interrupt;
exti.EXTI_Trigger = EXTI_Trigger_Falling;//
exti.EXTI_LineCmd = ENABLE;
EXTI_Init(&exti);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource12);
exti.EXTI_Line=EXTI_Line12;
exti.EXTI_Mode= EXTI_Mode_Interrupt;
exti.EXTI_Trigger = EXTI_Trigger_Falling;//
exti.EXTI_LineCmd = ENABLE;
EXTI_Init(&exti);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource13);
exti.EXTI_Line=EXTI_Line13;
exti.EXTI_Mode= EXTI_Mode_Interrupt;
exti.EXTI_Trigger = EXTI_Trigger_Falling;
exti.EXTI_LineCmd = ENABLE;
EXTI_Init(&exti);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource15);
exti.EXTI_Line=EXTI_Line15;
exti.EXTI_Mode= EXTI_Mode_Interrupt;
exti.EXTI_Trigger = EXTI_Trigger_Rising;
exti.EXTI_LineCmd = ENABLE;
EXTI_Init(&exti);
nvic.NVIC_IRQChannel = EXTI15_10_IRQn;
nvic.NVIC_IRQChannelPreemptionPriority = 0x02;
nvic.NVIC_IRQChannelSubPriority = 0x01;
nvic.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvic);
/////////////以上是关于EXTI15_10_IRQHandle的,下面的代码是关于EXTI9_5_IRQHandler的,并没有出现我说的情况
gpio.GPIO_Pin = GPIO_Pin_5;
gpio.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOC, &gpio);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);
exti.EXTI_Line=EXTI_Line5;
exti.EXTI_Mode= EXTI_Mode_Interrupt;
exti.EXTI_Trigger = EXTI_Trigger_Falling;
exti.EXTI_LineCmd = ENABLE;
EXTI_Init(&exti);
nvic.NVIC_IRQChannel = EXTI9_5_IRQn;
nvic.NVIC_IRQChannelPreemptionPriority = 0x03;
nvic.NVIC_IRQChannelSubPriority = 0x01;
nvic.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvic);
}[/mw_shl_code]
这段还配置了PC5的外部中断,也是上拉输入,下降沿有效,但是并没有出现我说的那种情况,很不解,求教
|
|