历史上的今天

今天是:2024年08月29日(星期四)

正在发生

2019年08月29日 | STM32F429 >> 7. 中断

发布者:幸福的时光 来源: eefocus关键字:STM32F429  中断  NVIC  EXTI 手机看文章 扫描二维码
随时随地手机看文章

本工程板级支持包文件适用于野火stm32f429 开发板。

STM32 的中断主要涉及两个部分,NVIC 和EXTI


NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能;外部中断/事件控制器(EXTI)可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。


EXTI 可分为两大功能:产生中断 和 产生事件


当其产生中断时,其中断线路将输入信号输入到NVIC,进一步运行中断服务函数,实现功能(其输出最终被映射到NVIC的相应通道。);而当其产生事件时,则是传输一个脉冲信号给其他外设使用

在这里插入图片描述

EXTI 是在APB2 总线上的


在这里插入图片描述

EXTI0 至 EXTI15 用于 GPIO,通过编程控制可以实现任意一个 GPIO 作为 EXTI的输

入源。


编程要点

配置NVIC

a. 设置优先级组

b. 配置 NVIC_InitStructure

c. 使能 NVIC

配置EXTI

a. 开启 EXTI 时钟

b. 连接 EXTI 到中断源

c. 配置 EXTI 初始化结构体

d. 使能 EXTI

编写EXTI 中断服务函数

bsp_exti.c

NVIC_Init() 函数在misc.c 中


/**

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

  * @file    bsp_exti.c

  * @author  Waao

  * @version V1.0.0

  * @date    21-Dec-2018

  * @brief   This file contains some board support package's functions for the configuration of the NVIC.

  *            

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

  * @attention

  *

  * None

  *

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

  */



#include

#include

#include


/**

  * @brief  Configure the NVIC

  * @param  None

  * @retval None

  */

static void NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

//Configure the NVIC to prioritygroup1

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

//Configure the preemption priority to 1

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

//Configure the subpriority to 1

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

//Enable the interrupt channel

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

//Configure the interrupt channel

NVIC_InitStructure.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ;

NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = KEY2_INT_EXTI_IRQ;

NVIC_Init(&NVIC_InitStructure);

}



/**

  * @brief  Configure the EXTI

  * @param  None

  * @retval None

  */

void EXTI_Key_Config(void)

{

EXTI_InitTypeDef EXTI_InitStructure;

KEY_GPIO_Config();

LED_GPIO_Config();

//Enable the clock of the SYSCFG(must do that when use the GPIO external interrupt)

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

NVIC_Configuration();

//Connect the exti interrupt source to key1 pin 

SYSCFG_EXTILineConfig(KEY1_INT_EXTI_PORTSOURCE, KEY1_INT_EXTI_PINSOURCE);

//Choice the exti interrupt source

EXTI_InitStructure.EXTI_Line = KEY1_INT_EXTI_LINE;

//Choice the mode

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

//Choice the trigger type

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

//Enable

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

//Connect the exti interrupt source to key1 pin 

SYSCFG_EXTILineConfig(KEY2_INT_EXTI_PORTSOURCE, KEY2_INT_EXTI_PINSOURCE);

EXTI_InitStructure.EXTI_Line = KEY2_INT_EXTI_LINE;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

}


bsp_exti.h

/**

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

  * @file    bsp_exti.h

  * @author  Waao

  * @version V1.0.0

  * @date    21-Dec-2018

  * @brief   This file contains some board support package's definition for the exti.

  *            

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

  * @attention

  *

  * None

  *

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

  */

#ifndef __EXTI_H_

#define __EXTI_H_


#include



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

#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

//The EXTI_Line number must be consistent with the GPIO_Pin number

#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


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


static void NVIC_Configuration(void);

void EXTI_Key_Config(void);


#endif


中断线须与端口号一致


stm32f4xx_it.c

部分代码,其余部分不需修改:


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

/*                 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).                         */

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


/**

  * @brief  Turn the status of the led2 when we trigger the exti0

  * @param  None

  * @retval None

  */

void KEY1_IRQHandler(void)

{

LED2_TOGGLE;

EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);

}


/**

  * @brief  Turn the status of the led3 when we trigger the exti13

  * @param  None

  * @retval None

  */

void KEY2_IRQHandler(void)

{

LED3_TOGGLE;

EXTI_ClearITPendingBit(KEY2_INT_EXTI_LINE);

}


中断服务函数在stm32f4xx_it.c 中进行构建

中断服务函数的名称必须与启动文件当中给出的一致

中断服务函数中任务执行完必须清除中断标志


关键字:STM32F429  中断  NVIC  EXTI 引用地址:STM32F429 >> 7. 中断

上一篇:STM32F429 >> 6. RCC-使用HSE, HSI 配置时钟
下一篇:STM32F429 >> 8. 系统定时器

推荐阅读

   早在Galaxy S8时代就有传言称该机将支持屏下指纹识别,但最终都未成真。三星最终可能会在明年推出的Galaxy S10上搭载该技术,现在有业内人士称,将有三款三星S10型号,并且将使用两种不同的指纹识别技术。  据报道,三星已与高通公司合作,在两款高端S10型号中使用超声波指纹识别器,而第三款机型将使用光学指纹识别器(目前很多手机中使用的类...
本工程板级支持包文件适用于野火stm32f429 开发板。编程要点开启HSE/HSI,并等待HSE/HSI 稳定设置AHB, APB2, APB1 的预分频因子设置PLL 的时钟来源,设置VCO 输入时钟分频因子PLL_M,设置VCO 输出时钟倍频因子PLL_N,设置PLLCLK 时钟分频因子PLL_P,设置OTGFS, SDIO, RNG 时钟分频因子PLL_Q开启PLL,并等待PLL 稳定把PLLCLK 切换为系统时钟S...
外媒 AndroidCentral 今日爆料了一加又一款中端机型 “三叶草”(Clover)的部分信息。  据报道,该手机采用一块 6.52 英寸的 720P+ (1560 x 720)IPS LCD 屏,搭载高通骁龙 460 芯片,拥有 4GB 的运存和 64GB 的存储空间,配备 6000mAh 电池,支持 18W 快充,采用后置指纹识别,拥有一个 3.5mm 耳机孔。  其他方面...
今日,荣耀手机官方公布了最新宣传片,称“全新配色荣耀密码,周一见”。  目前,荣耀 50 系列拥有初雪水晶、亮黑色、墨玉青、夏日琥珀等配色。荣耀表示,新配色带来了“色彩与线条的灵感碰撞,尽显时尚的艺术张力”。  IT之家了解到,荣耀 50 和 50 Pro 手机搭载骁龙 778G 处理器,采用 10 亿色超曲屏,内置 4000mAh 电池。其...

史海拾趣

问答坊 | AI 解惑

RS232转换RS485后能不能多设备组成RS485网络

大家好,想做一个设备用单片机和多个条码扫描器通讯,但是单片机和条码扫描器只有一个串口(232)不能组成一对多的网络,所以想问一下,能不能用RS232toRS485转换器转换以后将单片机与多条码扫描器组成一个RS485网络. …

查看全部问答∨

中国嵌入式系统产业联盟征集个人会员单位邀请函

    中国嵌入式系统产业联盟(简称:中嵌联盟)是由从事嵌入式系统研发生产、教育培训、咨询服务等相关业务的企事业单位自发成立的非独立法人社团组织。中嵌联盟以推动联盟企业迅速扩大规模,加快产业发展为目标,从而促进我国嵌入式系统 ...…

查看全部问答∨

vxworks中如何实现文件解压缩

我想将几个文件进行打包后下载到板子,然后进行解压缩,但不知道怎么做?各位可曾这样做过? …

查看全部问答∨

请问x264移植到arm7平台上怎么实现和优化,大致过程如何?(十万火急)

大家救救命吧,这个问题都困扰我好多天了,一直都没法解决,若是分还不够的话,在继续加昂…

查看全部问答∨

ucos开发软件问题

看完卲贝贝ucos经典教程后 想实践一下 但是用bc4.5 很不好用 第一没有用过 第二 很不方便 功能少 没什么快捷键 所以想问问各位兄弟 vc6.0或者borland c++ builder 是否一样可以编译连接?? 有什么好开发环境介绍一下??…

查看全部问答∨

想玩2500模块的可以看一下 这个是TI的列子 我之前测试CC2500模块用过

TI的列子 可以用 无线的东西不好搞 我调了很久才能收发 共享给大家…

查看全部问答∨

用心讨教问题,看了不要路过呀,进来看看

用心讨教问题,看了不要路过呀,进来看看#include <reg52.h>#define uchar unsigned char#define uint unsigned intuchar segment[]={0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x89,0xc7};  //数码管的段选uchar display_ ...…

查看全部问答∨

易电源试用贴01

本来计划上个礼拜熟悉数据手册等相关理论的,耽搁到这个礼拜才发出来。 易电源芯片:LMZ10504 概述:LMZ10504 SIMPLE SWITCHER 电源模块是一种全方位、易于使用的直流/直流解决方案,可提供高达4A的负载电流并且具有极为出色的电源转换效率、输 ...…

查看全部问答∨

H.264视频编码基本知识

一、 视频编码技术的发展历程   视频编码技术基本是由ISO/IEC制定的MPEG-x和ITU-T制定的H.26x两大系列视频编码国际标准的推出。从H.261视频编码建议,到H.262/3、MPEG-1/2/4等都有一个共同的不断追求的目标,即在尽可能低的码率(或存储容量)下 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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