我是靠谱客的博主 含蓄母鸡,这篇文章主要介绍## 按键触发外部中断,服务函数被多次调用,现在分享给大家,希望可以做个参考。

一开始多次尝试后,无论是在中断服务函数之前加延时还是之后加延时,都不行。最后开始检查代码,尝试设置引脚初始为高电平,终于成功。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT ; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOE, &GPIO_InitStruct); GPIO_SetBits(GPIOE,GPIO_Pin_3);//设置默认电平,防止被误触发 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,GPIO_PinSource3); EXTI_InitStruct.EXTI_Line = EXTI_Line3 ; EXTI_InitStruct.EXTI_Mode= EXTI_Mode_Interrupt ; EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Falling; EXTI_InitStruct.EXTI_LineCmd= ENABLE; EXTI_Init(&EXTI_InitStruct); NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;//外部中断0 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//抢占优先级0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;//子优先级2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道 NVIC_Init(&NVIC_InitStructure);//配置
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void EXTI3_IRQHandler(void) { int time=0; int time_ms,time_us,data; time = count; if(EXTI_GetITStatus(EXTI_Line3) != RESET) { printf("UTC Date:%04d/%02d/%02d ",gpsx.utc.year,gpsx.utc.month,gpsx.utc.date); //显示UTC日期 printf("UTC Time:%02d:%02d:%02d s ",gpsx.utc.hour+8,gpsx.utc.min,gpsx.utc.sec); //显示UTC时间 time_ms = time/1000; time_us = time%1000; printf("%d ms %d us rn",time_ms,time_us); //清除中断标志位 } delay_ms(10); EXTI_ClearITPendingBit(EXTI_Line3); }

总结:移植程序得逐步检查

最后

以上就是含蓄母鸡最近收集整理的关于## 按键触发外部中断,服务函数被多次调用的全部内容,更多相关##内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部