OpenEdv-开源电子网

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

没触发中断,为什么会执行中断函数??

[复制链接]

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-10-27
在线时间
0 小时
发表于 2015-11-20 23:09:42 | 显示全部楼层 |阅读模式
5金钱
#include "stm32f10x.h"
#define LED5REV GPIO_WriteBit(GPIOE,GPIO_Pin_5,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOE,GPIO_Pin_5)))) 
#define LED5OFF GPIO_SetBits(GPIOE,GPIO_Pin_5)
#define LED5ON  GPIO_ResetBits(GPIOE,GPIO_Pin_5)

static __IO uint32_t TimingDelay;
void Delay(__IO uint32_t nTime);

void Systick()
{
if (SysTick_Config(SystemCoreClock / 1000))
  { 
    while (1);
  }
}

void EXTI0_Config(void)


  EXTI_InitTypeDef   EXTI_InitStructure;
  GPIO_InitTypeDef   GPIO_InitStructure;
  NVIC_InitTypeDef   NVIC_InitStructure;
  /* Enable GPIOA clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    /* Configure PA.00 pin as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Enable AFIO clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
  
/* Configure EXTI0 line */
  EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//????????·?  
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
EXTI_GenerateSWInterrupt(EXTI_Line0);//?ú?ú?????í??????

 /* Enable and set EXTI0 Interrupt to the lowest priority */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure); 
}

void led_init()
{
  GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
}

int main()
{
Systick();
   led_init();
LED5OFF;
   EXTI0_Config();
while (1)
{}
}

void Delay(__IO uint32_t nTime)

  TimingDelay = nTime;
  while(TimingDelay != 0);
}

void TimingDelay_Decrement(void)
{
  if (TimingDelay != 0x00)
  { 
    TimingDelay--;
  }
}

void EXTI0_IRQHandler()
{
   if(EXTI_GetITStatus(EXTI_Line0)!=RESET)
{
  LED5ON;
     EXTI_ClearITPendingBit(EXTI_Line0);
}
}


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

使用道具 举报

15

主题

786

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3223
金钱
3223
注册时间
2015-7-26
在线时间
811 小时
发表于 2015-11-20 23:53:42 | 显示全部楼层
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
这句不是?
我的博客:http://blog.csdn.net/itdo_just
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-10-27
在线时间
0 小时
 楼主| 发表于 2015-11-21 00:10:32 | 显示全部楼层
回复【2楼】229382777@qq.com:
---------------------------------
那只是打开中断向量吧,中断是靠边沿信号触发的,我的PA0没有上升沿触发,LED却亮了。。
回复

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2015-11-21 00:42:27 | 显示全部楼层
回复【3楼】Seeking:
---------------------------------
你仔细看看是不是代码的问题啊!!!
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-10-27
在线时间
0 小时
 楼主| 发表于 2015-11-21 10:42:45 | 显示全部楼层
回复【4楼】FantaSy_:
---------------------------------
现在可以通过边沿触发执行中断了,但在中断函数中不出来。 现象:PA0一有边沿触发, LED一直亮着。。
回复

使用道具 举报

5

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
419
金钱
419
注册时间
2015-9-16
在线时间
122 小时
发表于 2015-11-21 11:08:27 | 显示全部楼层
这问题之前有人问过的吧。
即使出了中断也没有进行相应的关灯操作,一直亮着是对的啊。
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-10-27
在线时间
0 小时
 楼主| 发表于 2015-11-21 11:10:08 | 显示全部楼层
回复【6楼】dozm:
---------------------------------
主程序中有关灯的命令。。
回复

使用道具 举报

5

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
419
金钱
419
注册时间
2015-9-16
在线时间
122 小时
发表于 2015-11-21 11:11:25 | 显示全部楼层
设个标志位,进入中断函数就将这个标志位置1,在主函数判断标志位是1就调用LEDOFF同时把标志位清0,就能判断有没有出中断了。
回复

使用道具 举报

5

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
419
金钱
419
注册时间
2015-9-16
在线时间
122 小时
发表于 2015-11-21 11:11:54 | 显示全部楼层
你那在while循环外面 是初始化 只执行一次
回复

使用道具 举报

5

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
419
金钱
419
注册时间
2015-9-16
在线时间
122 小时
发表于 2015-11-21 11:12:33 | 显示全部楼层
好好看看C语言吧
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-10-27
在线时间
0 小时
 楼主| 发表于 2015-11-21 11:32:29 | 显示全部楼层
可以退出中断了。。现在通过按键触发中断,LED可以亮。退出中断时,LED也可以灭。但LED的亮度不是很明显。
  在中断函数中加入延时消抖,未触发中断,LED就一直亮着。这可能是什么原因???
回复

使用道具 举报

5

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
419
金钱
419
注册时间
2015-9-16
在线时间
122 小时
发表于 2015-11-21 11:35:15 | 显示全部楼层
DEBUG跟踪一下,看你的程序怎么执行的。
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-10-27
在线时间
0 小时
 楼主| 发表于 2015-11-21 11:41:31 | 显示全部楼层
回复【12楼】dozm:
---------------------------------
好的,谢谢大神。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 07:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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