本来觉得F407跟F103没啥区别,只是性能更强了一些,仔细了解了一下,还是有差异的,尤其是在GPIO口配置的过程中,下面简单记录下。
1.时钟不同
STM32F103的GPIO是挂载APB2总线时钟上,而F407是在AHB1总线上(注意是AHB1总线,所以使能函数和时钟地址都要改变),AHB是高速总线,性能相对更好,因此应使用RCC_AHB1PeriphClockCmd(, )函数进行时钟使能。
上图来源于STM32F4XX参考手册
2.工作模式的配置方式不同
STM32的GPIO口总共有八种工作模式,F103可直接对GPIO_Mode配置,而STM32F407需要分别对GPIO_Mode,GPIO_OType,GPIO_PuPd进行配置,如下表:
配置 模式 | 模拟 输入 | 浮空 输入 | 下拉输 入 | 上拉输入 | 开漏输出 | 推挽输出 | 复用开漏输出 | 复用推挽输出 |
Mode | AN | IN | IN | IN | OUT | OUT | AF | AF |
OType | * | * | * | * | OD | PP | OD | PP |
PuPd | NOPULL | NOPULL | DOWN | UP | * | * | * | * |
(1)输出的PuPd通常可以分为三种,可以选择上拉,下拉,或者)浮空,可以根据需求进行选择
(2)作为内设的输出时,可根据需求进行引脚复用模式的配置
(3)上表中配置模式选择均为简写,具体配置时应对应GPIO库文件中寄存器地址定义对应的变量。
3.GPIO配置的一般思路
结构体定义——时钟使能——模式选择——速率配置——初始化——设置初值
STM32F103的初始化
STM32F407的初始化
4.GPIO端口位的完整的配置表(来源于数据手册,供参考)
GPIO 端口模式寄存器 (GPIOx_MODER) (x = A..I)
00:输入(复位状态)
01:通用输出模式
10:复用功能模式
11:模拟模式
GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x = A..I)
0:输出推挽(复位状态)
1:输出开漏
GPIO 端口上拉/下拉寄存器 (GPIOx_PUPDR) (x = A..I/)
00:无上拉或下拉
01:上拉
10:下拉
11:保留