文档章节

STM32 外部中断的使用(按键中断点亮LED)

 奔跑的夕阳_
发布于 2017/08/17 16:20
字数 304
阅读 7
收藏 0

设置过程:

①开启时钟

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);

注意:要使用EXTI需开启AFIO时钟

②按键GPIO配置

    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
    GPIO_Init(GPIOA,&GPIO_InitStructure);

③配置EXTI

    EXTI_InitTypeDef EXTI_InitStructure;
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
//将GPIO管脚与外部中断线连接
    EXTI_InitStructure.EXTI_Line = EXTI_Line0;      //信号源  PA0对应EXTI_Line0
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能中断
    EXTI_Init(&EXTI_InitStructure);

注意:GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);//将GPIO管脚与外部中断线连接

④一般默认情况下中断向量偏移表是在FLASH中,若在RAM中需要设置NVIC_SetVectorTable。

/*设置中断向量表起始位置,用来定位中断源*/ 

#ifdef  VECT_TAB_RAM   

  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);  //中断向量表在RAM中,0x20000000 

#else   

  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);    //中断向量表在flash中,0x08000000 

#endif 

⑤配置NVIC

    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //优先级组1
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;    //按键1通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占式优先级1
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //子优先级1
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //中断通道使能
    NVIC_Init(&NVIC_InitStructure);//加载优先级配置

注意:NVIC_InitTypeDef结构体位于misc.h中,EXTI0_IRQn位于stm32f10x.h中

⑥写中断服务程序

void EXTI0_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line0)!=RESET)//判断是否产生了EXTI_Line0中断
    {
        LEDBlink;//LED翻转
        EXTI_ClearITPendingBit(EXTI_Line0);//清楚中断标志位
    }
}

© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 11
码字总数 3649
作品 0
杭州
一起学mini2440裸机开发(十)--mini2440外部中断实验

我今天一整天都在试着将TQ2440的那种处理中断的方法(即安装中断向量表)移植到MDK中的mini2440,但是一直没成功,这种方法一直没成功,后来又想,还是先从最简单的开始吧,就是不利用中断向...

长平狐
2013/06/17
1K
0
STM32GPIO外部中断总结

1 STM32中断分组 STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处。STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,P...

dp29sym41zygndvf
2017/12/17
0
0
STM32之SysTick定时器

SysTick-------操作系统的心跳 SysTick是系统滴答定时器,可以说是操作系统的的“心跳”,它被绑在NVIC中,用于产生SysTick异常(异常号:15)。一旦产生SysTick异常,就会产生滴答中断,这个...

panrenqiu
04/14
0
0
SysTick的优先级是高还是低

SysTick系统嘀嗒定时器并非STM32独有的,它是Cortex内核的部分,CM3为它专门开出一个异常类型,并且在中断向量表中占有一席之地(异常号15)。这样它可以很方便的移植到不同厂商出CM3内核...

OceanStack
2015/01/24
0
0
STM32系统滴答_及不可不知的延时技巧 - (上)

我想每个单片机爱好者及工程开发设计人员都有过点灯的经历。流水灯是个好东西,尤其是在调试资源有限的环境中,有时会帮上大忙。 然在最初入门时,如何让这些小灯们按照我们的想法欢快地跑起...

小汉憨憨
2014/04/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
3
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
1
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
3
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部