历史上的今天
返回首页

历史上的今天

今天是:2024年08月27日(星期二)

正在发生

2019年08月27日 | 【STM32H7教程】第15章 STM32H7的GPIO基础知识(重要)

2019-08-27 来源:eefocus

15.1 初学者重要提示

学习本章节务必要认真学习并掌握15.3小节GPIO功能模式分析,学好它们,对后续章节中外设的学习大有裨益。


对于不使用的引脚,推荐设置为模拟模式,悬空即可。


GPIO的速度等级高的时候,最好使能IO补偿单元。

 

GPIO还涉及到一个注入电流的问题,此贴可以作为了解:http://forum.armfly.com/forum.php?mod=viewthread&tid=87675 。


15.2 GPIO功能简介

STM32H7的GPIO特性如下:


  输出状态:开漏/推挽 + 上拉/下拉电阻。

  通过输出数据寄存器(GPIOx_ODR)或者外设(GPIO设置为复用模式时)输出数据。

  GPIO速度等级设置。

  输入状态:浮空,上拉/下拉,模拟。

  通过输入数据寄存器(GPIOx_IDR)或者外设(GPIO设置为复用模式)输入数据。

  通过寄存器GPIOx_BSRR实现对寄存器GPIOx_ODR的位操作。

  通过配置寄存器GPIOx_LCKR的锁机制,实现冻结IO口配置。

  每两个时钟周期就可以翻转一次IO。

  高度灵活的引脚复用功能,允许IO引脚既可以做GPIO也可以做功能复用。

15.3 GPIO功能模式分析(重要)

STM32H7的GPIO端口可以配置为如下的8种模式:


  输入浮空

  输入上拉

  输入下拉

  模拟功能

  具有上拉或下拉功能的开漏输出

  具有上拉或下拉功能的推挽输出

  具有上拉或下拉功能的复用功能推挽

  具有上拉或下拉功能的复用功能开漏

由于上拉和下拉是可选配置,对应的HAL库配置使用下面6种就可以表示:


  GPIO_MODE_INPUT 输入模式

  GPIO_MODE_OUTPUT_PP 推挽输出

  GPIO_MODE_OUTPUT_OD 开漏输出

  GPIO_MODE_AF_PP   复用推挽

  GPIO_MODE_AF_OD  复用开漏

  GPIO_MODE_ANALOG 模拟模式

15.3.1 推挽输出


推挽电路是两个参数相同的三极管或 MOSFET,以推挽方式存在于电路中。 电路工作时,两只对称的开关管每次只有一个导通,导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级提高电路的负载能力。 相对于开漏输出模式,推挽输出最大优势是输出高电平时,上升时间快,电压驱动能力强。 


15.3.2 开漏输出

开漏端相当于 MOS 管的漏极(三极管的集电极),要得到高电平状态必须外接上拉电阻才行,因此输出高电平的驱动能力完全由外接上拉电阻决定,但是其输出低电平的驱动能力很强。开漏形式的电路有以下几个特点:


输出高电平时利用外部电路的驱动能力,减少 IC 内部的驱动。

开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平。如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。上拉电阻的阻值决定了逻辑电平转换的速度。阻值越大,速度越低,功耗越小。


开漏输出提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。


可以将多个开漏输出连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系,即“线与”。可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑 0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为 0,只有都为高电平时,与的结果才为逻辑 1。


15.3.3 复用推挽和开漏

复用指的是GPIO切换到CPU内部设备(比如SPI,I2C,UART等电路),也就是GPIO不是作为普通IO使用,是由内部设备直接驱动。推挽和开漏的特征同上。


15.3.4 四种输入模式


通过上面的引脚结构图可以得到如下三种方式


  浮空输入:CPU内部的上拉电阻、下拉电阻均断开的输入模式。

  下拉输入:CPU内部的下拉电阻使能、上拉电阻断开的输入模式。

  上拉输入:CPU内部的上拉电阻使能、下拉电阻断开的输入模式。

 


而模拟输入模式是GPIO引脚连接内部ADC。

15.4 GPIO的拉电流负载和灌电流负载能力

这里先普及点小知识,什么是拉电流负载,什么是灌电流负载。


拉电流负载:一种负载电流从驱动门流向外电路,称为拉电流负载。比如使用STM32H7的GPIO直接驱动LED就是拉电流形式。

灌电流负载:负载电流从外电路流入驱动门,称为灌电流负载。比如下面这种形式的LED驱动电路

有了上面这些知识后再来看STM32H7的IO驱动能力(截图来自STM32H7参考手册):


通过上面的截图可知:STM32H7总的拉电流和灌电流不可超过140mA,单个引脚最大不可超过20mA,这个知识点,大家要知道。


15.5 IO补偿单元,用于高速

IO补偿单元用于控制I/O通信压摆率(tfall / trise)以此来降低I/O噪声。当前STM32H7的速度等级可以配置为以下四种:


/** @defgroup GPIO_speed_define  GPIO speed define

  * @brief GPIO Output Maximum frequency

  * @{

  */  

#define  GPIO_SPEED_FREQ_LOW         ((uint32_t)0x00000000U)  /*!< Low speed     */

#define  GPIO_SPEED_FREQ_MEDIUM      ((uint32_t)0x00000001U)  /*!< Medium speed  */

#define  GPIO_SPEED_FREQ_HIGH        ((uint32_t)0x00000002U)  /*!< Fast speed    */

#define  GPIO_SPEED_FREQ_VERY_HIGH   ((uint32_t)0x00000003U)  /*!< High speed    */

使用后两种速度等级的话,最好使能IO补偿单元。另外不同速度等级下,IO补偿使能与否对IO最大速度的影响可以看此贴:http://forum.armfly.com/forum.php?mod=viewthread&tid=87677 。


15.6 GPIO兼容CMOS和TTL电平

CMOS和TTL电平兼容问题也是一个比较重要的知识点,关于这方面的知识已经在论坛进行了总结(由于截图较多,较长,就不整理到教程里面了):http://forum.armfly.com/forum.php?mod=viewthread&tid=87676 。

15.7 不使用的引脚推荐设置为模拟模式

主要从功耗和防干扰考虑。


所有用作带上拉电阻输入的 I/O都会在引脚外部保持为低时产生电流消耗。此电流消耗的值可通过使用的静态特性中给出的上拉 / 下拉电阻值简单算出。


对于输出引脚,还必须考虑任何外部下拉电阻或外部负载以估计电流消耗。


若外部施加了中间电平,则额外的 I/O 电流消耗是因为配置为输入的 I/O。此电流消耗是由用于区分输入值的输入施密特触发器电路导致。除非应用需要此特定配置,否则可通过将这些I/O 配置为模拟模式以避免此供电电流消耗。 ADC 输入引脚应配置为模拟输入就是这种情况。


任何浮空的输入引脚都可能由于外部电磁噪声,成为中间电平或意外切换。为防止浮空引脚相关的电流消耗,它们必须配置为模拟模式,或内部强制为确定的数字值。这可通过使用上拉 / 下拉电阻或将引脚配置为输出模式做到。

 


综上考虑,不使用的引脚设置为模拟模式,悬空即可。


15.8 总结

本章节就为大家讲解这么多,其中GPIO功能模式小节(本章15.3)最重要,大家务必要掌握。

推荐阅读

史海拾趣

Agilent Technologies公司的发展小趣事
  1. 公司成立与拆分:Agilent Technologies是一家跨国科技公司,成立于1999年。它是惠普公司(Hewlett-Packard,HP)的分拆部门,旨在将惠普的测试与测量、半导体业务分离出来,形成独立的实体。这一举措旨在使惠普更专注于其核心业务,同时为Agilent提供更大的发展空间。

  2. 产品创新与多元化:Agilent Technologies以其广泛的产品组合而闻名,涵盖了测试与测量、生命科学、化学分析和电子产品等多个领域。该公司不断推出创新的产品和解决方案,满足客户在科研、制造和市场应用中的需求。例如,Agilent的测试与测量仪器被广泛应用于电子、通信、航空航天等行业,为客户提供精准的测试和分析。

  3. 全球化布局与市场拓展:作为一家全球性企业,Agilent Technologies在全球范围内设有研发、生产和销售网络。公司在美国、欧洲、亚洲等地都设有重要的研发中心和生产基地,以满足不同地区客户的需求。此外,Agilent通过收购和合作等方式扩大了其产品线和市场份额,进一步加强了其在全球电子行业的地位。

  4. 科研与创新投入:Agilent Technologies将大量资源投入到科研与创新领域,不断推动技术的发展和应用。公司与学术界、行业组织以及其他企业建立了紧密的合作关系,共同开展前沿技术研究和开发。Agilent的研究团队不断探索新的领域和解决方案,推动了科学技术的进步,为客户提供了更加先进和可靠的产品和服务。

  5. 社会责任与可持续发展:作为一家全球企业,Agilent Technologies注重社会责任和可持续发展。公司积极参与慈善事业和社区服务,支持教育、环保、健康等多个领域的项目和活动。此外,Agilent致力于推动绿色技术和环保生产,采取了一系列措施减少对环境的影响,提高资源利用效率,助力实现可持续发展目标。

Advanced Energy公司的发展小趣事

AE公司一直将创新作为企业发展的核心动力。公司不断投入研发资源,推动电源技术的持续创新。同时,AE公司也积极与各大电子企业建立合作伙伴关系,共同推动电子行业的发展。通过与合作伙伴的紧密合作,AE公司不仅获得了更多的市场机会,也提升了自身的技术水平和创新能力。

Extech公司的发展小趣事

随着市场竞争的加剧,Extech公司意识到单一的产品已经无法满足客户的需求。因此,在1998年,公司推出了自主研发的产品工艺规划系统XTCAPP和产品数据管理系统XTPDM。这两款软件在推出后迅速成为市场上的主流产品,其高度的集成性和易用性赢得了客户的广泛赞誉。通过这两款软件的推出,Extech公司在CAD/PDM领域进一步巩固了自己的领导地位。

富捷(FOJAN)公司的发展小趣事

富捷电子深知质量是企业生存和发展的基石。因此,公司高度重视质量管理体系建设,成功导入了ISO9001/IATF16949及VDA6.3质量管理体系、ISO14001环境管理体系。在原材料管理、产品生产、产品过程检验及出货流程中,公司严格遵循体系要求,秉持全面质量管理(TQM)精神,确保每一环节都达到国际最高品质标准。这种对质量的执着追求,赢得了客户的广泛信赖和好评。

Advanced Monolythic Ceramics公司的发展小趣事

自成立以来,富捷电子始终将技术创新视为企业发展的核心驱动力。公司投入巨资建立了一支国际专业的晶片电阻核心技术研发团队,专注于贴片电阻、合金电阻、车规电阻等产品的研发与生产。近年来,富捷电子成功研发出高端抗静电汽车晶片电阻FQS系列产品,并建设了“高端抗静电汽车晶片电阻智能工厂”,实现了从原材料入库到成品出库的全程智能化、自动化操作。这一创新不仅提升了产品性能,还满足了汽车电子行业对元件高可靠性、高稳定性的严格要求,推动了公司在汽车电子领域的快速发展。

辉芒微(FMD)公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,辉芒微始终将研发创新作为企业发展的核心驱动力。公司不断加大研发投入,引进和培养了一批高素质的研发人才,形成了深厚的技术积累和创新能力。同时,辉芒微还积极关注行业动态和技术发展趋势,不断探索新的应用领域和市场机会。展望未来,辉芒微将继续秉承“创新、务实、高效、共赢”的企业精神,致力于成为全球领先的芯片设计企业,为电子行业的发展贡献更多的智慧和力量。

问答坊 | AI 解惑

液晶显示主程序

希望和大家共享…

查看全部问答>

有限状态机资料贡献

状态机设计是FPGA重要的一个技术,有限状态机研究资料帮组大家提高状态机认识!…

查看全部问答>

关于各部分供电的请教!

现在我的的一个制作中有单片机一块(5v供电),小心号采集一块(小信号毫伏级、涉及运放+-5V供电),电机驱动一块(电压12v供电);这几块如何供电啊,经测试发现,三块放在一起时,小信号采集干扰很大,小信号会被淹没;以前对小信号处理很少,现 ...…

查看全部问答>

使用pll模块产生一些FPGA内部时钟,发现错误

转贴:无意中搜到,有点用http://hi.baidu.com/hclbupt/blog/item/de3901b55fae6f7a8bd4b2f6.html 最近使用pll模块产生一些FPGA内部时钟,发现错误一大堆,费了好半天终于弄明白了。 1.综合时的错误 ERROR:Xst:2035 - Port has illegal connect ...…

查看全部问答>

预计2015年电子元器件销售收入将达5万亿,车用元器件价值到将增加一倍。

机遇与挑战: 半导体强势复苏 电子元器件应用市场快速增长 新兴产业将得到重大政策倾斜市场数据: 预计2010年全球半导体产值增长率将达到10%CMIC(中国市场情报中心)最新发布:2009年下半年以来,随着全球经济的回暖,电子元器件行业逐 ...…

查看全部问答>

SATA硬盘问题

1.我现在在DSP平台上操作三星的笔记本SATA硬盘遇到一个问题,是这样的:当我操作硬盘的0扇区的时候偶尔成功,偶尔不成功,但是读取其他扇区的时候什么问题都没有。我换成PC的SATA硬盘的的时候什么问题都没有。(这个是PIO的驱动模式) 2 ...…

查看全部问答>

Altera 的cpld是高电平复位还是低电平复位,请大侠指点一下!我用的是EPM570

Altera 的cpld是高电平复位还是低电平复位,请大侠指点一下!我用的是EPM570…

查看全部问答>

51 can应用

用的是silabs的c8051f586  里面有个CAN的应用搞不太清楚 哪位大侠用过的给个例子啊  只要简单的初始化和收发就可以了 拜谢!!! 而且这款单片机相关应用网上貌似不是很多 …

查看全部问答>

串口读取数限制!!!!

串口能够写入多位数据,但是只能读出前8位,COMSTAT.cbInQue,在输入多位后,每次都是等于8.待将串口发送区清空后,WaitCommEvent还是能检测到EV_RXCHAR事件,这时COMSTAT.cbInQue=0.这是什么原因啊?怎样才能输出更多的数??…

查看全部问答>

一个简单电子钟调试

#include #define uchar unsigned char #define uint  unsigned int uchar code table[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};   //位选,控制那个数码管亮。 uchar code table1[12]={0x03, 0x9f, 0x25, 0x0d, 0x ...…

查看全部问答>