STM32F4 IO

STM32F4 每组通用 I/O 端口包括 4 32 位配置寄存器(MODEROTYPEROSPEEDRPUPDR)、 2 32 位数据寄存器(IDR ODR)、 1 32 位置位/复位寄存器 (BSRR)
1 32 位锁定寄存器 (LCKR) 2 32 位复用功能选择寄存器(AFRH AFRL)等。
这样, STM32F4 每组 IO 10 32 位寄存器控制,其中常用的有 4 个配置寄存器+2 个数据寄存器+2 个复用功能选择寄存器, 共 8 个,如果在使用的时候,每次都直接操作寄存器配置
IO,代码会比较多,也不容易记住,所以 ALIENTEK 提供 GPIO_Set GPIO_AF_Set 两个函数,用于 IO 配置和复用功能设置。

STM32F1 一样, STM32F4 IO 可以由软件配置成如下 8 种模式中的任何一种:
1、 输入浮空
2、 输入上拉
3、 输入下拉
4、 模拟输入
5、 开漏输出
6、 推挽输出
7、 推挽式复用功能
8、 开漏式复用功能

首先看 MODER 寄存器,该寄存器是 GPIO 端口模式控制寄存器,用于控制 GPIOxSTM32F4 最多有 9 IO,分别用大写字母表示,即 x=A/B/C/D/E/F/G/H/I,下同) 的工作模
式,该寄存器各位描述如表 5.2.5.1 所示:

该寄存器各位在复位后,一般都是 0(个别不是 0,比如 JTAG 占用的几个 IO 口),也就是默认条件下一般是输入状态的。每组 IO 下有 16 IO 口,该寄存器共 32 位,每 2 个位控制 1
IO,不同设置所对应的模式见表 5.2.5.1 描述。

然后看 OTYPER 寄存器,该寄存器用于控制 GPIOx 的输出类型,该寄存器各位描述见表5.2.5.2 所示:

该寄存器仅用于输出模式,在输入模式(MODER[1:0]=00/11 时)下不起作用。 该寄存器低 16 位有效,每一个位控制一个 IO 口,复位后,该寄存器值均为 0
然后看 OSPEEDR 寄存器,该寄存器用于控制 GPIOx 的输出速度,该寄存器各位描述见表5.2.5.3 所示:

 该寄存器也仅用于输出模式,在输入模式(MODER[1:0]=00/11 时)下不起作用。该寄存 器每 2 个位控制一个 IO 口,复位后,该寄存器值一般为 0
然后看 PUPDR 寄存器,该寄存器用于控制 GPIOx 的上拉/下拉,该寄存器各位描述见表5.2.5.4 所示:

该寄存器每 2 个位控制一个 IO 口,用于设置上下拉,这里提醒大家, STM32F1 是通过 ODR寄存器控制上下拉的,而 STM32F4 则由单独的寄存器PUPDR控制上下拉,使用起来更加灵活。
复位后,该寄存器值一般为 0

然后看 ODR 寄存器,该寄存器用于控制 GPIOx 的输出,该寄存器各位描述见表 5.2.5.5 所示:

该寄存器用于设置某个 IO 输出低电平(ODRy=0)还是高电平(ODRy=1),该寄存器也仅在输出模式下有效,在输入模式(MODER[1:0]=00/11 时)下不起作用。。
然后看 IDR 寄存器,该寄存器用于读取 GPIOx 的输入,该寄存器各位描述见表 5.2.5.6 所示:

该寄存器用于读取某个 IO 的电平,如果对应的位为 0(IDRy=0),则说明该 IO 输入的是低电平,如果是 1(IDRy=1),则表示输入的是高电平。

AFRL 寄存器各位描述如图 5.2.5.1 所示:

 AFRL 寄存器每 4 个位控制 1 IO,用于选择 AF0~AF15,寄存器总共 32 位,即可以控制8 IO,另外 8 IO AFRH 寄存器控制,这里我们就不再贴出了。

STM32F4 的绝大部分 IO 口,都兼容 5V,至于到底哪些是兼容 5V 的,请看 STM32F40x 的数据手册(注意是数据手册,不是中文参考手册!!),见表:

Table 6 STM32F40x pin and ball definitions,凡是有 FT/FTf 标志的,都是兼容 5V电平的 IO 口,可以直接接 5V 的外设(注意:如果引脚设置的是模拟输入模式,则不能接 5V)
凡是不是 FT/FTf 标志的,大家都不要接 5V 了,可能烧坏 MCU

原文地址:https://www.cnblogs.com/caiya/p/15078079.html