文档章节

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

 奔跑的夕阳_
发布于 2017/08/17 16:20
字数 304
阅读 8
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

分布式缓存架构设计

零、 题记 在高并发场景下,需要通过缓存来减少数据库的压力,使得大量的访问进来能够命中缓存,只有少量的需要到数据库层。由于缓存基于内存,可支持的并发量远远大于基于硬盘的数据库。所以...

Ala6
12分钟前
1
0
简单工厂模式

public abstract class Operation { private double numberA = 0; private double numberB = 0; public double getNumberA() { return numberA; } ......

NinjaFrog
14分钟前
0
0
git(一) 基本操作(branch、tag、冲突)

撤销操作 修改最后一次提交 解释:修改上次提交。可以修改内容和提交信息 适用场景: 1) 提交信息写错了; 2) 提交多加了配置文件; 3)提交少加了文件 示例操作: $ git commit -m '提交1'...

开心的哈士奇
17分钟前
0
0
Vue中路由管理器Vue Router使用方式(二)-推荐

一、Vue中使用Vue Router简单方式使用 vue add xxx命令添加插件 使用步骤,本人假设已经安装好了Vue CLI工具,了解更多参考:VSCode 搭建Vue开发环境之Vue CLI 1.创建项目 vue create hello...

tianma3798
29分钟前
0
0
设计模式(十六)[结构模式] 装饰模式(Decorator)

1.什么是装饰模式? 装饰模式又名包装模式。装饰模式以对客户端透明的方式扩展对象功能,是继承关系的一个替代方案。 2.模式的类图 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收...

1527
30分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部