OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7807|回复: 9

STM32f103外部中断点亮LED,按下按键后LED会亮然后又熄灭了,不知道为什么

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2021-4-23
在线时间
5 小时
发表于 2021-4-23 00:49:55 | 显示全部楼层 |阅读模式
1金钱
#include "stm32f10x.h"
#include "EXTI.h"
#include "delay.h"

void EXTI_init(void)
{
        EXTI_InitTypeDef  EXTI_InitStruct;//
        GPIO_InitTypeDef GPIO_InitStruct;
        NVIC_InitTypeDef  NVIC_InitStruct;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA,ENABLE);//
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//
       
        GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;
        GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStruct);
        GPIO_ResetBits(GPIOB,GPIO_Pin_5);
       
        GPIO_InitStruct.GPIO_Pin=GPIO_Pin_7;
        GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
        GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStruct);
       
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource7);//
        EXTI_InitStruct.EXTI_Line=EXTI_Line7;//
        EXTI_InitStruct.EXTI_LineCmd=ENABLE;
        EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Falling;//
        EXTI_Init(&EXTI_InitStruct);//
       
       NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//
       NVIC_InitStruct.NVIC_IRQChannel =EXTI9_5_IRQn;//
       NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;//
      NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0x01;//
      NVIC_InitStruct.NVIC_IRQChannelSubPriority=0x01;//
      NVIC_Init(&NVIC_InitStruct);//
}
void EXTI9_5_IRQHandler(void)
{
        if(EXTI_GetITStatus(EXTI_Line7)!=RESET)
        {
                delay_ms(20);
                LED1=!LED1;   //LED1已经宏定义PBout(5)
         EXTI_ClearITPendingBit(EXTI_Line7);
        }
}

最佳答案

查看完整内容[请看2#楼]

我也遇到了这个问题 但刚刚我想通了 下面是你的代码: void EXTI9_5_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line7)!=RESET) { delay_ms(20); LED1=!LED1; //LED1已经宏定义PBout(5) EXTI_ClearITPendingBit(EXTI_Line7); } } 你犯了两个错误。 第一 你不应该把延时函数现在里面 否则都进入处理函数了 延时还有用吗 第二 我们将延时函数放 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2021-5-27
在线时间
19 小时
发表于 2021-4-23 00:49:56 | 显示全部楼层
我也遇到了这个问题 但刚刚我想通了
下面是你的代码:
void EXTI9_5_IRQHandler(void)
{
        if(EXTI_GetITStatus(EXTI_Line7)!=RESET)
        {
                delay_ms(20);
                LED1=!LED1;   //LED1已经宏定义PBout(5)
         EXTI_ClearITPendingBit(EXTI_Line7);
        }
}
你犯了两个错误。
第一 你不应该把延时函数现在里面 否则都进入处理函数了 延时还有用吗
第二 我们将延时函数放在外面,之后 if 判断的应该是 输入端口的值。而不是判断中断标志位,我们要明白既然已经进入中断了,肯定是产生中断了啊,这步判断肯定没用啊
回复

使用道具 举报

6

主题

890

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1481
金钱
1481
注册时间
2020-8-19
在线时间
336 小时
发表于 2021-4-23 09:52:00 | 显示全部楼层
别的地方有关闭LED的函数吗
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2021-4-23
在线时间
5 小时
 楼主| 发表于 2021-4-23 10:33:13 | 显示全部楼层
bin133 发表于 2021-4-23 09:52
别的地方有关闭LED的函数吗

没有了,就还有个主函数和外部中断的头文件,不是每次都会亮了在熄灭,有时候
回复

使用道具 举报

6

主题

890

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1481
金钱
1481
注册时间
2020-8-19
在线时间
336 小时
发表于 2021-4-23 12:11:28 | 显示全部楼层
CQUTWC 发表于 2021-4-23 10:33
没有了,就还有个主函数和外部中断的头文件,不是每次都会亮了在熄灭,有时候

那有可能是这个按键本身的问题哦,你可以用一个东西代替这个按键的输入看看
回复

使用道具 举报

11

主题

2147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4891
金钱
4891
注册时间
2015-1-10
在线时间
612 小时
发表于 2021-4-23 13:10:58 | 显示全部楼层
按键需要消抖,不然你按下去可能在微观上触发了好几次
回复

使用道具 举报

12

主题

3389

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8643
金钱
8643
注册时间
2020-5-11
在线时间
4098 小时
发表于 2021-4-23 13:26:01 | 显示全部楼层
楼上说得对,抖动,可以用示波器观察按键的波形,简单的处理就是给按键并联一个小电容。
专治疑难杂症
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2021-4-23
在线时间
5 小时
 楼主| 发表于 2021-4-30 22:10:21 | 显示全部楼层
我的延时要几百毫秒才能解决抖动,但是不用外部中断的按键函数,就用按键的话就只需要20ms
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2021-4-23
在线时间
5 小时
 楼主| 发表于 2021-4-30 23:00:20 | 显示全部楼层
会两次进入中断,有什么解决办法吗
回复

使用道具 举报

25

主题

180

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2015-1-14
在线时间
152 小时
发表于 2021-5-8 16:45:57 | 显示全部楼层
中断里面不是取反了吗?亮灭应该才是正常的
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-23 05:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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