2 STM32F407ZG的GPIO

本文详细介绍了STM32F407ZG的GPIO配置,包括8种IO模式的使用,如浮空输入、带上拉输入、模拟输入、开漏输出等,并列举了配置GPIO的各种寄存器,如GPIOx_MODER、GPIOx_OTYPER等。通过配置这些寄存器,可以实现GPIO的不同功能,如普通GPIO输入/输出、模拟输入和内置外设功能。此外,还提到了GPIO复用功能及其在端口资源最大化利用中的作用。
摘要由CSDN通过智能技术生成

0 GPIO配置8种模式

在这里插入图片描述

1.1 在 STM32 中选用 IO 模式

  1. 浮空输入_IN_FLOATING ——浮空输入,可以做 KEY 识别,RX1
  2. 带上拉输入_IPU——IO 内部上拉电阻输入
  3. 带下拉输入_IPD—— IO 内部下拉电阻输入
  4. 模拟输入_AIN ——应用 ADC 模拟输入,或者低功耗下省电
  5. 开漏输出_OUT_OD ——IO 输出 0 接 GND,IO 输出 1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为 1 时,IO 口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样 IO 口也就可以,但由外部电路改变为低电平或不变。可以读 IO 输入电平变化,实现 C51 的 IO 双向功能
  6. 推挽输出_OUT_PP ——IO 输出 0-接 GND, IO 输出 1 -接 VCC,读输入值是未知的
  7. 复用功能的推挽输出_AF_PP ——片内外设功能(I2C 的 SCL,SDA)
  8. 复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)

1.2通常有 5 种方式使用某个引脚功能,配置如下:

  1. 作为普通 GPIO 输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时不要使能该引脚对应的所有复用功能模块。
  2. 作为普通 GPIO 输出:根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引脚对应的所有复用功能模块。
  3. 作为普通模拟输入:配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有复用功能模块。
  4. 作为内置外设的输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时使能该引脚对应的某个复用功能模块。
  5. 作为内置外设的输出:根据需要配置该引脚为复用推挽输出或复用开漏输出,同时使能该引脚对应的所有复用功能模块。

1 GPIO相关配置寄存器

在这里插入图片描述

1.1 端口模式寄存器(GPIOx_MODER)

在这里插入图片描述

STM官方的定义
在这里插入图片描述

1.2 端口输出类型寄存器(GPIOx_OTYPER)

在这里插入图片描述
STM官方的定义
在这里插入图片描述

1.3 端口输出速度寄存器(GPIOx_OSPEEDR)

在这里插入图片描述
STM官方的定义
在这里插入图片描述
在这里插入图片描述

1.4 端口上拉/下拉寄存器(GPIOx_PUPDR)

在这里插入图片描述
STM官方的定义
在这里插入图片描述

1.5 端口输入数据寄存器(GPIOx_IDR)

在这里插入图片描述

1.6 GPIO 端口输出数据寄存器 (GPIOx_ODR)

在这里插入图片描述

1.7 端口置位/复位寄存器(GPIOx_BSRR)

在这里插入图片描述

1.8 GPIO 端口配置锁定寄存器 (GPIOx_LCKR)

在这里插入图片描述
在这里插入图片描述

1.9 GPIO 复用功能低位寄存器 (GPIOx_AFRL)

在这里插入图片描述

在这里插入图片描述
端口复用器:
STM32F4的大部分端口都具有复用功能。
所谓复用,就是一些端口不仅仅可以做为通用IO口,还可以复用为一
些外设引脚,比如PA9,PA10可以复用为STM32F4的串口1引脚。
作用:最大限度的利用端口资源
在这里插入图片描述
所有IO口都可以作为中断输入

1.10 GPIO 复用功能高位寄存器 (GPIOx_AFRH)

在这里插入图片描述

2 GPIO的配置

程序里面配置的时候只需要配置以下4个寄存器即可:

  1. 端口模式寄存器(GPIOx_MODER)
  2. 端口输出类型寄存器(GPIOx_OTYPER)
  3. 端口上拉/下拉寄存器(GPIOx_PUPDR)
  4. 端口输出速度寄存器(GPIOx_OSPEEDR)
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE); //使能GPIOD的时钟
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//输出
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;  //推挽输出
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_DOWN;  //下拉
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz; //高速GPIO
GPIO_Init(GPIOE,&GPIO_InitStructure);	
GPIO_SetBits(GPIOE,GPIO_Pin_6); //GPIOE9 ,高电平
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

常驻客栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值