STM8L为什么会一直低电平触发?
这是初始化的代码GPIO_Init(TEST_KEY_PORT, TEST_KEY_PIN, GPIO_Mode_In_PU_IT);//PB3 初始化按键,上拉输入,带中断
EXTI_DeInit (); //恢复中断的所有设置
EXTI_SetPinSensitivity (EXTI_Pin_3, EXTI_Trigger_Falling);//外部中断3,下降沿触发,向量号11
EXTI_ClearITPendingBit (EXTI_IT_Pin3);//清除中断标志
ITC_SetSoftwarePriority(EXTI3_IRQn, ITC_PriorityLevel_1);//设置中断优先级
中断函数
INTERRUPT_HANDLER(EXTI3_IRQHandler,11)
{
__IO u16 i,j;
EXTI_ClearITPendingBit (EXTI_IT_Pin3);//清除中断标志
Debug("EXTI3_IRQHandler\n");
for(i=0;i<50;i++)
for(j=0;j<8000;j++);
}
按下PB3不放会一直触发中断,串口一直输出"EXTI3_IRQHandler\n"
中断函数中执行了一个长延时,会与其他中断冲突的。 本帖最后由 toofree 于 2018-3-12 21:46 编辑
你在中断处理中置一个标志变量。
然后在主程序中循环中,查询标志,执行打印和延时操作,试试看。同时在主程序中也查询管脚的状态,看有没有变成1过,如果有变成1,那就是抖了。 楼上说的对,中断里不要处理时间太长,都放到主循环里处理 初始化IO的前先关总中断,初始化完了之后再开总中断。 す疯Ⅱ恒す 发表于 2018-3-13 09:10
初始化IO的前先关总中断,初始化完了之后再开总中断。
你说对了,是要先关中断初始化。跟延时没什么关系。谢谢:lol
页:
[1]