OpenEdv-开源电子网

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

求助EXTI3_IRQHandler中断!!!

[复制链接]

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2016-4-22
在线时间
10 小时
发表于 2016-9-4 14:43:41 | 显示全部楼层 |阅读模式
2金钱
学习到了EXTI中断,模仿例程改写了一个按键2(PD3)产生中断控制LED2(PD12)亮灭的程序但是按键时LED毫无反应。附上部分源码,求大神解释一下!
/****************** stm32f10_it.c *******************************/
/* I/O线中断,线中断为PD3(KEY2) */
void EXTI3_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line3) != RESET)
  {
          // LED2(PD12) 取反               
                GPIO_WriteBit(GPIOD, GPIO_Pin_12,
                             (BitAction)((1-GPIO_ReadOutputDataBit(GPIOD, GPIO_Pin_12))));
    EXTI_ClearITPendingBit(EXTI_Line3);     //清除中断标志位
  }  
}
/******************* exti.c *********************************/
/*函数名:NVIC_Configuration
*描述  :配置嵌套向量中断控制器NVIC
*/
static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  /* Configure one bit for preemption priority */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  /*配置P[A|B|C|D|E]3为中断源*/
#include "stm32f10x.h"                  // Device header
  NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

/*
* 函数名:EXTI_PD3_Config
* 描述:配置PD3为线中断口,并设置中断优先级
*
*/
void EXTI_PD3_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;

        /* config the extiline(PD3) clock and AFIO clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO,ENABLE);
                                                                                               
        /* config the NVIC(PD3) */
        NVIC_Configuration();

        /* EXTI line gpio config(PD3) */       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;      
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;       
  GPIO_Init(GPIOD, &GPIO_InitStructure);

        /* EXTI line(PD3) mode config */
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3);
  EXTI_InitStructure.EXTI_Line = EXTI_Line3;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
}

/******************* ***************************** ****/
/************************ LED.H *******************************************/
#ifndef __LED_H
#define        __LED_H

#include "stm32f10x.h"

/* the macro definition to trigger the led on or off
* 1 - off
- 0 - on
*/
#define ON  0
#define OFF 1

#define LED1(a)        if (a)        \
                                        GPIO_SetBits(GPIOB,GPIO_Pin_5);\
                                        else                \
                                        GPIO_ResetBits(GPIOB,GPIO_Pin_5)

#define LED2(a)        if (a)        \
                                        GPIO_SetBits(GPIOD,GPIO_Pin_12);\
                                        else                \
                                        GPIO_ResetBits(GPIOD,GPIO_Pin_12)

void LED_GPIO_Config(void);

#endif /* __LED_H */

/************************* LED.C *********************************/
**********************************************************************************/
#include "led.h"

/*
* 函数名:LED_GPIO_Config
*描述:配置LED用到的io口

*/
void LED_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD, ENABLE);

          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;       
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOB, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
        GPIO_Init(GPIOD, &GPIO_InitStructure);       
       
        GPIO_SetBits(GPIOB, GPIO_Pin_5);         // turn off all led
        GPIO_SetBits(GPIOD, GPIO_Pin_12);       
}

/************************** main.c ************************************/
#include "stm32f10x.h"
#include "led.h"
#include "exti.h"
int main(void)
        {
                /*初始化LED*/
                LED_GPIO_Config();
                LED2(ON);
               
                /**初始化 exit line**/
               
                EXTI_PD3_Config();
               
                /*等待中断*/
                while(1)
                {
                }
               
        }


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2016-9-4 22:19:00 | 显示全部楼层
调试一下,或者直接发整个工程上来。这样看有点乱
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2016-4-22
在线时间
10 小时
 楼主| 发表于 2016-9-5 09:45:13 | 显示全部楼层
Da Wen 发表于 2016-9-4 22:19
调试一下,或者直接发整个工程上来。这样看有点乱

好的谢谢提醒
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2016-4-22
在线时间
10 小时
 楼主| 发表于 2016-9-5 09:59:29 | 显示全部楼层
追加一下问题源码!求大神帮助!!谢谢

EXTI中断EXTI3.zip

5.12 MB, 下载次数: 24

回复

使用道具 举报

1

主题

5

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
258
金钱
258
注册时间
2016-4-30
在线时间
36 小时
发表于 2016-9-5 11:34:18 | 显示全部楼层
你的按键初始化了吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 19:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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