全面掌握stm32的GPIO知识

发布者:快乐旅行最新更新时间:2024-02-28 来源: elecfans关键字:stm32  GPIO 手机看文章 扫描二维码
随时随地手机看文章

1 初学者重要提示

本文主要是以stm32H7系列为主。

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

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

2 GPIO功能简介

STM32H7的GPIO特性如下:

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

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

GPIO速度等级设置。

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

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

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

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

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

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

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 模拟模式

3.1 推挽输出

5617e5f0-5a68-11ed-a3b6-dac502259ad0.png

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

3.2 开漏输出

562669fe-5a68-11ed-a3b6-dac502259ad0.png

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

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

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

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

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

3.3 复用推挽和开漏

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

3.4 四种输入模式

5630a144-5a68-11ed-a3b6-dac502259ad0.png

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

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

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

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

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

563ab300-5a68-11ed-a3b6-dac502259ad0.png

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

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

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

5642a376-5a68-11ed-a3b6-dac502259ad0.png

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

564de420-5a68-11ed-a3b6-dac502259ad0.png

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

5658c142-5a68-11ed-a3b6-dac502259ad0.png

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

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补偿单元。

6 GPIO兼容CMOS和TTL电平

CMOS和TTL电平兼容问题也是一个比较重要的知识点

567dc8b6-5a68-11ed-a3b6-dac502259ad0.png

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

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

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

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

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

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

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


关键字:stm32  GPIO 引用地址:全面掌握stm32的GPIO知识

上一篇:在STM32实现命令行
下一篇:STM32串口DMA接收与发送

推荐阅读最新更新时间:2024-11-11 21:31

STM32学习---位带操作总结
*简介:*在计算机中所有的数据都是以二进制的形式储存的。位运算其实就是直接对在内存中的二进制数进行操作,因此处理数据的速度非常快。 在实际编程中,如果能巧妙运用位操作,完全可以达到四两拨千金的效果,正是因为这些优点,所以位操作的应用非常广泛,同时掌握位带操作对于我们理解STM32的原理非常有用。 ** *过渡:***为了方便大家理解,有必要补充一些基础知识。 1.计算中的符号位: 计算机的符号位就是在处理二进制数据时,专门规定有一位,是用来确定数据的正负,符号位是1表示负数,是0表示正数。当然这里说的是有符号数,这个符号位通常是数据的最高位,如8位数据,左边第一位是符号位,后面7位用来表示数据大小。 2.补码: 注意,此处
[单片机]
STM32--CAN简单接收和发送
前面对CAN原理进行了讲解,这里我用一个简单的例子来说明CAN的使用。我使用的STM32芯片是STM32F103ZE,几个基本的配置是: 1.配置CAN时钟: /* CAN Periph clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE); 2.CAN管脚配置,这里使用的PB11,PB12管脚: /* Configure CAN pin: RX */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitSt
[单片机]
使用Keil下载Hex文件进STM32
  前言   初学STM32时,是通过串口1把Hex文件下载进STM32的,需要一个串口模块,而且还要设置BOOT0和BOOT1电平,然后通过FlyMcu软件进行下载,这也是一种不错的方法,这里我要介绍的是使用JLink调试器和Keil MDK-ARM来下载Hex文件,无需源代码,只需要一个调试器。   所需要的工具和软件   Hex文件,如Demo_STM32.hex   Keil软件,v4或v5版本,如Keil v5.16a   ARM调试器,Jlink或ST-Link,如Jlink v9   STM32开发板,如STM32F103RET6   1.准备一个完整的工程   准备一个完整的工程,注意,这个工程的芯片型号、
[单片机]
使用Keil下载Hex文件进<font color='red'>STM32</font>
STM32关于printf重定向到串口
简单地说:想在mdk 中用printf,需要同时重定义fputc函数和避免使用semihosting(半主机模式), 标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出设备相关的函数. 例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下: #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { U
[单片机]
如何设计一个以stm32为控制核心的数字示波器?
随着集成电路的发展和数字信号处理技术的采用,数字 示波器 已成为集显示、测量、运算、分析、记录等各种功能于一体的智能化测量仪器。数字示波器在性能上也逐渐超越模拟示波器,并有取而代之的趋势。与模拟示波器相比,数字示波器不仅具有可存储波形、体积小、功耗低,使用方便等优点,而且还具有强大的信号实时处理分析功能。因此,数字示波器的使用越来越广泛。目前我国国内自主研发的高性能数字示波器还是比较少,广泛使用的仍是国外产品。因此,有必要对高性能数字示波器进行广泛和深入研究。 本文通过采用高速高性能器件,设计了一实时采样率为60 msa/s的宽带数字示波器。 1 数字示波器的性能参数设计 数字存储示波器的指标很多,包括采样率、带宽、灵敏度
[测试测量]
如何设计一个以<font color='red'>stm32</font>为控制核心的数字示波器?
STM32如何生成lib以供二次开发
相关方法: 0 STM32最新固件库(3.5)封装lib加工程模版 1 stm32 教你如何编译出LIB文件 2 stm32如何生成lib 3 教你如何在stvd中生成lib文件,好处你懂的~ 4 谁知道在RVMDK下怎样生成 lib 文件? 5 STM32之如何封装自己的lib 库
[单片机]
STM32笔记(三)---寄存器映射--BSRR分析
GPIO与引脚区别? GPIO包含在引脚内(引脚内还有电源、晶振等特殊功能引脚),除GPIO拓展内容即为单片机最小系统 GPIO功能如何检索? 通过芯片datasheet中的pin definitions去检索GPIO功能 输出控制 推挽输出(ODR寄存器输出1时推出3.3V/25mA,输出0时拉入GND) 开漏输出(只能输出低电平,开漏时P-MOS不工作,N-MOS工作;开漏输出就是不输出电压,控制输出低电平时引脚接地,控制输出高电平时引脚既不输出高电平,也不输出低电平,为高阻态。如果外接上拉电阻,则在输出高电平时电压会拉到上拉电阻的电源电压。这种方式适合在连接的外设电压比单片机电压低的时候。) 补充说
[单片机]
<font color='red'>STM32</font>笔记(三)---寄存器映射--BSRR分析
STM32之CANTTCAN模式浅析
1 前言 传统CAN 采用事件触发消息传输机制,CSMA/ CD+ AMP( Carrier-Sense Mult iple Access w ith Co llision Detect ion and Arbit ration on Message Priorit ies, 载波侦听、多路访问、冲突检测、优先级仲裁) 介质访问控制机制, 即多个消息同时发送时, 按照消息标识符的优先级顺序, 低优先级消息自动退出, 高优先级消息继续发送。这种介质访问方式提高了网络的利用率和高优先级消息的实时性, 但在重负载CAN 中, 低优先级消息经常由于总线冲突而被迫退出发送, 导致低优先级消息传输时延长, 且传输时延不可预测,
[单片机]
<font color='red'>STM32</font>之CANTTCAN模式浅析
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved