STM32学习——EXTI外部中断

发布者:chunying最新更新时间:2022-01-24 来源: eefocus关键字:STM32  EXTI  外部中断 手机看文章 扫描二维码
随时随地手机看文章

EXTI简介

EXTI可以实现对外部输入信号的上升沿检测和下降沿的检测。EXTI可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。

在这里插入图片描述

可以看到EXTI一共有20条信号线,即可同时检测来自20路的中断请求。

在这里插入图片描述

代码实现

(1)首先配置GPIO初始化结构体

GPIO要配置为浮空输入


void Key_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;

GPIO_Init(GPIOC,&GPIO_InitStructure);

}


(2)配置NVIC中断控制器


static void NVIC_Configuration(void)

{

  NVIC_InitTypeDef NVIC_InitStructure;

  

  /* 配置NVIC为优先级组1 */

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  

  /* 配置中断源:按键1 */

  NVIC_InitStructure.NVIC_IRQChannel =EXTI0_IRQn;

  /* 配置抢占优先级 */

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

  /* 配置子优先级 */

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

  /* 使能中断通道 */

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

  

  /* 配置中断源:按键2,其他使用上面相关配置 */  

  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;

  NVIC_Init(&NVIC_InitStructure);

}


(3)配置EXTI初始化结构体

记得打开时钟!


void EXTI_Key_Config(void)

{

EXTI_InitTypeDef EXTI_InitStructure;


/* 配置 NVIC 中断*/

NVIC_Configuration();

Key_Config();

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);


/* 选择EXTI的信号源 */

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); 

EXTI_InitStructure.EXTI_Line = EXTI_Line0;

/* EXTI为中断模式 */

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

/* 上升沿中断 */

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

    /* 使能中断 */

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;

    EXTI_Init(&EXTI_InitStructure);


/* 选择EXTI的信号源 */

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13); 

    EXTI_InitStructure.EXTI_Line = EXTI_Line13;

/* EXTI为中断模式 */

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

/* 下降沿中断 */

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

    /* 使能中断 */

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;

    EXTI_Init(&EXTI_InitStructure);

}


(4)编写中断服务函数


void EXTI0_IRQHandler(void)

{

  //确保是否产生了EXTI Line中断

if(EXTI_GetITStatus(EXTI_Line0) != RESET) 

{

// LED1 取反

if(GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_2))

GPIO_ResetBits(GPIOC,GPIO_Pin_2);

else

GPIO_SetBits(GPIOC,GPIO_Pin_2);

    //清除中断标志位

EXTI_ClearITPendingBit(EXTI_Line0);     

}  

}


关键字:STM32  EXTI  外部中断 引用地址:STM32学习——EXTI外部中断

上一篇:I2C协议的解析
下一篇:STM32学习——GPIO的操作

推荐阅读最新更新时间:2024-11-17 11:35

为什么STM32中SPI的MISO引脚设置成复用推挽输出
在复用SPI总线时,必须先设置总线端口。读取其他ARM芯片(如NXP)一般很容易看出芯片的设置是否正确。不过对于STM32就容易让人迷惑了。例如,我们在使用SPI总线进行通信时,可以这样设置: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用的推挽输出 恐怕大家对MISO端口的设置就会产生疑惑了,M
[单片机]
STM32电机方波】记录2——NVIC中断基本设置
NVIC概念:提供中断控制器,用于总体管理异常,称之为“内嵌向量中断控制器”。简单来说,就是MCU提供、处理内部中断的模块。 NVIC库函数: 中断优先级: 在配置NVIC之前得弄懂一个概念:中断优先级,即中断的执行顺序。中断优先级中,分为抢占式优先级(先占优先级)和响应优先级(从优先级)。抢断优先级,顾名思义,能再别人中断是抢占别人中断,实现中断嵌套。响应优先级则只能排队,不能抢在前面插别人的对,即不能嵌被嵌套。 STM32中指定优先级的寄存器为4位,其定义如下: 第0组:所有4位用于指定响应优先级 NVIC_PriorityGroup_0 = 选择第0组 第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
[单片机]
【<font color='red'>STM32</font>电机方波】记录2——NVIC中断基本设置
stm32专题十一:USART(五)USART发送命令解析
通过串口,用电脑发数据给单片机来控制单片机实现相应的功能,能够实现简单的人机交互。 很简单,通过getchar()接收,然后switch...case...来实现不同的功能。值得注意的是,串口发送接收的均为字符。 #include stm32f10x.h #include bsp_led.h #include bsp_usart.h #include stdio.h void delay(uint32_t count); int main(void) { uint8_t ch; USART_config(); LED_GPIO_Config(); printf( 串口发送数据
[单片机]
STM32 f103搭配LM386声音传感器实现简单音乐识别
1.前言 2019年12月初,有一个中国机器人技能大赛中的双足机器人比赛项目,意思是机器人识别音乐跳对应节奏的舞蹈,五首音乐随机抽三首歌曲,音乐停,机器人停。 新比赛,新项目,难度自然有,坑也不少。希望这篇文章能给大家带来一点帮助。废话不多说,进入正题。 2.效果 (健康歌)每100ms采样一次,歌曲前5秒内共测50次数据,重复12组 (卡路里) 重复7组 可以看出一首歌经过多次测值,其采样值数组呈现出有规律的特征;不同的歌曲的特征也有较好的区分度。达到了区分歌曲的效果。下面讲讲具体实现步骤。 3.思路 href= 做什么:识别不同音乐,识别声音有无。 href= 怎么做:a.利用传感器判断出音乐或声音
[单片机]
<font color='red'>STM32</font> f103搭配LM386声音传感器实现简单音乐识别
stm32专题十四:存储器介绍
存储器通常分为易失性存储器(RAM - random access memory)和非易失性存储器(ROM - read only memory) 易失性存储器 SRAM:Static Random Access Memory(静态随机存储器),基本的存储单元由SR锁存器组成,不需要定时刷新。 DRAM:Dynamic Random Access Memory(静态随机存储器),由电容和晶体管组成,结构非常简单。动态随机存储器 DRAM 的存储单元以电容的电荷来表示数据,有电荷代表 1,无电荷代表 0。但时间一长,代表 1 的电容会放电,代表 0 的电容会吸收电荷,因此它需要定期刷新操作。刷新操作会对电容进行检查,若电
[单片机]
<font color='red'>stm32</font>专题十四:存储器介绍
STM32 ILI9341驱动TFTLCD(九)LCD显示ASCIIII
ASCII值在LCD上显示,同样要在一个区域中写显存,这样不同大小字号的字符也就对应不同的字模了。这里生成字模用到了字体取模软件工具PCtoLCD2002,可以方便地生成不同字号的字模。 打开软件并选择设置。 进入设置界面。 根据自己需要进行取模设置: 点阵格式:阴码表示1有效,阳码表示1有效。 取模方式和取模方向与写入显存的算法有关,这里选择顺向逐行式。 设置完成后,根据ASCII表把需要的ASCII值写入,这里写入可见的ASCII值,点击生成字模。 然后复制生成的字模,定义为一个常量存储起来。 可以根据生成的字符右边的序列选取字符所在的序列,由于我们选取的是ASCII的可视字符,在原有的字符上偏移了32
[单片机]
<font color='red'>STM32</font> ILI9341驱动TFTLCD(九)LCD显示ASCIIII
STM32库函数SystemInit()的理解
SystemInit()这个函数出现在main()函数的第一行,可以看出它的重要性。以前关于SystemInit()这个函数从来没有关心过,只知道这是进行 STM32 系统初始化的一个函数。今天决定仔细看看,重新开始STM32的学习。这个函数在system_stm32f10x.c中,此C文件主要就是干具体硬件配置相关的工作。 void SystemInit (void) { RCC- CR |= (uint32_t)0x00000001; #ifndef STM32F10X_CL RCC- CFGR &= (uint32_t)0xF8FF0000; #else RCC- CFGR &= (uint32_
[单片机]
GD32代码移植STM32(一)
GAIWEI例子:GD32F103移植STM32F103 使用相同FLASH和管脚数量相同的芯片,例如GDF103C8T6移植STM32F103C8T6程序。虽然两个款芯片的寄存器地址以及架构基本相同。但是需要注意的是GD32F10x主频是108兆,但是STM32F10x主频是72兆。所以需要针对以RCC时钟进行修改。 1.先将芯片的选项进行修改:查找对应芯片。 2.将STM32的启动文件替换成GD的启动文件。 3.修改时钟相关配置。 打开stm32f10x.h文件,#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) /*! Time out for HSE start up
[单片机]
GD32代码移植<font color='red'>STM32</font>(一)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved