STM32 外部(IO)中断EXTI的应用

发布者:fuehrd努力的最新更新时间:2015-11-12 来源: eefocus关键字:STM32  外部中断  EXTI 手机看文章 扫描二维码
随时随地手机看文章
a)        目的:跟串口输入类似,不使用中断进行的IO输入效率也很低,而且可以通过EXTI插入按钮事件,本节联系EXTI中断。

b)        初始化函数定义:

void EXTI_Configuration(void); //定义IO中断初始化函数

c)        初始化函数调用:

EXTI_Configuration();//IO中断初始化函数调用简单应用:

d)        初始化函数:

void EXTI_Configuration(void)

{

  EXTI_InitTypeDef EXTI_InitStructure;        //EXTI初始化结构定义

 

EXTI_ClearITPendingBit(EXTI_LINE_KEY_BUTTON);//清除中断标志

   GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3);//管脚选择

   GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource4);

     GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource5);

     GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource6);

 

    EXTI_InitStructure.EXTI_Mode EXTI_Mode_Interrupt;//事件选择

  EXTI_InitStructure.EXTI_Trigger EXTI_Trigger_Falling;//触发模式

  EXTI_InitStructure.EXTI_Line EXTI_Line3 EXTI_Line4; //线路选择

  EXTI_InitStructure.EXTI_LineCmd ENABLE;//启动中断

  EXTI_Init(&EXTI_InitStructure);//初始化

}

 

e)        RCC初始化函数中开启I/O时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ENABLE);

 

GPIO初始化函数中定义输入I/O管脚。

//IO输入,GPIOA的4脚输入

  GPIO_InitStructure.GPIO_Pin GPIO_Pin_4;

    GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU;         //上拉输入

  GPIO_Init(GPIOA, &GPIO_InitStructure);                //初始化

f)        在NVIC的初始化函数里面增加以下代码打开相关中断:

  NVIC_InitStructure.NVIC_IRQChannel EXTI9_5_IRQChannel;        //通道

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 0;//占先级

  NVIC_InitStructure.NVIC_IRQChannelSubPriority 0;                        //响应级

  NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE;                        //启动

  NVIC_Init(&NVIC_InitStructure);                                                                //初始化

 

g)        在stm32f10x_it.c文件中找到void USART1_IRQHandler函数,在其中添入执行代码。一般最少三个步骤:先使用if语句判断是发生那个中断,然后清除中断标志位,最后给字符串赋值,或做其他事情。

  if(EXTI_GetITStatus(EXTI_Line3) != RESET)                                  //判断中断发生来源

   EXTI_ClearITPendingBit(EXTI_Line3);                                          //清除中断标志

    USART_SendData(USART1, 0x41);                                              //发送字符“a”

    GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_2)));//LED发生明暗交替

}

h)        中断注意事项:

中断发生后必须清除中断位,否则会出现死循环不断发生这个中断。然后需要对中断类型进行判断再执行代码。

使用EXTI的I/O中断,在完成RCC与GPIO硬件设置之后需要做三件事:初始化EXTI、NVIC开中断、编写中断执行代码。 
关键字:STM32  外部中断  EXTI 引用地址:STM32 外部(IO)中断EXTI的应用

上一篇:关于动态改变STM32 PWM占空比的问题
下一篇:STM32 PWM输出

推荐阅读最新更新时间:2024-03-16 14:39

STM32,RTC周期性唤醒(wakeup)中断
STM32L151: int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); LED_ON(); MX_DMA_Init(); MX_SPI1_Init(); MX_SPI2_Init(); MX_TIM3_Init(); MX_USART2_UART_Init(); //MX_IWDG_Init(); MX_RTC_Init(); MX_USART3_UART_Init(); MX_USART1_UART_Init(); printf( init complete...\r\n ); LED_OFF(); uns
[单片机]
STM32 基础系列教程 25 - USB_HID_mouse
前言 学习stm32 USB接口使用,学会用CUBE工具快速创建USB设备工程及调试,关于usb的相关知道请读者提前准备并学习,当然如果不想深究其中原理的话,跟着本文来操作就可以实现基于USB的设备开发了。需要提示的是,stm32在使用usb接口功能是一般需要在DP引脚上上拉一个1.5K电阻到3.3V(部分MCU内部会上拉)。 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。 本示例所用的最小系统板原理图: 从本节开始,关于CUBEMX工具及KEIL工具的操作将不再细讲,如
[单片机]
<font color='red'>STM32</font> 基础系列教程 25 - USB_HID_mouse
stm32---DAC
DAC即数字模拟转换器,它可以将数字信 号转换为模拟信号。 它的功能与 ADC 相反。在常见的数字信号系统中,大部分传 感器信号被转化成电压信号,而 ADC 把电压模拟信号转换成易于计算机存储、 处理的数字编码,由计算机处理完成后,再由 DAC 输出电压模拟信号,该电压 模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还 原就是这样一个过程。 触发方式 前面是定时器TIM,中间是外部中断9,后面是软件触发 dac.c #include dac.h void DAC1_Init() { GPIO_InitTypeDef GPIO_InitStructure; DAC_InitTyp
[单片机]
stm32:查询法使用pt2262/pt2272无线模块
pt2262/pt2272的工作原理就是按下遥控器的按键之后,接收器的相对应引脚上就会产生一个高电平。该程序实现的功能就是遥控器按下之后,红灯亮起。采用查询法检测引脚是否为高电平。 //初始化接收器的相对应的IO口 void KEY1_Config(void) { GPIO_InitTypeDef GPIO_Struct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //由于检测高电平,所以设置为下拉模式,可理解为,该io口为低电平 GPIO_Struct.GPIO_Mode=GPIO_Mode_IPD; GPIO_Struct.GPIO_
[单片机]
STM32 调试 24L01 心得
大部分使用STM32开发nrf24L01的用户基本都是照搬常见的几个开发板的源代码,在这里我做一些总结: 1.源代码中在while(1)的循环中有 NRF24L01_TX_Mode();或NRF24L01_RX_Mode();类似这样的代码,因为源码中需要检测按键以便切换的不同的模式,对于正常使用来讲,都是发送接收方确定了的,所有,只需要一次即可,没必要放到while中。 2.接收方和发送方的ADDRESS必须一致,这一点尤为重要。 3.发射的通道即频率必须一致,这个好理解。速率,数据长度,也要一致! 4.接收方无论是在中断中接收还是在while中接收,接收后必须清掉FIFO寄存器,否则会出现发送1-3次就不能正确发送的现象。
[单片机]
IAR在STM32的配置方法
1. 建立工程项目文件 新建一个文件夹来存放整个工程项目,在该项目文件夹下建立几个子文件夹存放不同类别的文件: i.将官方模板中的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h和空白main.c文件复制到该项目文件夹下; ii. Obj-存放工程文件,将官方模板中的cortexm3_macro.s、lnkarm_flash.xcl、lnkarm_ram.xcl和stm32f10x_vector.c文件复制到该文件夹下。 iii.library-存放STM32 FWLib文件,将官方提供的固件库library复制到该文件夹下。 2. 在IAR中建立工程 打开IAR,在Project菜
[单片机]
IAR在<font color='red'>STM32</font>的配置方法
STM32的can现场总线的特点及工作流程分析
最近在搞stm32实验板的can现场总线实验,之前只是搞过STC51的串口通信,相比之下,发觉can总线都挺复杂的。开始时,知道自己是新手,只知道can总线跟串行通信,485通信,I2C通信一样都是用来传输数据通信的,对其工作原理一窍不通,还是从基础开始看书看资料,先了解它的基本原理吧。 原来can总线有以下特点: 主要特点 支持CAN协议2.0A和2.0B主动模式 波特率最高可达1兆位/秒 支持时间触发通信功能 发送 3个发送邮箱 发送报文的优先级特性可软件配置 记录发送SOF时刻的时间戳 接收 3级深度的2个接收FIFO 14个位宽可变的过滤器组-由整个CAN共享 标识符列表 FIFO溢出处理方式可配置 记录接
[单片机]
<font color='red'>STM32</font>的can现场总线的特点及工作流程分析
STM32按键控制LED的亮灭
使用一个按键控制 LED 的亮灭,按键按下时LED亮起,按键松开时LED熄灭。通过按键控制实验来介绍下 IO 口作为输入的使用。本例中用到了GPIOE的PE3管脚。 LED和按键的电路图。 按键 K_LEFT、K_DOWN、K_RIGHT 分别连接在 STM32 F1 芯片 的 PE2、PE3、PE4引脚上。 按键另一端是全部接在 GND 上,这个和我们学习 51单片机 是一样的,采用独立式按键接法,按下时输入到芯片管脚即为低电平。 整个程序实现的流程步骤如下: 初始化按键使用的 端口 及 时钟 按键 检测 处理 按键控制处理 工程文件目录如下。 IO口初始化程序代码在key.c文件中。 /**********
[单片机]
<font color='red'>STM32</font>按键控制LED的亮灭
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved