OpenEdv-开源电子网

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

EXTI中断 配置上升沿触发 结果上升沿下降沿都触发,求答疑

[复制链接]

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-10-28
在线时间
8 小时
发表于 2015-8-15 15:54:19 | 显示全部楼层 |阅读模式
5金钱
STM32F107 配置如下,请大神帮忙看看
void EXTI_IN2_INIT(void)//PC9
{
GPIO_InitTypeDef GPIO_InitStructure; 
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); //??jtag
/* config the extiline(PC9) clock and AFIO clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,ENABLE);

/* EXTI line gpio config(PC9) */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;       
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; // ????????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

/* EXTI line(PC9) mode config */
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource9); 
  EXTI_InitStructure.EXTI_Line = EXTI_Line9;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //??????????
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure); 

NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

void EXTI9_5_IRQHandler(void)//EXTI_IN2
{
if(EXTI_GetITStatus(EXTI_Line9)!=RESET)
{
data1++;
EXTI_ClearITPendingBit(EXTI_Line9); 
}     
}


最佳答案

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

原因就是你的IO是悬空的,状态不稳定,用手抓着都可能中断。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-15 15:54:20 | 显示全部楼层
原因就是你的IO是悬空的,状态不稳定,用手抓着都可能中断。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2015-8-15 16:19:26 | 显示全部楼层
表示怀疑。。。。
小小蜗牛
回复

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-10-28
在线时间
8 小时
 楼主| 发表于 2015-8-15 16:23:27 | 显示全部楼层
回复【2楼】jiutianshenjian:
---------------------------------
怀疑啥?对了硬件上管脚什么也没接。
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2015-8-15 16:25:31 | 显示全部楼层
回复【3楼】墨染卿卿:
---------------------------------
怎么判断下降沿出发了中断呢?
小小蜗牛
回复

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-10-28
在线时间
8 小时
 楼主| 发表于 2015-8-15 16:34:34 | 显示全部楼层
回复【4楼】jiutianshenjian:
---------------------------------
我用杜邦线一端接5v,一端连到PC9上,在中断里打断点。
因为是上升沿触发,理想的是连上杜邦线时,进中断,拔掉杜邦线,不进中断。
结果是连上杜邦线进中断,拔掉也进。

我用同样的方法测试429的EXTI,是理想的现象。
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2015-8-15 16:41:27 | 显示全部楼层
会不会有抖动
小小蜗牛
回复

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-10-28
在线时间
8 小时
 楼主| 发表于 2015-8-15 16:45:31 | 显示全部楼层
回复【6楼】jiutianshenjian:
---------------------------------
我考虑过,用DAC输出方波,将DAC输出端连到PC9上,在中断里读取PC9的电平,如果是高电平,就用串口输出0x11,低电平输出0X00。结果0x11和0x22交替出现。没辙了。
回复

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-10-28
在线时间
8 小时
 楼主| 发表于 2015-8-15 16:46:04 | 显示全部楼层
低电平输出0x22,上面打错了
回复

使用道具 举报

13

主题

303

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2274
金钱
2274
注册时间
2015-2-3
在线时间
562 小时
发表于 2015-8-15 19:37:21 | 显示全部楼层
最好 消抖一下   不然可能按下去的时候可能中断多次
STM32/LPC1788/51
回复

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-10-28
在线时间
8 小时
 楼主| 发表于 2015-8-16 21:46:45 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
但是软件里我选了下拉,原子哥,求详细解答。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-16 22:35:29 | 显示全部楼层
回复【11楼】墨染卿卿:
---------------------------------
1,可能设置没生效,你可以用万用表测量下。
2,可能干扰比较严重,内部下拉不起作用了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2014-9-2
在线时间
7 小时
发表于 2015-8-17 09:27:24 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
那像这种情况下是不是要外部下拉更有保证性?
回复

使用道具 举报

8

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2015-8-1
在线时间
7 小时
发表于 2015-8-17 15:11:06 | 显示全部楼层

正好今天学习了外部中断,也尝试上升下降沿都触发。同时考虑一个中断线上可能有同时多个中断源同时激发中断(不知是否会有这种情况,也不知道实际硬件是否允许出现这种情况,只是假设),为了避免干扰,加了些控制。代码大家看看是否可行。

[mw_shl_code=c,true]void EXTI4_IRQHandler(void) { // 用于确定上一次的状态 static bool lIsKeyOn = FALSE; Wait_ms(10); if(EXTI_GetITStatus(EXTI_Line4) == RESET) return; if(KEY0 == RESET) // 低电平有效 { if(lIsKeyOn == FALSE) { lIsKeyOn = TRUE; printf("Signal0 -> ON\r\n"); ExINT_Signal0_On(); // 自定义在按下时的处理方法 } } else { if(lIsKeyOn == TRUE) { lIsKeyOn = FALSE; printf("Signal0 -> OFF\r\n"); ExINT_Signal0_Off(); // 自定义在抬起时的处理方法 } } // ... 其他相同中断源的中断处理 EXTI_ClearITPendingBit(EXTI_Line4); //清除LINE4上的中断标志位 } [/mw_shl_code]

有软件开发经验,从0硬件基础学习STM32开发。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-17 22:48:34 | 显示全部楼层
回复【13楼】小队员:
---------------------------------
可以尝试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 05:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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