STM32F407ZG的GPIO
0 GPIO配置8种模式
1.1 在 STM32 中选用 IO 模式
- 浮空输入_IN_FLOATING ——浮空输入,可以做 KEY 识别,RX1
- 带上拉输入_IPU——IO 内部上拉电阻输入
- 带下拉输入_IPD—— IO 内部下拉电阻输入
- 模拟输入_AIN ——应用 ADC 模拟输入,或者低功耗下省电
- 开漏输出_OUT_OD ——IO 输出 0 接 GND,IO 输出 1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为 1 时,IO 口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样 IO 口也就可以,但由外部电路改变为低电平或不变。可以读 IO 输入电平变化,实现 C51 的 IO 双向功能
- 推挽输出_OUT_PP ——IO 输出 0-接 GND, IO 输出 1 -接 VCC,读输入值是未知的
- 复用功能的推挽输出_AF_PP ——片内外设功能(I2C 的 SCL,SDA)
- 复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)
1.2通常有 5 种方式使用某个引脚功能,配置如下:
- 作为普通 GPIO 输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时不要使能该引脚对应的所有复用功能模块。
- 作为普通 GPIO 输出:根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引脚对应的所有复用功能模块。
- 作为普通模拟输入:配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有复用功能模块。
- 作为内置外设的输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时使能该引脚对应的某个复用功能模块。
- 作为内置外设的输出:根据需要配置该引脚为复用推挽输出或复用开漏输出,同时使能该引脚对应的所有复用功能模块。
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个寄存器即可:
- 端口模式寄存器(GPIOx_MODER)
- 端口输出类型寄存器(GPIOx_OTYPER)
- 端口上拉/下拉寄存器(GPIOx_PUPDR)
- 端口输出速度寄存器(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 ,高电平