一,io口资源
STM32F407有7组IO,分别为GPIOA~GPIOG,每组IO有16个IO口,则有112个IO口。其中IO口的基本结构如下:
二,gpio工作方式
1,四种输入模式
输入浮空
输入上拉
输入下拉
模拟输入
2,四种输出模式
开漏输出
开漏复用
推挽输出
推挽复用
3,引脚功能
1)作为普通 GPIO 输入:根据需要配置该引脚为浮空输入、 带弱上拉输入或带弱下拉输入,同时不要使能
该引脚对应的所有复用功能模块。
2)作为普通 GPIO 输出:根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引脚对应的所有复
用功能模块。
3)作为普通模拟输入:配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有复用功能模块。
4)作为内置外设的输入:根据需要配置该引脚为浮空输入、 带弱上拉输入或带弱下拉输入,同时使能该引
脚对应的某个复用功能模块。
5)作为内置外设的输出:根据需要配置该引脚为复用推挽输出或复用开漏输出,同时使能该引脚对应的所
有复用功能模块。
三,GPIO寄存器
stm32f4是通过十个寄存器设置一组(16个)io口的
1,端口模式寄存器(GPIOx_MODER)
该寄存器32位都可用,每个io口占用2位,可以被设置为4种模式
00:输入模式; 01:输出模式; 10:复用功能模式; 11:模拟模式;
2,端口输出类型寄存器(GPIOx_OTYPER)
该寄存器16位可用,每个io口占用1位,可以被设置为2种模式(0,1)
0:推挽输出; 1:开漏输出;
3,端口输出速度寄存器(GPIOx_OSPEEDR)
该寄存器32位都可用,每个io口占用2位,可以被设置为4种模式
00:2MHZ; 01:25MHZ; 10:50MHZ; 11:30 pF 时为 100 MHz(15 pF 时为 80 MHz 输出(最大速度));
4,端口上拉下拉寄存器(GPIOx_PUPDR)
该寄存器32位都可用,每个io口占用2位,可以被设置为4种模式
00:无上下拉; 01:上拉; 10:下拉; 11:保留;
5,端口输入数据寄存器(GPIOx_IDR)(只读,不可被设置)
该寄存器16位可用,每个io口占用1位,
这些位为只读形式,只能在字模式下访问。它们包含相应 I/O 端口的输入值。
6,端口输出数据寄存器(GPIOx_ODR)
该寄存器16位可用,每个io口占用1位
端口输出数据 这些位可通过软件读取和写入
注意区分与GPIOx_BSRR寄存器的区别(https://blog.csdn.net/alanzjl/article/details/43857963);
7,端口置位/复位寄存器(GPIOx_BSRR)
该寄存器32位都可用:0-15为该组16个io口的置位控制(0:不执行任何操作;1:置位)
16-31为该组16个io口的复位控制(0:不执行任何操作;1:复位)
8,端口配置锁存寄存器(GPIOx_LCKR)
位 15:0 LCKy: 端口 x 锁定位 y (Port x lock bit y) (y= 0..15)
这些位都是读/写位,但只能在 LCKK 位等于“0”时执行写操作。
0:端口配置未锁定
1:端口配置已锁定
位 16 LCKK[16]: 锁定键 (Lock key)
可随时读取此位。可使用锁定键写序列对其进行修改。
0:端口配置锁定键未激活。
1:端口配置锁定键已激活。直到 MCU 复位时,才锁定 GPIOx_LCKR 寄存器。
9,复位功能寄存器(GPIOx_AFRL & GPIOx_AFRH)
该寄存器32位都可用,每个io口占用4位,可以被设置为16种复用模式中的一种
GPIOx_AFRL 用于0-7位的端口配置
GPIOx_AFRH 用于8-15位的端口配置
四,设置步骤
1. 使能相关时钟
2. 设置相应的IO口为输入或输出
3. 设置输入\输出的类型
4. 设置输出的速度(如果设置为输入,此步跳过)
5. 如果输出速度>=50M,开启补偿单元
6. 设置上拉下拉寄存器
7. 通过复位置位寄存器和输入输出数据寄存器进行操作