历史上的今天
返回首页

历史上的今天

今天是:2025年04月22日(星期二)

正在发生

2019年04月22日 | STM32学习14:EXTI(外部中断事件控制器)

2019-04-22 来源: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

推荐阅读

史海拾趣

Ericsson Power Modules公司的发展小趣事

在追求经济效益的同时,Ericsson Power Modules也注重环保和可持续发展。公司积极采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。此外,Ericsson Power Modules还积极参与环保公益活动,推动电子行业的绿色发展。这种环保意识和行动体现了Ericsson Power Modules对社会的责任感和对可持续发展的承诺。

Gigavac LLC公司的发展小趣事

在追求经济效益的同时,Ericsson Power Modules也注重环保和可持续发展。公司积极采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。此外,Ericsson Power Modules还积极参与环保公益活动,推动电子行业的绿色发展。这种环保意识和行动体现了Ericsson Power Modules对社会的责任感和对可持续发展的承诺。

Chip Supply Micro Devices公司的发展小趣事

随着市场竞争的加剧,Chip Supply Micro Devices意识到成本控制的重要性。公司开始着手优化供应链管理,通过引入先进的生产管理系统和自动化设备,提高了生产效率,降低了生产成本。同时,公司还与供应商建立了长期稳定的合作关系,确保了原材料的稳定供应和优质品质。这些措施使得Chip Supply Micro Devices在价格上具备了竞争优势,进一步提升了市场份额。

Golledge Electronics公司的发展小趣事

在微电子器件领域,Chip Supply Micro Devices凭借一项创新技术,成功打破了市场格局。公司研发出了一种新型低功耗芯片,不仅提高了电子设备的性能,还降低了能源消耗。这一技术突破使得Chip Supply Micro Devices迅速获得了市场的认可,产品销量激增。公司借此机会扩大生产规模,加大研发投入,进一步巩固了其在微电子器件市场的地位。

AntennaHome公司的发展小趣事

为了进一步提升品牌影响力和市场知名度,AntennaHome公司积极参与国际电子行业的各大展会。在展会上,公司展示了最新的天线技术和产品,吸引了众多国内外客户的关注。通过与客户的深入交流,公司不仅收获了宝贵的市场信息和合作机会,还进一步提升了品牌在行业内的地位。

Anaheim Automation公司的发展小趣事

2005年,AMOTECH被Deloitte评为“亚太技术500强”,这进一步提升了公司在国际上的知名度和影响力。同年,公司还获得了ISO14001认证,这体现了公司对环境保护的重视和承诺。随着业务的不断拓展,AMOTECH在2006年和2008年分别建立了青岛办公室和韩国第四工厂,进一步提升了公司的产能和效率。

问答坊 | AI 解惑

早就想参加飞思卡尔技术论坛,这次终于有机会了

做芯片这行好几年,各种技术会议也参加了不少,只是飞思卡尔的技术论坛还没有去过。一直想参加,毕竟属于行业的老大啊!可是哪有那么容易! 今年的飞思卡尔大学生智能车赛开办了一个博客大赛,参与投票的工程师就有机会参加技术论坛。赶紧去投 ...…

查看全部问答>

四川省大学生电子设计竞赛西南科技大学赛区竞赛题目-远程温湿度测量系统

本帖最后由 paulhyde 于 2014-9-15 04:20 编辑 电子竞赛题目-远程温湿度测量系统 一、电子竞赛题目任务: 制作一个远程温湿度测量仪,该测试仪具有温湿度测量和远程显示等功能。其结构框图如下: 二、电子竞赛题目要求: 1、基本要求 ( ...…

查看全部问答>

PB编译项疑问??

请问大家这个PB的编译选择项有什么不同么?之前我编译的时候,修改了一点就要重新编译,一等就是一个小时。我在网上找到一个快速编译的方法,可是这好像只是针对修改了的驱动而言。 所以我有几个疑问,还望大家能帮我解答。 如果我只是增加驱动, ...…

查看全部问答>

关于AGC(Automatic Gain Control)和ADC “100分哦”

请教各位达人,我想找一款内置AGC功能的ADC,ADC最好为12bit,20MSPS 我网络上找了一些资料都没有发现有这样的ADC,许多电路都是内置模拟AGC再加一个ADC来实现的 谁能告诉我有没有这样的ADC啊?有的话提供型号,最好能有PDF文档,立即送100分…

查看全部问答>

modem怎样判断来电是电话还是传真呢

发现不管是电话还是传真 modem收到的都只是RING... 怎样判断到底是电话还是传真呢 谢谢。。…

查看全部问答>

c167CR存储器介绍

C167CR是汽车电子行业应用比较广泛的一种单片机,我正在做相关项目,在这里介绍一下其存储器及外部总线,和大家分享。 (第四点是针对评估板kitCCON-167评估板所作的相关寄存器配置) 1.最大寻址空间是16M 2.片内存储器     &nb ...…

查看全部问答>

转让全新的ARM开发板

因工作繁忙,本人现转让一全新的ARM7开发板:EasyARM2131开发平台 地点:上海市闵行区 电话:13681848395 清单如下: 1.EasyARM2131开发实验板 1 台 2.EasyJTAG-H 1 只 3.SD CARD PACK 1 块 4.杜邦-1P测试线 9 条 5.20P仿真电缆 1 条 6.R ...…

查看全部问答>

STM32的USB2.0的速度可以到多少?12Mor480M?

手册上说: USB 2.0 full speed interface但是文件又说:The STM32F103xC, STM32F103xD and STM32F103xE performance line embed a USBdevice peripheral c ...…

查看全部问答>

运放稳定性

运算放大器的稳定性设计,中文材料,不太清楚在这个论坛里有没有人上传过,要是没有会陆续更新。谢谢~~ 第一部分:环路稳定性基础 第二部分:运放网络、SPICE分析…

查看全部问答>

重油椭圆齿轮流量计

重油椭圆齿轮流量计是一种容积式流量计,测量原理是液体在流量计种流动,在进出口两端会形成差压,在流量计种的椭圆齿轮在轴上不停的旋转,齿轮间的空隙将充满液体,液体随齿轮的旋转被排出,齿轮的转数和流量值成正比关系,测出椭圆齿轮的转数即 ...…

查看全部问答>