历史上的今天

今天是: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. 系统定时器

推荐阅读

人才和专注才是机器人企业发展的关键机器人行业发展最核心的关键点是人才。与其他传统行业不同,机器人是依靠研发积累和科技创新才能取胜的行业,所以人才是根本。北京航空航天大学教授王田苗说:“这方面美国做的非常好,我国目前也非常重视,已经出台了相关人才的政策。”根据工信部发展规划,到2020年,全国工业机器人装机量将达到100万台,工业机器人...
在2019中国国际智能产业博览会上,记者对4位行业人士进行了专访,他们分别对物联网、5G和传感器在中国的发展前景发表了自己的观点。 吴朋—做好仪器仪表行业里的排头兵 重庆川仪自动化股份有限公司(以下简称“川仪股份”)设立于1999年11月,其前身是1965年从上海、江苏、辽宁等地内迁重庆的四川热工仪表总厂,是上世纪六十年代国家重点布局的三大仪器仪...
外媒一份新的报告称,越来越多的因素表明苹果将 Siri 搜索结果和 Spotlight 搜索进一步扩大,该公司可能正在开发通用搜索引擎。苹果已经有一个用于 Spotlight 搜索和 Siri 的搜索引擎。但是,如果新的报告是准确的,则苹果可能正在寻求放弃谷歌成为 iPhone 的默认搜索引擎,并推出自己的完整搜索引擎。Coywolf 的 Jon Henshaw 在周四早上提...
今天,微软宣布为Beta渠道的内部人员提供新的Windows 11更新。在更新的同时,微软还发布了几项公告,以提供围绕Windows 11的一些人们关注的细节。首先,该公司没有对Windows 11的系统要求作出太多改变。其次,该公司已将一些第七代英特尔处理器添加到支持的处理器列表中。不幸的是,旧的AMD处理器依然不被支持。  幸运的是,微软为那些想把...

史海拾趣

问答坊 | AI 解惑

常见画图制版工具比较

早期的EDA企业有1000多家,后来发展到10家左右,其中Cadence,Mentor,Zuken主要是高端产品,他们的软件要求在工作站上运行,操作系统都是unix,而且价格昂贵。而protel,powerPCB他们主要面向低端用户,对计算机的配置要求不高,一般在windows下运行。 ...…

查看全部问答∨

齐纳二极管原理特性

齐纳二极管原理特性…

查看全部问答∨

按下16个矩阵键盘依次在数码管上显示1-16的平方。

按下16个矩阵键盘依次在数码管上显示1-16的平方。如按下第一个显示1,第二个显示4... 我写了第3行的检测,就是说:按键按下的话 ,会显示:16   25  36   49: 但是我在实验板上运行的时候,高位的数字只会闪一下 ...…

查看全部问答∨

大虾们,能推荐几个不错的嵌入式论坛吗?

如题~ 因为我要做毕业设计了,我的毕业设计是ARM9+uClinux,…

查看全部问答∨

Hp2490如何打开无线网卡,连接指定SSID,最好用C#完成,谢谢

Hp2490如何打开无线网卡,连接指定SSID,最好用C#完成,例如,我们办公室有N个无线网络,我想通过程序控制连接其中指定一个网络。…

查看全部问答∨

嵌入式主板介绍

嵌入式主板一般理解为嵌入在设备里面做控制、数据处理使用的CPU板,也就是设备的“大脑”。嵌入式到设备里面,当然就会对主板的体积以及功耗(嵌入式主板的散热问题)有比较严格的要求。所以一般来讲嵌入式主板会具备 尺寸小、高集成度、低功耗等特 ...…

查看全部问答∨

红外鼠标控制.

 红外鼠标控制. 红外鼠标控制. 红外鼠标控制.…

查看全部问答∨

基于MSP430F2013的超低功耗运动检测

基于MSP430F2013的超低功耗运动检测方案…

查看全部问答∨

点阵出了点问题,图像有

今天看了下点阵的教程,自己跑去搞了下 ,结果弄是弄出来,可就是每次图像移动前都会红一团  这是电路图还有代码,大大帮忙看看#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;sbi ...…

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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