历史上的今天
今天是: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
上一篇:多外部中断的优先级配置
史海拾趣
|
做芯片这行好几年,各种技术会议也参加了不少,只是飞思卡尔的技术论坛还没有去过。一直想参加,毕竟属于行业的老大啊!可是哪有那么容易! 今年的飞思卡尔大学生智能车赛开办了一个博客大赛,参与投票的工程师就有机会参加技术论坛。赶紧去投 ...… 查看全部问答> |
|
四川省大学生电子设计竞赛西南科技大学赛区竞赛题目-远程温湿度测量系统 本帖最后由 paulhyde 于 2014-9-15 04:20 编辑 电子竞赛题目-远程温湿度测量系统 一、电子竞赛题目任务: 制作一个远程温湿度测量仪,该测试仪具有温湿度测量和远程显示等功能。其结构框图如下: 二、电子竞赛题目要求: 1、基本要求 ( ...… 查看全部问答> |
|
关于AGC(Automatic Gain Control)和ADC “100分哦” 请教各位达人,我想找一款内置AGC功能的ADC,ADC最好为12bit,20MSPS 我网络上找了一些资料都没有发现有这样的ADC,许多电路都是内置模拟AGC再加一个ADC来实现的 谁能告诉我有没有这样的ADC啊?有的话提供型号,最好能有PDF文档,立即送100分… 查看全部问答> |
|
C167CR是汽车电子行业应用比较广泛的一种单片机,我正在做相关项目,在这里介绍一下其存储器及外部总线,和大家分享。 (第四点是针对评估板kitCCON-167评估板所作的相关寄存器配置) 1.最大寻址空间是16M 2.片内存储器 &nb ...… 查看全部问答> |
|
因工作繁忙,本人现转让一全新的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 ...… 查看全部问答> |




