OpenEdv-开源电子网

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

库函数中,如何在主函数中 按键一次开启外部中断, 在按一次,关闭外部中断。虚心请教,谢谢

[复制链接]

2

主题

8

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2015-7-28
在线时间
2 小时
发表于 2015-7-28 15:01:35 | 显示全部楼层 |阅读模式
5金钱
请问具体操作,是在主函数中如何操作呢?尤其是关闭 外部中断,为什么每次开了外部中断后就关不上了。
void EXTIX_Init(void)
{
 
  EXTI_InitTypeDef EXTI_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;

  // KEY_Init(); 

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); 


    GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);
 EXTI_ClearITPendingBit(EXTI_Line2); 

EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_InitStructure.EXTI_Line=EXTI_Line2; 
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
 
  EXTI_Init(&EXTI_InitStructure); 

 

    NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; 
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; 
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
  NVIC_Init(&NVIC_InitStructure);


 
}

最佳答案

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

#define CLI()      __set_PRIMASK(1) /*关闭总中断 */   #define SEI() __set_PRIMASK(0) /* 开启总中断*/  只需在你的按键程序中选择他们就可以了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2015-7-24
在线时间
6 小时
发表于 2015-7-28 15:01:36 | 显示全部楼层
#define CLI()      __set_PRIMASK(1) /*关闭总中断 */  
#define SEI() __set_PRIMASK(0) /* 开启总中断*/ 


只需在你的按键程序中选择他们就可以了
回复

使用道具 举报

13

主题

611

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1929
金钱
1929
注册时间
2014-10-6
在线时间
625 小时
发表于 2015-7-28 16:57:20 | 显示全部楼层
EXTI_InitStructure.EXTI_LineCmd =  DISABLE;
 EXTI_Init(&EXTI_InitStructure);
回复

使用道具 举报

13

主题

611

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1929
金钱
1929
注册时间
2014-10-6
在线时间
625 小时
发表于 2015-7-28 16:57:33 | 显示全部楼层
还有就是把外部中断的时钟关了,你试试行不行,我也没有用过!
回复

使用道具 举报

sunshine.lyw 该用户已被删除
发表于 2017-3-2 11:32:19 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-3-6 21:07:28 | 显示全部楼层
sunshine.lyw 发表于 2017-3-2 11:32
这个方法是可行的吗?
我一直想用这个,但是没有实际例子

可行,2楼的方法也行
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-3-6 21:07:37 | 显示全部楼层
sunshine.lyw 发表于 2017-3-2 11:32
这个方法是可行的吗?
我一直想用这个,但是没有实际例子

建议你操作寄存器,那就非常简单了。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2013-12-24
在线时间
28 小时
发表于 2017-3-7 10:34:23 | 显示全部楼层
楼上说的都是可行的方案,
前提是,这个案件你不能用中断方式驱动,得不断的通过CPU来读取有没有按下。
原因是,如果把外部中断关了,就不能触发中断来打开了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-13 17:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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