野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15036|回复: 9

按键触发外部中断实现不了

[复制链接]
发表于 2018-10-31 18:30:21 | 显示全部楼层 |阅读模式
本意是:LED2闪烁,当按键按下时产生重点,进入中断服务函数执行LED1亮2s退出中断继续执行LED2闪烁,但为啥退不出中断呢?

void EXTI9_5_IRQHandler(void)
{
   
    if (EXTI_GetITStatus(EXTI_Line8) != RESET)
    {
        LED1_ON;
        SysTick_Delay_Ms(2000);
    }
    EXTI_ClearITPendingBit(EXTI_Line8);
}


回复

使用道具 举报

发表于 2018-11-1 08:05:16 | 显示全部楼层
本帖最后由 wqy_1000 于 2018-11-1 08:06 编辑

是不是要这样才行
[mw_shl_code=c,true]void EXTI9_5_IRQHandler(void)
{         if (EXTI_GetITStatus(EXTI_Line8) != RESET)
    {
         LED1_ON;
        SysTick_Delay_Ms(2000);
        LED1_OFF;
    }
    EXTI_ClearITPendingBit(EXTI_Line8);
}[/mw_shl_code]

回复 支持 反对

使用道具 举报

发表于 2018-11-1 08:38:15 | 显示全部楼层
因为systick中断的优先级低,延时一直没有退出
回复 支持 反对

使用道具 举报

发表于 2018-11-1 08:40:57 | 显示全部楼层
wqy_1000 发表于 2018-11-1 08:05
是不是要这样才行
[mw_shl_code=c,true]void EXTI9_5_IRQHandler(void)
{         if (EXTI_GetITStatus( ...

尽量不要在中断里面延时,可以使用一个标志变量
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-1 10:21:19 | 显示全部楼层
鲁合乐 发表于 2018-11-1 08:38
因为systick中断的优先级低,延时一直没有退出

嗯嗯 ,有道理,我拿下面的延时函数确实实现了,谢谢了~~~
void delay(uint32_t t)
{
        while(t!=0)
                t--;
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-1 10:22:02 | 显示全部楼层
Brave000 发表于 2018-11-1 08:40
尽量不要在中断里面延时,可以使用一个标志变量

看不懂前面这个标志 qaq
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-1 10:22:36 | 显示全部楼层
wqy_1000 发表于 2018-11-1 08:05
是不是要这样才行
[mw_shl_code=c,true]void EXTI9_5_IRQHandler(void)
{         if (EXTI_GetITStatus( ...

然并卵~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2018-11-1 13:43:04 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2018-11-1 17:01:49 | 显示全部楼层
这代码写得真好~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-2 08:50:33 | 显示全部楼层
杰杰 发表于 2018-11-1 17:01
这代码写得真好~

哇,你不会是嘲讽我吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-6 04:04 , Processed in 0.041382 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表