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

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

3天内不再提示

GPIO做输出还能作外部中断输入吗?

茶话MCU 来源:ST MCU 信息交流 2020-07-05 10:42 次阅读

偶尔会有人问起STM32芯片的GPIO做输出时还是否可能作为外部中断触发输入,这里一起聊聊该话题

作为STM32芯片,其外部中断触发源可以是硬件模式或软件模式。所谓软件模式就是通过操作相关寄存器产生内部中断触发信号并向内核NVIC控制器申请中断。硬件模式自然是指来自GPIO引脚的电平跳变信号经边沿检测器形成中断触发信号向内核申请中断。【注:还有个别外设事件也可以作为外部中断触发源映射到外部中断控制器。】

我们这里要谈的是基于硬件模式的外部中断话题。当STM32的GPIO作为输出时,可能是通用GPIO输出也可能是基于其它外设复用情况下的输出,即复用输出。

下图是GPIO作为基本输入输出时的功能框图。

下面是GPIO作为其它外设的复用输出脚时的功能框图。

不难看出,所谓GPIO复用输出,就是将自身输出数据寄存器与输出控制电路及外部管脚断开来,并将输出控制电路及外部管脚借让给其它外设使用。通俗点说,所谓GPIO复用输出就是其它外设找GPIO借道而已。

从上面两幅图来看,不论GPIO通用输出还是复用输出,外部管脚的电平都可以连接到内部输入单元,管脚上的电平也应该可以被内部边沿检测器检测到。也就是说,即使GPIO作为输出,只要管脚上的电平跳变能被边沿检测器识别,按理可以作为外部中断触发源。

下面不妨用个简单的实例验证下。

这里使用一块STM32F4系列的开放板,通过定时器1的通道1输出8个PWM信号,同时将该定时器输出通道所用管脚PA8配置为上升沿触发的外部中断输入。PC13接一个按键,每按键一次启动定时器输出8个脉冲。

我使用STM32CubeMx图形化工具进行配置。因为要把PWM输出脚同时配置为外部中断输入这里不好操作。我先借用旁边的PA9进行配置,等生成初始化代码后我再将PA9改成PA8以及对应的中断矢量。TIM1配置在单脉冲模式,我在PC3按键中断里启动TIM1的计数器。

TIM1的基本配置如下:

再就是两个GPIO端口PC13/PA9的EXTI配置,分别对应按键脚和PWM输出脚。

时钟、调试口等配置完毕后生成初始化代码,然后在代码里将之前基于PA9生成的代码改为基于TIM1-CH1的输出脚PA8的。

主程序功能代码很简单,就是配置TIM1-CH1的pwm输出。

在用户按键中断程序里启动TIM1的计数器。

在基于PWM输出脚PA8对应的外部中断程序里对中断次数进行统计。因它被配置为上沿触发,每次连续输出8个脉冲的话,统计值应该为8。

下面看看代码运行结果:

每按键一次输出8个脉冲,没有问题。

再看看基于这个8个输出脉冲统计到中断次数,也确实为8次。【如下图所示]

显然,当GPIO做为输出时还是可以感受到外部管脚电平的变化情况,并可以做为外部中断触发源申请中断。结合上面GPIO输出模式下的功能框图来看,当它被配置为输出时是具备双向特性的。当然,一般来讲,如果希望GPIO做为双向驱动口使用时,建议将其配置为OD开漏结合上拉模式。比方在做I2C应用时,将通信GPIO端口配置为开漏模式结合上拉电阻即可进行双向数据通信,无须对通信口的GPIO模式来回切换。

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

    关注

    30

    文章

    5027

    浏览量

    117711
  • GPIO
    +关注

    关注

    16

    文章

    1133

    浏览量

    50562

原文标题:GPIO做输出还能作外部中断输入吗?

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32中断分组及外部中断的配置过程分享

    到 RTC 闹钟事件。 线 18:连接到 USB 唤醒事件。 [/td]  外部中断的配置过程:   1、配置触发源GPIO口:   因为GPIO口作为触发源使用,所以将
    发表于 04-08 08:05

    外部中断的工作原理 外部中断方式有哪些 为什么要使用外部中断

    外部中断的工作原理是单片机响应外部事件的一种机制** **。
    的头像 发表于 01-28 17:37 1390次阅读

    stm32f1如何将外部中断关掉hal库

    引入相关的头文件。在HAL库中,与外部中断相关的头文件是stm32f1xx_hal_exti.h和stm32f1xx_hal_gpio.h。这两个头文件提供了对外部
    的头像 发表于 12-22 13:52 1141次阅读

    STM32外部中断大问题

    问题:一直进入中断,没有触发信号,也一直进入。描述:开PA0为外部中断,刚刚很好,一个触发信号一个中断中断函数没有丢,也没有抢跑,开PA1
    的头像 发表于 11-08 08:00 605次阅读
    STM32<b class='flag-5'>外部</b><b class='flag-5'>中断</b>大问题

    RK3568外部IO中断示例

    外部IO中断介绍本篇文章以万象奥科HD-RK3568-IOT评估板中GPIO30为例,介绍Linux内核中断的注册方法,使用中断的方式检测
    的头像 发表于 11-03 13:56 580次阅读
    RK3568<b class='flag-5'>外部</b>IO<b class='flag-5'>中断</b>示例

    如何配置GPIO中断功能呢?

    如何在嵌入式系统中配置GPIO中断功能。 一、GPIO基础 GPIO是General Purpose Input/Output的缩写,中文意为通用
    的头像 发表于 10-30 09:57 3035次阅读

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

    上跌沿触发或上升沿触发的外部中断线。这些中断线可以通过中断线控制器(EXTI)进行设置,并可以绑定到不同的GPIO端口上,以实现
    的头像 发表于 10-26 17:47 2072次阅读

    STM32学习笔记一外部中断

    STM32 的每个 IO 都可以作为外部中断中断输入口。STM32F103 的中断控制器支持 19 个
    的头像 发表于 10-24 14:12 679次阅读
    STM32学习笔记一<b class='flag-5'>外部</b><b class='flag-5'>中断</b>

    通用GPIO外部中断EXTI

    = fAHB/2 = 16 MHz 可配置的最大输出频率为40MHz 超低的漏电流50nA 所有83个GPIO口都可以配置为外部中断 (同时产生最多16个
    发表于 09-12 07:08

    51单片机外部中断实验

    前面,我们讲了51单片机的输入输出功能,今天讲点不一样的,外部中断测试。
    发表于 07-11 11:41 685次阅读
    51单片机<b class='flag-5'>外部</b><b class='flag-5'>中断</b>实验

    DSP28335外部中断的使用

    处理器的外部中断主要用于捕抓外部输入的高低电平。本篇文章将介绍DSP28335的外部中断的使用。
    的头像 发表于 07-07 16:41 2531次阅读
    DSP28335<b class='flag-5'>外部</b><b class='flag-5'>中断</b>的使用

    GPIO的八种工作模式

    GPIO是通用输入/输出端口的简称,GPIO的引脚与外部设备连接,可实现与外部通讯、控制
    的头像 发表于 07-02 16:38 6426次阅读
    <b class='flag-5'>GPIO</b>的八种工作模式

    STM32的IO外部中断EXTI的使用

    的方式访问输入引脚,还可以通过另外一种叫做外部中断的方式来对引脚的输入信号进行检测,本篇首先介绍下EXTI的结构,接着介绍外部
    的头像 发表于 06-22 10:21 1177次阅读
    STM32的IO<b class='flag-5'>外部</b><b class='flag-5'>中断</b>EXTI的使用

    MSPM0L1306开发板教程之GPIO中断

    前面已经演示了如何配置GPIO输入输出,这次就接着讲GPIO中断如何使用。
    的头像 发表于 05-14 09:40 2220次阅读
    MSPM0L1306开发板教程之<b class='flag-5'>GPIO</b>的<b class='flag-5'>中断</b>

    MSPM0L1306开发板教程之GPIO输入输出

    GPIO算是所有MCU入门的第一步,今天的教程就来教大家设置MSPM0L系列的GPIO输入输出功能。
    的头像 发表于 05-04 17:22 3026次阅读
    MSPM0L1306开发板教程之<b class='flag-5'>GPIO</b><b class='flag-5'>输入输出</b>