STM32基于标准外设库的外部中断配置

发布者:EnchantingEyes最新更新时间:2024-08-09 来源: elecfans关键字:STM32  标准外设库  外部中断配置 手机看文章 扫描二维码
随时随地手机看文章

本文介绍了STM32基于标准外设库的外部中断配置,以及基于参考手册如何更加寄存器配置外部中断


2 STM32的外部中断

下图来自《STM32参考手册》,从整个架构图可以知道,外部中断的功能可以配置六个寄存器;

中断屏蔽寄存器(EXTI_IMR)

事件屏蔽寄存器(EXTI_EMR)

上升沿触发选择寄存器(EXTI_RTSR)

下降沿触发选择寄存器(EXTI_FTSR)

软件中断事件寄存器(EXTI_SWIER)

挂起寄存器(EXTI_PR)

0e286cee-7946-11ee-939d-92fbcf53809c.png?imageView2/2/w/1000

EXTI支持配置20个中断和事件屏蔽位;

GPIO端口以下图的方式连接到16个外部中断/事件线上;EXTI_Line0 — EXTI_Line15;

EXTI_Line16 连接到PVD输出 ;

EXTI_Line17连接到RTC闹钟事件;

EXTI_Line18连接到USB唤醒事件;

EXTI_Line19连接到以太网唤醒事件(只适用于互联型产品);

GPIO的映射关系图如下所示;

0e4be57a-7946-11ee-939d-92fbcf53809c.png?imageView2/2/w/1000

3 中断服务函数的映射关系

0e67e4b4-7946-11ee-939d-92fbcf53809c.png?imageView2/2/w/1000

4 外部中断的配置

宏定义,抽象一下接口,方便后面修改;

#define Z_GPIO_PIN GPIO_Pin_5

#define Z_GPIO_PORT GPIOE

#define Z_PortSource GPIO_PortSourceGPIOE

#define Z_PinSource GPIO_PinSource5

#define Z_Line EXTI_Line5

#define Z_IRQ EXTI9_5_IRQn

GPIO的配置;这里GPIO的输入模式可以配置为浮空输入(GPIO_Mode_IN_FLOATING),上拉输入(GPIO_Mode_IPU)或者下拉输入(GPIO_Mode_IPD),具体如下图所示;

0e8caace-7946-11ee-939d-92fbcf53809c.png?imageView2/2/w/1000

GPIO的配置代码如下;

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_StructInit(&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = Z_GPIO_PIN;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(Z_GPIO_PORT, &GPIO_InitStructure);

不要忘记外设总线时钟的配置;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |

RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF |

RCC_APB2Periph_GPIOG, ENABLE);

EXTI的配置,EXTI_Trigger这里支持三种模式;

EXTI_Trigger_Rising 上升沿触发;

EXTI_Trigger_Falling 下降沿触发;

EXTI_Trigger_Rising_Falling 上升沿和下降沿都可以触发;

GPIO_EXTILineConfig(Z_PortSource, Z_PinSource);

EXTI_InitStructure.EXTI_Line = Z_Line;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

NVIC的配置

NVIC_InitStructure.NVIC_IRQChannel = Z_IRQ;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

中断服务函数

void EXTI9_5_IRQHandler(void)

{

//中断服务函数

}

以上就完成了检测下降沿信号的GPIOE5的外部中断;

也参考官方DEMO,

STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_ExamplesEXTIEXTI_Config。

5 寄存器的操作

以下摘自**《STM32参考手册》**

产生产生中断的步骤,必须先配置好并使能中断线。根据需要的边沿检测设置2个触发寄存器,同时在**中断屏蔽寄存器(EXTI_IMR)的相应位写1允许中断请求。当外部中断线上发生了期待的边沿时,将产生一个中断请求,对应的挂起位也随之被置1。在挂起寄存器(EXTI_PR)的对应位写1,将清除该中断请求。

产生事件的步骤:必须先配置好并使能事件线。根据需要的边沿检测通过设置2个触发寄存器,同时在中断屏蔽寄存器(EXTI_IMR)**的相应位写1允许事件请求。当事件线上发生了需要的边沿时,将产生一个事件请求脉冲,对应的挂起位不被置1。通过在软件中断/事件寄存器写1,也可以通过软件产生中断/事件请求。

中断屏蔽寄存器(EXTI_IMR)

事件屏蔽寄存器(EXTI_EMR)

上升沿触发选择寄存器(EXTI_RTSR)

下降沿触发选择寄存器(EXTI_FTSR)

软件中断事件寄存器(EXTI_SWIER)

挂起寄存器(EXTI_PR)

IMR如下图所示,其他几个类似;

0ea6c7ec-7946-11ee-939d-92fbcf53809c.png?imageView2/2/w/1000

5.1 硬件中断选择

通过下面的过程来配置20个线路做为中断源:

配置20个中断线的屏蔽位(EXTI_IMR)

配置所选中断线的触发选择位(EXTI_RTSR和EXTI_FTSR);

配置对应到外部中断控制器(EXTI)的NVIC中断通道的使能和屏蔽位,使得20个中断线中的请求可以被正确地响应。

5.2 硬件事件选择

通过下面的过程,可以配置20个线路为事件源

配置20个事件线的屏蔽位(EXTI_EMR)

配置事件线的触发选择位(EXTI_RTSR和EXTI_FTSR)

5.3 软件中断/事件的选择

20个线路可以被配置成软件中断/事件线。下面是产生软件中断的过程:

配置20个中断/事件线屏蔽位(EXTI_IMR, EXTI_EMR)

设置软件中断寄存器的请求位(EXTI_SWIER)


6 总结

本文参考stm32手册对于外部中断的概念以及配置进行了介绍,本人能力有限,难免存在错误和纰漏,请大佬不吝赐教。


关键字:STM32  标准外设库  外部中断配置 引用地址:STM32基于标准外设库的外部中断配置

上一篇:基于STM32单片机的烟雾测量系统设计
下一篇:STM32工程上printf()函数的方法实现

推荐阅读最新更新时间:2026-03-21 10:49

STM32 之 HAL标准外设、LL
STM32 Embedded Software 工作以来一直使用ST的STM32系列芯片,ST为开发者提供了非常方便的开发库。到目前为止,有标准外设库(STD库)、HAL库、LL库 三种。前两者都是常用的库,后面的LL库是ST最近才添加,随HAL源码包一起提供,目前支持的芯片也偏少。各库如下所示: 其中,STD库和HAL库两者相互独立,互不兼容。几种库的比较如下: 目前几种库对不同芯片的支持情况如下: 上图中,LL库目前有部分芯片不支持,官方计划2017年逐步完善。 STM32Snippets 它是代码示例的集合,直接基于STM32外设寄存器,可在文档和软件包中使用。由于处在最底层,因此需要开发者
[单片机]
<font color='red'>STM32</font> 之 HAL<font color='red'>库</font>、<font color='red'>标准</font><font color='red'>外设</font><font color='red'>库</font>、LL<font color='red'>库</font>
STM32学习三:下载标准外设(Standard Peripherals Library )
要想进行STM32编程,一是直接操作寄存器,这在上节有介绍,另一个办法是使用官方提供的标准外设库(Standard Peripherals Library )。 其实这也没什么好说的,按说既然是官方外设库,应该在官网直接可以下载,可能原来是这样的,只是我按网上提供的方法进入官网得到的结果是这样的。 并没有STM32F1系列MCU的标准外设库,其中第一个STSW-STM32023进去下载后是个EXE文件,运行后是个命令行界面,按解释应该是将2.0的库迁移到3.0的工具。那么网上流传的STM32F1系列的V3.5库在官网是不是没有下载?反正我一时找不着,当然,如果你不较真的话,通过度娘一搜,有很多下载链接,随便用。 最后,
[单片机]
<font color='red'>STM32</font>学习三:下载<font color='red'>标准</font><font color='red'>外设</font><font color='red'>库</font>(Standard Peripherals Library )
STM32STM32固件标准外设
标准外设库概述 STM32标准外设库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。 因此,使用固态函数库可以大大减少开发者开发使用片内外设的时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用的标准化的API去驱动。这里介绍的是V3.5版本的外设库,也是迄今最新的版本。 STM32F10x标准外设库文件结构 库的下载处是在ST公司的官方网站,下载链接:ST公司官方网站。
[单片机]
【<font color='red'>STM32</font>】<font color='red'>STM32</font>固件<font color='red'>库</font>(<font color='red'>标准</font><font color='red'>外设</font><font color='red'>库</font>)
STM32单片机外部中断配置讲解
01 单片机外部中断简介 所谓外部中断,就是通过外部信号所引起的中断,如单片机引脚上的电平变化(高电平、低电平)、边沿变化(上升沿、下降沿)等。51单片机有5个中断源,其中有两个是外部中断,分别为INT0和INT1,INT0被分配在P3.2引脚,INT1被分配在P3.2引脚,也即是说如果使用51单片机的外部中断0,则必须将信号接在P3.2上,否则无效。 02 举例说明什么是中断 单片机在执行程序时有两种方式: 查询方式 中断方式 所谓查询方式就是单片机一遍一遍的扫描,查看所监视的目标有没有发生变化,是一种主动式的监视方法,用一个成语可以很客观的描述:守株待兔。 所谓中断方式就是单片机不主动去监视目标,而是目标主动通知单片机状态发
[单片机]
STM32F10x_硬件I2C读写EEPROM(标准外设版本)
Ⅰ、写在前面 上一篇文章是“STM32F10x_模拟I2C读写EEPROM”,讲述使用IO口模拟I2C总线通信,对EEPROM(AT24Xxx)进行读写操作的过程。 上一篇文章主要内容:I2C协议、模拟I2C底层驱动、EEPROM(AT24Xxx)单字节读写操作。 本文主要内容:STM32硬件I2C详细配置、EEPROM(AT24Xxx)多字节读写操作、ST官方I2C存在问题。 实例实验效果: 1、多字节读写:任意地址(66), 写入任意长度(129)、读取并打印出来 2、单字节读写:任意地址(0),写入1字节数据、 读取并打印出来 实验说明: 1.多字节读写 实验为什么是从66地址写? 为什么
[单片机]
STM32F10x_硬件I2C读写EEPROM(<font color='red'>标准</font><font color='red'>外设</font><font color='red'>库</font>版本)
单片机STM32的几种输入模式以及外部中断配置
最近做毕业设计,需要用按键来触发外部中断。实验的时候是正常的,但是换了个核心板以及用上自己做的PCB电路板后,出现了一些问题。问题如下: 要求:将连接按键的IO口配置为上拉输入,按键一端接IO口,一端接地,即当按键按下后,该IO口会产生一个下降沿,触发下降沿中断。 问题:将相应的IO口配置好后,测了引脚的的电压,并不是3.3V左右,而是0.1V左右。于是猜想: 1. 外围电路对IO口产生了影响。 2. STM32 内部上拉能力较弱,一次只能上拉一个IO口。 于是开始从这两个想法着手解决。首先第一个,很容易就排除了。将外围电路撤掉,我用的是杜邦线,直接拔掉测量引脚上的电压,依然是0.1V左右,于是第1个猜想排除。
[单片机]
如何从ST官网下载官方标准外设
第一步,打开ST官网,可以看到网页语言可以在右上角选择。如下图: 第二步,用鼠标指向上部“产品”一栏,在下拉菜单中点击“微控制器”。如下图: 第三步,在转到的新页面左侧点击“产品列表”。如下图: 第四步,在转到的新页面左侧点击“STM32 ARM Cortex32位微控制器”。如下图: 第五步,在转到的新页面左侧点击“产品列表”。如下图: 第六步,在转到的新页面左侧点击“STM32主流MCU”。如下图: 第七步,在转到的新页面左侧点击“STM32F1系列”。如下图: 第八步,在转到的新页面左侧点击“产品列表”。如下图: 第九步,在产品列表下拉列表中选择“STM32F103”。如下
[单片机]
如何从ST官网下载官方<font color='red'>标准</font><font color='red'>外设</font><font color='red'>库</font>
STM32 EXTI配置
按键的硬件结构有一点一定要注意,要在GPIO段上拉电阻,否则GPIO设置成浮空输入后,会造成端口电平不稳定,中断效果不理想。 另外EXTI的映射关系可以看下图,是和管脚号对应的,比较好记 (1)Main C语言: Codee#14817 /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 实验平台 : ST 官方三合一套件 + 硬件 : STM32F103C8T6 + 开发平台 : IAR For ARM 5.40 + 仿真器 : J-Link + 日期 : 2010-11-4 + 频率 :
[单片机]
<font color='red'>STM32</font> <font color='red'>EXTI</font>的<font color='red'>配置</font>
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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