野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17866|回复: 3

学习第18讲EXTI-外部中断遇到的问题

[复制链接]
发表于 2016-12-11 22:38:24 | 显示全部楼层 |阅读模式
1火花
我照着霸道板第18讲视频(EXTI第二节GPIO外部中断代码讲解)编写的外部中断实验例程,来操作正点原子的F103ZET6,烧写进去过后,得到的现象和视频里演示不一样。问题是这样的:

我采用的是板上KEY2(对应为GPIOE.2)中断控制LED灯(对应GPIOB.5)的翻转,初始化EXTI代码里配置的是上升沿触发,按理来说根据视频里讲的得到的现象应该是按下一次按键,LED灯翻转一次。

可是实际的现象却是:

代码烧写进去,没去按按键,灯一直在闪烁,是那种很快的闪烁,或者是按下一次按键灯不灭,或者顿一会才灭掉,又或者是按下按键手不松灯灭,松开按键灯又亮,配置成下降沿触发也是如此。而配置成上升沿和下降沿都触发的方式,LED未见闪烁,这是否是因为按键检测未消抖所造成的呢?还是其他什么原因


以下是部分代码:
中断优先级配置函数:
static void EXTI_NVIC_Config(void)
{
        NVIC_InitTypeDef NVIC_InitStruct;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//配置中断优先级分组为分组1
        NVIC_InitStruct.NVIC_IRQChannel = EXTI4_IRQn;//配置中断源
        NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;//配置主优先级,也叫抢占优先级,优先级数字越小,优先级越高
        NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;//配置子优先级
        NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;//使能,开总中断
        NVIC_Init(&NVIC_InitStruct);
}
中断事件配置函数
void EXTI_Key_Config(void)
{
        GPIO_InitTypeDef  GPIO_InitStruct;
        EXTI_InitTypeDef  EXTI_InitStruct;
               
        //配置中断优先级
        EXTI_NVIC_Config();
       
        //开启按键GPIOE.2口的时钟
        RCC_APB2PeriphClockCmd(KEY0_GPIO_INT_CLK,ENABLE);
       
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;//配置成浮空输入
        GPIO_InitStruct.GPIO_Pin = KEY0_INT_GPIO_PIN;
       
        GPIO_Init(KEY0_INT_GPIO_PORT,&GPIO_InitStruct);
       
        //初始化EXTI
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);
       
        EXTI_InitStruct.EXTI_Line = EXTI_Line4;
        EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;
        EXTI_InitStruct.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStruct);
}

中断服务函数
void EXTI4_IRQHandler(void)
{
        if(EXTI_GetITStatus(EXTI_Line4) != RESET)
        {
                LED_R_TOGGLE;
        }
        //清除中断标志位
        EXTI_ClearITPendingBit(EXTI_Line4);
}




最佳答案

查看完整内容

1-我们的板子配置成上升沿和下降沿都可以,具体是现象不一样,区别我在视频有讲 2-我们的按键带硬件消抖,如果你的板子没有硬件消抖,那么需要在软件上多次检测来实现软件消抖。
回复

使用道具 举报

发表于 2016-12-11 22:38:25 | 显示全部楼层
1-我们的板子配置成上升沿和下降沿都可以,具体是现象不一样,区别我在视频有讲

2-我们的按键带硬件消抖,如果你的板子没有硬件消抖,那么需要在软件上多次检测来实现软件消抖。
回复

使用道具 举报

发表于 2016-12-12 08:57:36 | 显示全部楼层
我们的板子自带硬件消抖,没有硬件消抖的话,使用中断检测按键是必然存在这种问题的
回复

使用道具 举报

发表于 2016-12-12 11:35:10 | 显示全部楼层
换成火哥的板子就没有问题了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 14:51 , Processed in 0.048472 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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