0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

硬件攻城狮 来源:CSDN博主小麦大叔 2023-11-02 14:13 次阅读

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

2 STM32的外部中断

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

中断屏蔽寄存器(EXTI_IMR)

事件屏蔽寄存器(EXTI_EMR)

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

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

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

挂起寄存器(EXTI_PR)

0e286cee-7946-11ee-939d-92fbcf53809c.png

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

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

0e67e4b4-7946-11ee-939d-92fbcf53809c.png

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

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

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手册对于外部中断的概念以及配置进行了介绍,本人能力有限,难免存在错误和纰漏,请大佬不吝赐教。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117719
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348738
  • 外部中断
    +关注

    关注

    1

    文章

    131

    浏览量

    15591
  • EXTI
    +关注

    关注

    0

    文章

    25

    浏览量

    3614
  • 标准外设库
    +关注

    关注

    0

    文章

    16

    浏览量

    3465

原文标题:STM32 外部中断详解(原理+配置代码)

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    每一个GPIO如何配置成一个外部中断触发源

    1STM32中断分组STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是
    的头像 发表于 01-25 08:44 1.5w次阅读
    每一个GPIO如何<b class='flag-5'>配置</b>成一个<b class='flag-5'>外部</b><b class='flag-5'>中断</b>触发源

    STM32F407 外部中断配置步骤

    介绍STM32F407外部中断配置步骤,以按键为例,实现外部中断
    的头像 发表于 07-06 14:31 1027次阅读
    <b class='flag-5'>STM32</b>F407 <b class='flag-5'>外部</b><b class='flag-5'>中断</b><b class='flag-5'>配置</b>步骤

    请问STM32使用标准怎么在使用时开启外部中断,不使用时关闭外部中断

    STM32使用标准,怎么在使用时开启外部中断,不使用时关闭外部
    发表于 01-23 07:59

    STM32标准外设概述

    1 STM32标准外设概述STM32标准外设
    发表于 08-06 06:32

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

    本文介绍了STM32基于标准外设外部中断配置,以
    发表于 08-11 06:23

    STM32标准外设概述

    1.1 基于标准外设的软件开发1.1.1 STM32标准外设
    发表于 08-23 06:19

    浅谈STM32标准外设

    1.1 基于标准外设的软件开发1.1.1 STM32标准外设
    发表于 08-23 09:06

    STM32标准外设概述

    标题STM32F10X标准外设与文件功能说明一、标准外设
    发表于 01-11 07:29

    STM32F4外部中断设置

    基础知识1、外部中断/事件框架: STM32F407一共有16+7条中断/事件线(如下图),也就是说在STM32工作过程中同时支持22条
    发表于 11-24 16:51 7次下载
    <b class='flag-5'>STM32</b>F4<b class='flag-5'>外部</b><b class='flag-5'>中断</b>设置

    STM32 外部中断详解(原理+配置代码)

    本文介绍了STM32基于标准外设库的外部中断配置,以及基于参考手册如何更加寄存器
    发表于 11-24 17:36 2次下载
    <b class='flag-5'>STM32</b> <b class='flag-5'>外部</b><b class='flag-5'>中断</b>详解(原理+<b class='flag-5'>配置</b>代码)

    STM32(六)-------中断外部中断

    STM32中断应用中断知识介绍STM32 中断应用概览异常NVIC优先级定义中断知识介绍
    发表于 12-04 17:21 9次下载
    <b class='flag-5'>STM32</b>(六)-------<b class='flag-5'>中断</b>(<b class='flag-5'>外部</b><b class='flag-5'>中断</b>)

    STM32f429外部中断配置解析基于HAL库

    STM32f429外部中断配置解析基于HAL库
    发表于 12-16 16:58 9次下载
    <b class='flag-5'>STM32</b>f429<b class='flag-5'>外部</b><b class='flag-5'>中断</b><b class='flag-5'>配置</b>解析基于HAL库

    基于STM32CubMX和HAL库的外设开发(七、GPIO作为外部中断

    基于STM32CubMX和HAL库的外设开发第七讲 GPIO作为外部中断外部中断简介
    发表于 01-14 15:50 1次下载
    基于<b class='flag-5'>STM32</b>CubMX和HAL库的<b class='flag-5'>外设</b>开发(七、GPIO作为<b class='flag-5'>外部</b><b class='flag-5'>中断</b>)

    STM32单片机外部中断简介 STM32单片机外部中断配置过程

    STM32 单片机是一款高性能、低功耗的 32 位微控制器,具有强大的计算能力、灵活的外设模块以及优秀的扩展性,开发周期短、成本低。在单片机应用中,外部中断是一种重要的硬件触发方式,本
    发表于 08-15 18:21 2018次阅读

    STM32如何配置外部中断STM32外部中断配置步骤

    STM32如何配置外部中断STM32外部中断
    的头像 发表于 10-26 17:47 2080次阅读