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模式来回切换。

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

    关注

    31

    文章

    5311

    浏览量

    119995
  • GPIO
    +关注

    关注

    16

    文章

    1196

    浏览量

    51907

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

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

收藏 人收藏

    评论

    相关推荐

    stm32 GPIO中断配置教程

    在嵌入式开发中,STM32微控制器因其高性能和丰富的外设而广受欢迎。GPIO(通用输入/输出中断是STM32微控制器中常用的功能之一,它允许开发者在特定引脚上检测到
    的头像 发表于 11-19 15:53 177次阅读

    STM32 GPIO的八种工作模式

    GPIO (general purpose input output)是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与
    的头像 发表于 11-06 09:40 311次阅读
    STM32 <b class='flag-5'>GPIO</b>的八种工作模式

    gpio接口是干什么的 gpio四种输入输出模式怎么选择

    GPIO接口的作用 GPIO(General Purpose Input/Output)接口,即通用输入输出接口,是一种用于连接和控制各种外部设备的数字接口。它由一组引脚组成,可以通过
    的头像 发表于 10-06 16:07 1830次阅读

    GPIO静电放电防护方案

    其他集成电路(IC)上常见的接口,它允许这些设备与外部世界进行交互。GPIO接口提供了基本的数字信号功能,可通过软件分别配置成输入输出,即能够作为
    的头像 发表于 09-19 17:02 273次阅读
    <b class='flag-5'>GPIO</b>静电放电防护方案

    STM32CUBEMX(11)--外部中断(EXTI)

    配置此端口为中断口。 GPIO 口连接到 16 个外部中断 / 事件线如下图 。可以看到PC13应该是在EXTI13上。 外部
    发表于 09-10 15:44

    STM32 GPIO八种模式及工作原理详解

    一. 前言   GPIO全称General Purpose Input Output,是微控制数字输入/输出的基本模块,可以实现微控制器与外部环境的数字进行交换。借助
    的头像 发表于 07-22 09:32 5594次阅读
    STM32 <b class='flag-5'>GPIO</b>八种模式及工作原理详解

    st7735 DMA和GPIO外部中断异常的原因?

    上图是中断优先级,我的DMA1是SPI,输出信号到显示屏st7735,逻辑是GPIO外部中断处理串口数据,处理完成继续运行显示函数,当
    发表于 07-05 06:35

    ESP32蓝牙不断触发GPIO外部中断的原因?

    _NUM_39,外部已下拉;当触发中断,则改变GPIO_NUM_32输出状态。Code: Select all void trigger_demo(void *arg) { stati
    发表于 06-14 06:00

    STM32的GPIO引脚能同时用作外部中断和定时器输入捕获吗?

    今天突然在项目中想到一种用法,将GPIO的某一个引脚,同时配置外部中断(在中断一些逻辑)和复用为定时器的
    发表于 05-09 08:22

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

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

    PC13 PC14 PC15作为外部中断输入口,频繁进入中断是为什么?

    void PC13_14_15_Gpio(void)//PC13PC14PC15配置为普通IO浮空外部上拉输入 { RCC_APB2PeriphClockCmd
    发表于 04-03 07:39

    请问如何区分触发STM32外部中断GPIO引脚?

    如何区分触发STM32 外部中断GPIO引脚?
    发表于 04-01 07:07

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

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

    tc387是否可以将配置为外部中断的引脚读取为标准输入gpio

    是否可以将配置为外部中断的引脚读取为标准输入 gpio? 例如: 如果我配置 ifx scu_req2a_p10_2_in, 我能简单地调用 __getbit (MODULE_P10,
    发表于 01-26 07:55

    数字输入输出原理是什么

    是General-purpose input/output,大部分情况下,我们都会用简称GPIO GPIO的功能,主要是指这个管脚可以作为数字信号的输入或者输出使用,到底是
    的头像 发表于 11-27 11:45 928次阅读
    数字<b class='flag-5'>输入</b>与<b class='flag-5'>输出</b>原理是什么