【STM32H7教程】第15章 STM32H7的GPIO基础知识(重要)
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980
第15章 STM32H7的GPIO基础知识(重要)
本章教程为大家讲解GPIO(General-purpose I/Os)基础知识。GPIO配置是所有外设驱动的基础,大家务必要熟练掌握。
15.1 初学者重要提示
15.2 GPIO功能简介
15.3 GPIO功能模式分析(重要)
15.4 GPIO的拉电流负载和灌电流负载能力
15.5 IO补偿单元,用于高速
15.6 GPIO兼容CMOS和TTL电平
15.7 不使用的引脚推荐设为模拟模式
15.8 总结
15.1 初学者重要提示
- 学习本章节务必要认真学习并掌握15.3小节GPIO功能模式分析,学好它们,对后续章节中外设的学习大有裨益。
- 对于不使用的引脚,推荐设置为模拟模式,悬空即可。
- GPIO的速度等级高的时候,最好使能IO补偿单元。
- GPIO还涉及到一个注入电流的问题,此贴可以作为了解:http://www.armbbs.cn/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://www.armbbs.cn/forum.php?mod=viewthread&tid=87677 。
15.6 GPIO兼容CMOS和TTL电平
CMOS和TTL电平兼容问题也是一个比较重要的知识点,关于这方面的知识已经在论坛进行了总结(由于截图较多,较长,就不整理到教程里面了):http://www.armbbs.cn/forum.php?mod=viewthread&tid=87676 。

15.7 不使用的引脚推荐设置为模拟模式
主要从功耗和防干扰考虑。
- 所有用作带上拉电阻输入的 I/O都会在引脚外部保持为低时产生电流消耗。此电流消耗的值可通过使用的静态特性中给出的上拉 / 下拉电阻值简单算出。
- 对于输出引脚,还必须考虑任何外部下拉电阻或外部负载以估计电流消耗。
- 若外部施加了中间电平,则额外的 I/O 电流消耗是因为配置为输入的 I/O。此电流消耗是由用于区分输入值的输入施密特触发器电路导致。除非应用需要此特定配置,否则可通过将这些I/O 配置为模拟模式以避免此供电电流消耗。 ADC 输入引脚应配置为模拟输入就是这种情况。
- 任何浮空的输入引脚都可能由于外部电磁噪声,成为中间电平或意外切换。为防止浮空引脚相关的电流消耗,它们必须配置为模拟模式,或内部强制为确定的数字值。这可通过使用上拉 / 下拉电阻或将引脚配置为输出模式做到。
综上考虑,不使用的引脚设置为模拟模式,悬空即可。
15.8 总结
本章节就为大家讲解这么多,其中GPIO功能模式小节(本章15.3)最重要,大家务必要掌握。
【STM32H7教程】第15章 STM32H7的GPIO基础知识(重要)的更多相关文章
- 【RL-TCPnet网络教程】第31章 Telnet远程登录基础知识
第31章 Telnet远程登录基础知识 本章节为大家讲解Telnet (Teletype Network) 的基础知识,方便后面章节的实战操作. (本章的知识点主要整理自网络) 31.1 ...
- 【RL-TCPnet网络教程】第29章 NTP网络时间协议基础知识
第29章 NTP网络时间协议基础知识 本章节为大家讲解NTP (Network Time Protocol,网络时间协议)和SNTP(简单网络时间协议,Simple Network Time ...
- 【RL-TCPnet网络教程】第2章 嵌入式网络协议栈基础知识
第2章 嵌入式网络协议栈基础知识 本章教程为大家介绍嵌入式网络协议栈基础知识,本章先让大家有一个全面的认识,后面章节中会为大家逐一讲解用到的协议. 基础知识整理自百度百科,wiki百科等 ...
- 【RL-TCPnet网络教程】第12章 TCP传输控制协议基础知识
第12章 TCP传输控制协议基础知识 本章节为大家讲解TCP(Transmission Control Protocol,传输控制协议),通过本章节的学习,需要大家对TCP有个基本的认识,方 ...
- Python黑帽编程3.0 第三章 网络接口层攻击基础知识
3.0 第三章 网络接口层攻击基础知识 首先还是要提醒各位同学,在学习本章之前,请认真的学习TCP/IP体系结构的相关知识,本系列教程在这方面只会浅尝辄止. 本节简单概述下OSI七层模型和TCP/IP ...
- NodeJs>------->>第三章:Node.js基础知识
第三章:Node.js基础知识 一:Node.js中的控制台 1:console.log.console.info 方法 console.log(" node app1.js 1> ...
- 16第一章 ASP.Net编程基础知识
第一章 ASP.Net编程基础知识 第一章 ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...
- GPIO基础知识
STM32 GPIO入门知识 GPIO是什么? 通用输入输出端口,可以做输入,也可以做输出.GPIO端口可通过程序配置成输入或输出. 引脚和GPIO的区别和联系 STM32的引脚中,有部分是做GPIO ...
- The Swift Programming Language-官方教程精译Swift(2)基础知识
Swift 的类型是在 C 和 Objective-C 的基础上提出的,Int是整型:Double和Float是浮点型:Bool是布尔型:String是字符串.Swift 还有两个有用的集合类型,Ar ...
随机推荐
- SpringBoot中使用Zuul
Zuul提供了服务网关的功能,可以实现负载均衡.反向代理.动态路由.请求转发等功能.Zuul大部分功能是通过过滤器实现的,除了标准的四种过滤器类型,还支持自定义过滤器. 使用@EnableZuulPr ...
- spring @Transaction事务回滚失败
今天客户提出一个新问题,出库一批商品,提示失败了,但是库存数量却减少了.看了一下代码一头雾水,我们的代码加了事物,且捕获异常. 经过调试代码发现就是两个原因导致的 第一.在当前方法的catch中处理了 ...
- sass参考手册
http://sass.bootcss.com/docs/sass-reference/
- (day65、66)Vue基础、指令、实例成员、JS函数this补充、冒泡排序
目录 一.Vue基础 (一)什么是Vue (二)为什么学习Vue (三)如何使用Vue 二.Vue指令 (一)文本指令 (二)事件指令v-on (三)属性指令v-bind (四)表单指令v-model ...
- go语言变量作用域
Go 语言变量作用域 作用域为已声明标识符所表示的常量.类型.变量.函数或包在源代码中的作用范围. Go 语言中变量可以在三个地方声明: 函数内定义的变量称为局部变量 函数外定义的变量称为全局变量 函 ...
- Slickflow.NET 开源工作流引擎高级开发(六) -- WebTest 引擎接口模拟测试工具集
前言:引擎组件的接口测试不光是程序测试人员使用,而且也是产品负责人员需要用到的功能,因为在每一步流转过程中,就会完整模拟实际用户发生的场景,也就容易排查具体是程序问题还是业务问题,从而快速定位问题,及 ...
- Selenium(十二):操作Cookie、调用JavaScript、HTML5的视频播放
1. 操作Cookie 有时候我们想要验证浏览器中cookie是否正确,因为基于真实cookie的测试是无法通过白盒和集成测试的.WebDriver提供了操作Cookie的相关方法,可以读取.添加和删 ...
- Format a Property Value 设置属性值的格式
In this lesson, you will learn how to set a display format and an edit mask to a business class prop ...
- ubuntu上的安装.netcore2.1
.net core 在ubuntu上安装比较容易,依次执行正面语句即可 sudo apt-get install curl curl https://packages.microsoft.com/ke ...
- 微信小程序头像为什么是模糊的?小程序头像模糊怎么办?
「柒留言」更新的换国旗头像小功能,获取头像显示模糊... 1.头像模糊 国庆之前,更新了「柒留言」小程序加国旗头像的小功能,但是头像模糊这个坑我在发布新版之前还没解决. 一直以为是代码出了问题,各种搜 ...