历史上的今天
返回首页

历史上的今天

今天是:2025年03月01日(星期六)

2020年03月01日 | STM32学习14:EXTI(外部中断事件控制器)

2020-03-01 来源:eefocus

EXTI管理了控制器的23个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。

编程思路:

1、配置NVIC。初始化NVIC(实现过程:先初始化NVIC结构体,再写NVICInit()函数)。


2、配置按键中断。在这个函数中,因为我们要使用IO口作为中断输入, 所以第一步我们要使能相应的IO时钟。(因为GPIO 和中断线映射关系是在寄存器 SYSCFG_EXTICR1~ SYSCFG_EXTICR4 中配置的。所以我们要配置外部中断,还需要打开 SYSCFG 时钟。)第二步,初始化相应GPIO(实现过程:先初始化GPIO结构体,再写GPIOinit()函数)。第三步,使用SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex)函数将相应的GPIO引脚连接到EXTI中断源上。


注意:中断源(NVIC_IRQChannel的名字需是f4xx.h文件内中断源的名字,而中断服务函数的名字,需是在.s的启动文件中的中断服务函数的名字。)


哎,就引导这么多了,贴上程序,具体流程程序中可以体现。


/**

  ******************************************************************************

  * @file    main.c

  * @author  fire

  * @version V1.0

  * @date    2015-xx-xx

  * @brief   使用外部中断EXTI检测按键,控制彩灯。

  ******************************************************************************

  * @attention

  *

  * 实验平台:秉火  STM32 F429 开发板 

  * 论坛    :http://www.firebbs.cn

  * 淘宝    :http://firestm32.taobao.com

  *

  ******************************************************************************

  */

  

#include "stm32f4xx.h"

#include "./led/bsp_led.h"

#include "./key/bsp_exti.h"

 

void Delay(__IO u32 nCount); 

 

/**

  * @brief  主函数

  * @param  无

  * @retval 无

  */

int main(void)

{

/* LED 端口初始化 */

LED_GPIO_Config();

 

/* 初始化EXTI中断,按下按键会触发中断,

  *  触发中断会进入stm32f4xx_it.c文件中的函数

*  KEY1_IRQHandler和KEY2_IRQHandler,处理中断,反转LED灯。

*/

EXTI_Key_Config(); 

/* 等待中断,由于使用中断方式,CPU不用轮询按键 */

while(1)                            

{

}

}

 

 

 

/*********************************************END OF FILE**********************/

#ifndef __EXTI_H

#define __EXTI_H

 

#include "stm32f4xx.h"

 

//引脚定义

/*******************************************************/

#define KEY1_INT_GPIO_PORT                GPIOA

#define KEY1_INT_GPIO_CLK                 RCC_AHB1Periph_GPIOA

#define KEY1_INT_GPIO_PIN                 GPIO_Pin_0

#define KEY1_INT_EXTI_PORTSOURCE          EXTI_PortSourceGPIOA

#define KEY1_INT_EXTI_PINSOURCE           EXTI_PinSource0

#define KEY1_INT_EXTI_LINE                EXTI_Line0

#define KEY1_INT_EXTI_IRQ                 EXTI0_IRQn

 

#define KEY1_IRQHandler                   EXTI0_IRQHandler

 

#define KEY2_INT_GPIO_PORT                GPIOC

#define KEY2_INT_GPIO_CLK                 RCC_AHB1Periph_GPIOC

#define KEY2_INT_GPIO_PIN                 GPIO_Pin_13

#define KEY2_INT_EXTI_PORTSOURCE          EXTI_PortSourceGPIOC

#define KEY2_INT_EXTI_PINSOURCE           EXTI_PinSource13

#define KEY2_INT_EXTI_LINE                EXTI_Line13

#define KEY2_INT_EXTI_IRQ                 EXTI15_10_IRQn

 

#define KEY2_IRQHandler                   EXTI15_10_IRQHandler

 

/*******************************************************/

 

 

void EXTI_Key_Config(void);

 

#endif /* __EXTI_H */

 


/**

  ******************************************************************************

  * @file    Project/STM32F4xx_StdPeriph_Templates/stm32f4xx_it.c 

  * @author  MCD Application Team

  * @version V1.5.0

  * @date    06-March-2015

  * @brief   Main Interrupt Service Routines.

  *          This file provides template for all exceptions handler and 

  *          peripherals interrupt service routine.

  ******************************************************************************

  * @attention

  *

  *

© COPYRIGHT 2015 STMicroelectronics

  *

  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");

  * You may not use this file except in compliance with the License.

  * You may obtain a copy of the License at:

  *

  *        http://www.st.com/software_license_agreement_liberty_v2

  *

  * Unless required by applicable law or agreed to in writing, software 

  * distributed under the License is distributed on an "AS IS" BASIS, 

  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  * See the License for the specific language governing permissions and

  * limitations under the License.

  *

  ******************************************************************************

  */

 

/* Includes ------------------------------------------------------------------*/

#include "stm32f4xx_it.h"

#include "./led/bsp_led.h"

#include "./key/bsp_exti.h"

 

/** @addtogroup STM32F429I_DISCOVERY_Examples

  * @{

  */

 

/** @addtogroup FMC_SDRAM

  * @{

  */ 

 

/* Private typedef -----------------------------------------------------------*/

/* Private define ------------------------------------------------------------*/

/* Private macro -------------------------------------------------------------*/

/* Private variables ---------------------------------------------------------*/

/* Private function prototypes -----------------------------------------------*/

/* Private functions ---------------------------------------------------------*/

 

/******************************************************************************/

/*            Cortex-M4 Processor Exceptions Handlers                         */

/******************************************************************************/

 

/**

  * @brief  This function handles NMI exception.

  * @param  None

  * @retval None

  */

void NMI_Handler(void)

{

}

 

/**

  * @brief  This function handles Hard Fault exception.

  * @param  None

  * @retval None

  */

void HardFault_Handler(void)

{

  /* Go to infinite loop when Hard Fault exception occurs */

  while (1)

  {}

}

 

/**

  * @brief  This function handles Memory Manage exception.

  * @param  None

  * @retval None

  */

void MemManage_Handler(void)

{

  /* Go to infinite loop when Memory Manage exception occurs */

  while (1)

  {}

}

 

/**

  * @brief  This function handles Bus Fault exception.

  * @param  None

  * @retval None

  */

void BusFault_Handler(void)

{

  /* Go to infinite loop when Bus Fault exception occurs */

  while (1)

  {}

}

 

/**

  * @brief  This function handles Usage Fault exception.

  * @param  None

  * @retval None

  */

void UsageFault_Handler(void)

{

  /* Go to infinite loop when Usage Fault exception occurs */

  while (1)

  {}

}

 

/**

  * @brief  This function handles Debug Monitor exception.

  * @param  None

  * @retval None

  */

void DebugMon_Handler(void)

{}

 

/**

  * @brief  This function handles SVCall exception.

  * @param  None

  * @retval None

  */

void SVC_Handler(void)

{}

 

/**

  * @brief  This function handles PendSV_Handler exception.

  * @param  None

  * @retval None

  */

void PendSV_Handler(void)

{}

 

/**

  * @brief  This function handles SysTick Handler.

  * @param  None

  * @retval None

  */

void SysTick_Handler(void)

{}

 

/******************************************************************************/

/*                 STM32F4xx Peripherals Interrupt Handlers                   */

/*  Add here the Interrupt Handler for the used peripheral(s) (PPP), for the  */

/*  available peripheral interrupt handler's name please refer to the startup */

/*  file (startup_stm32f429_439xx.s).                         */

/******************************************************************************/

 

/**

  * @}

  */ 

void KEY1_IRQHandler(void)

{

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

if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET) 

{

// LED1 取反

LED1_TOGGLE;

    //清除中断标志位

EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);     

}  

}

 

void KEY2_IRQHandler(void)

{

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

if(EXTI_GetITStatus(KEY2_INT_EXTI_LINE) != RESET) 

{

// LED2 取反

LED2_TOGGLE;

    //清除中断标志位

EXTI_ClearITPendingBit(KEY2_INT_EXTI_LINE);     

}  

}

/**

  * @}

  */ 

 

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

 


#ifndef __EXTI_H

#define __EXTI_H

 

#include "stm32f4xx.h"

 

//引脚定义

/*******************************************************/

#define KEY1_INT_GPIO_PORT                GPIOA

#define KEY1_INT_GPIO_CLK                 RCC_AHB1Periph_GPIOA

#define KEY1_INT_GPIO_PIN                 GPIO_Pin_0

#define KEY1_INT_EXTI_PORTSOURCE          EXTI_PortSourceGPIOA

#define KEY1_INT_EXTI_PINSOURCE           EXTI_PinSource0

推荐阅读

史海拾趣

General Microcircuits Corp公司的发展小趣事
根据所需的信号频率和增益来选择具有足够GBW的运算放大器。
Allegro公司的发展小趣事
选择低噪声的运算放大器,以提高系统的信噪比。
展恒电子(Broadic)公司的发展小趣事

展恒电子始终坚持以品质为核心,严格把控产品质量。在与上海芯北电子科技有限公司的合作中,双方共同保证产品品质的一致性、兼容性和安全性。在合作期间,展恒电子成功向客户供应了数百万片芯片,并得到了客户的高度认可和信任。这种对品质的坚持和追求,使得展恒电子在电子行业中赢得了良好的声誉,也为公司的长期发展奠定了坚实的基础。

这五个故事从不同角度展示了展恒电子(Broadic)在电子行业中的发展历程和成就,体现了其在技术创新、市场拓展、品质保证等方面的实力和努力。通过不断努力和创新,展恒电子已经在电子行业中取得了显著的成果,并将继续为行业的发展贡献自己的力量。

AZM [Arizona Microtek, Inc]公司的发展小趣事

AZM公司成立于电子行业的蓬勃发展时期,创始人凭借对微电子技术的深刻理解和敏锐的市场洞察力,决定投身于这一领域。创业初期,公司面临着资金短缺、技术瓶颈和市场认可度低等多重挑战。然而,创始人凭借坚定的信念和不懈的努力,带领团队攻克了一个又一个技术难题,成功研发出了具有竞争力的微电子产品,并逐渐在市场上获得了认可。

Hind Rectifiers Ltd公司的发展小趣事

随着电子行业的快速发展,AZM公司意识到只有不断创新才能在激烈的市场竞争中立于不败之地。因此,公司加大了对研发的投入,积极引进高端人才,建立了完善的研发体系。通过持续的技术创新,AZM公司成功推出了一系列具有领先水平的微电子产品,不仅提升了公司的市场竞争力,也为整个电子行业的发展做出了贡献。

CSB公司的发展小趣事

CSB公司深知人才是企业发展的核心竞争力。因此,公司一直注重人才培养和团队建设。通过建立完善的培训体系、提供丰富的职业发展机会、营造积极向上的企业文化等方式,CSB公司吸引了一批批优秀的人才加入。这些人才为公司的发展注入了新的活力,推动了公司在技术、市场、管理等方面的不断进步。

问答坊 | AI 解惑

DSP算法大全C语言版本

DSP算法大全C语言版本…

查看全部问答>

proteus介绍

本帖最后由 paulhyde 于 2014-9-15 09:04 编辑 学习proteus软件的,可以看一下。  …

查看全部问答>

EEW-DSO-V2.00设计思路

这段时间一直和网友东哥在讨论第二版的设计,大概确定了一下,下个版本的设计方案,采样芯片应该会换成ADC08100,最高100M采样,用两片IS61LV25616-10+CPLD来做FIFO,两片轮流寸,实现100M的读写速度.存储深度比上次用了很大的升级,CPU换成带外部总线的STM ...…

查看全部问答>

USB 2.0 规范

USB 2.0 规范 USB 是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据,最高速度 可达480Mb/S。USB 支持“总线供电”和“自供电”两种供电模式。在总线供电模式下, 设备最多可以获得500mA 的电流。USB2.0 被设计成为向下兼容的模式 ...…

查看全部问答>

请各位分析这样跳槽可以吗?

目前在公司担任研发主管,负责研发部门资源团队,个人觉的资源团队搞起来没啥意思,而且本人在资源团队搞了10年了。现在想需求更大发展。准备跳槽到另一家民营公司担任研发中心下一个研发一部担任部长,负责整个研发部门的工作。我想这样对这样生涯 ...…

查看全部问答>

请问tilt wheel mouse中的WM_MOUSEHWHEEL消息如何在Win200/XP DDK中实现呀?

在Vista中,有mouse消息WM_MOUSEHWHEEL,而在2000/XP中则没有,我想写个mousefilter在2000/XP下来支持该功能,我该如何做呢?在MouseServiceCallback()当中做吗?我看在MOUSE_INPUT_DATA结构中不知怎样才能实现.…

查看全部问答>

酬金500元,北京,请教51单片机的TCP/IP问题

本人在北京,现有一块杭州晶控电子的51NET以太网开发板,开发板介绍:http://www.hificat.com/net/net.asp,想请教一下附带光盘里的单片机源码,(源码已上传,在附件里)。 内容:讲解源码,源码我没仔细看过,是单片机和PC通信的内容,应该是TCP ...…

查看全部问答>

变频器已运行就产生很大的干扰

我是做工控软件的,最近遇到一个让人恼火的问题,我们设备上采用了台安的变频器,我在用串口调试器调试通信时,当变频器运行起来时,一打开串口就有大量的乱码传过来,很是痛苦!!! 什么接地、加电容都试了,,没有解决,,请问各位达人有何高招 ...…

查看全部问答>

gps记录器进度:已能够将主要的数据写入sd卡

已上传工程文件。这个程序会在写入三十行数据都自动停止,以便将书库卡拔出读取,利用库写入sd卡是很简单的…

查看全部问答>