你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 GPIO详解

[复制链接]
STMCU 发布时间:2020-9-7 15:35
下文将根据STM32F207参考手的中GPIO框图讲解GPIO功能。



01  
I/O接口电路
带FT的是说明可以容忍5V电压的,I/O电路框图

1.png

1.1、普通输入
普通输入模式下,上拉和下拉电阻(微弱)的存在,共分3种模式

  • 浮空输入,不使能上拉电阻,不使能下拉电阻
  • 上拉输入,使能上拉电阻
  • 下拉输入,使能下拉电阻


2.png

从上面框图得知,输出缓存是被禁止的

1.2、普通输出
普通输入模式下,上拉和下拉电阻(微弱)的存在。主要是由于P-MOS和N-MOS的存在分为下列两种模式

  • 开漏模式:输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,端口保持高阻态(P-MOS 不会被使能)
  • 推挽输出: 输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,激活 P-MOS


3.png

从上面的框图得知,

1、在普通输出模式中,TTL施密特触发器是打开的,所以读输入数据寄存器,可以得到 I/O 的状态。

2、驱动GPIO输出,我们可以采用输出寄存器也可以使用位段

1.3、模拟输入
模拟输入上拉电阻和下拉电阻是没有用的

高阻态下模拟输入
4.png

从上面框图得知

  • 弱上拉和下拉电阻禁止
  • 施密特触发器停用,施密特触发器输出值强制为0
  • 输出缓存被禁止
  • 读输入数据期存器, 读到的值为0


注意:IO配置成模拟输入时,不能容忍5V电压

1.4、复用输出
复用输出框图
6.png

从上图框图中可以得到5条信息

  • 输出缓存被来自外设的信号驱动(发送数据器使能和数据),也即是位设置/清除寄存器和输出数据寄存器在这里是无用的
  • 由于P-MOS和N-MOS使能,仍然可以配置成推挽输出和开漏输出
  • 上拉电阻和下拉电阻使能,可以进行配置
  • TTL施密特触发器使能
  • 可以通过读输入数据寄存器, 可以得到 I/O 的状态



02 管脚复用和重映射

管脚复用和重映射(其实是一回事),STMF10X系列叫重映射,STMF20X系列叫管脚复用,也就是复用功能

2.1、STMF10X系列
STM32上有很多I/O口,也有很多的内置外设想I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。

7.png

三个红框交汇处.STM32F103VCT6这个CPU的USART1接的是PB6/PB7但是上电初始化后默认功能并非是USART1.所以想要用串口功能.必须用端口重映射。

STM32的单片机每个功能模块有自己的时钟系统,所以要想要调用STM32单片机的功能模块时必须先配置对应时钟,然后才能去操作相应的功能模块.端口重映射也一样.如图示:
8.png

重映射步骤为:

1. 打开重映射时钟和USART重映射后的I/O口引脚时钟,


  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO,ENABLE);
复制代码

2. I/O口重映射开启.
  1. O_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
复制代码

3. 配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.

  1. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6;
  2. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;
  3. GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
  4. GPIO_Init(GPIOB,&GPIO_InitStructure);

  5. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;
  6. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;
  7. GPIO_Init(GPIOB,&GPIO_InitStructure);
复制代码

2.1STMF20X系列
STMF20X系列(包括之后的40系列)是没有重映射的说法,只有统一的称为复用功能。

9.png

从上图看出F10X系列会有专门的普通IO寄存器,会有复用寄存器,使用库函数如下:



  1. void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalStateNewState)
复制代码



10.png



从上图F20X系列使用了复用功能寄存器,然不是像F10系列存在专门的复用寄存器,F20X系列GPIO复用的功能更广。

备注:要先配置GPIO为复用功能,再调用复用的库函数

11.png


03 相关名词解释


GPIO模式名字解释
GPIO_Mode
全拼
描述
GPIO_Mode_AIN
Analogue  In
模拟输入
GPIO_Mode_IN_FLOATING
Float  In
浮空输入
GPIO_Mode_IPD
In Pull Down
下拉输入
GPIO_Mode_IPU
In Pull Up
上拉输入
GPIO_Mode_Out_OD
Out Drain
开漏输出
GPIO_Mode_Out_PP
Push Pull
推挽输出
GPIO_Mode_AF_OD
Alternate Function
复用开漏输出
GPIO_Mode_AF_PP
Alternate Function
复用推挽输出

F20系列:GPIO共有四种功能

  1. typedef enum
  2. {
  3.   GPIO_Mode_IN   = 0x00, /*!< GPIO Input Mode */
  4.   GPIO_Mode_OUT  = 0x01, /*!< GPIO Output Mode */
  5.   GPIO_Mode_AF   = 0x02, /*!< GPIO Alternate function Mode */
  6.   GPIO_Mode_AN   = 0x03  /*!< GPIO Analog Mode */
  7. }GPIOMode_TypeDef;
复制代码


GPIO状态

推挽输出


可以输出强高低电平,连接数字器件。


开漏输出

只可以输出强低电平,高电平需要外部电阻拉高,输出端相当于三极管的集电极,要得到高电平,需要上拉电阻,适合做电流型的驱动,其吸收电流negligence相对强(一般20ma以内)


高阻态

高阻态是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定的。如果设置为浮空输入,也就是既没有上拉电阻,没有下拉电阻。可以认为是高阻态。



5.png
收藏 评论0 发布时间:2020-9-7 15:35

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版