【学习笔记】STM32F407探索者HAL库开发(三)IO分配
- 1 STM32F407 IO资源分配表
- 2 STM32F407ZGT6 引脚定义
- 3 IO分配的重要性
- 3.1 硬件设计优化
- 3.2 软件编程
- 3.3 系统性能提升
- 4 F1/F7/H7芯片的IO分配差异
- 4.1 引脚数量和分组
- 4.2 功能模式
- 4.2.1 输入模式
- 4.2.2 输出模式
- 4.2.3 复用功能模式
- 4.3 电气特性:
- 4.4 复用功能的多样性
- 4.5 速度等级
1 STM32F407 IO资源分配表
IO分配就是在完成最小系统设计以后,根据项目需要对 MCU的 IO口进行分配,连接不同的器件,从而实现整体功能。比如: GPIO、 IIC、 SPI、 SDIO、 FSMC、 USB、中断等。遵循:先分配特定外设 IO,再分配通用 IO,最后微调的原则。
分配 | 外设 | 说明 |
---|---|---|
特定外设 | IIC | IIC 一般用到 2 根线:IIC_SCL 和 IIC_SDA(ST 叫 I2C)数据手册有 I2C_SCL、I2C_SDA 复用功能的GPIO 都可选用。 |
特定外设 | SPI | SPI 用到 4 根线:SPI_CS/MOSI/MISO/SCK 一般 SPI_CS 我们使用通用 GPIO 即可,方便挂多个 SPI 器件数据手册有 SPI_MOSI/MISO/SCK 复用功能的GPIO 都可选用。 |
特定外设 | TIM | 根据需要可选:TIM_CH1/2/3/4/ETR/1N/2N/3N/BKIN 等,数据手册有 TIM_CH1/2/3/4/ETR/1N/2N/3N/BKIN 复用功能的GPIO 都可选用。 |
特定外设 | USART/UART | USART 有USART_TX/RX/CTS/RTS/CK 信号,UART 仅有UART_TX/RX 两个信号,一般用到 2 根线:U(S)ART_TX 和U(S)ART_RX,数据手册有 U(S)ART_TX/RX 复用功能的GPIO 都可选用。 |
特定外设 | USB | USB 用到 2 根线:USB_DP 和USB_DM,数据手册有 USB_DP、USB_DM 复用功能的GPIO 都可选用。 |
特定外设 | CAN | CAN 用到 2 根线:CAN_RX 和 CAN_TX,数据手册有 USB_DP、USB_DM 复用功能的GPIO 都可选用。 |
特定外设 | ADC | ADC 根据需要可选:ADC_IN0 ~ ADC_IN15,数据手册有 ADC_IN0 ~ ADC_IN15 复用功能的GPIO 都可选用。 |
特定外设 | DAC | DAC 根据需要可选:DAC_OUT1 / DAC_OUT2,DAC 固定为:DAC_OUT1 使用 PA4、DAC_OUT2 使用 PA5。 |
特定外设 | SDIO | SDIO 一般用到 6 根线:SDIO_D0/1/2/3/SCK/CMD,数据手册有 SDIO_D0/1/2/3/SCK/CMD 复用功能的GPIO 都可选用。 |
特定外设 | FSMC | 根据需要可选:FSMC_D0~15 / A0~25/ NBL0~1 / NE1~4 / NCE2~3 / NOE / NWE / NWAIT / CLK 等。数据手册有 FSMC_D0~15 / A0~25 / NBL0~1 / NE1~4 / NCE2~3 / NOE / NWE/NWAIT/CLK 复用功能的GPIO 都可选用。 |
通用 | GPIO | 在完成特定外设的IO 分配以后,就可以进行GPIO 分配了,比如将按键、LED、蜂鸣器等仅需要高低电平读取/输出的外设连接到空闲的普通GPIO 即可。 |
微调 | IO | 微调主要包括两部分:1,当 IO 不够用的时候,通用GPIO 和特定外设可能要共用 IO 口。2,为了方便布线,可能要调整某些IO口的位置。这两点,得根据实际情况进行调整设置,做到:尽可能多的可以同时使用所有功能,尽可能方便布线。 |
2 STM32F407ZGT6 引脚定义
3 IO分配的重要性
3.1 硬件设计优化
- 资源合理利用
STM32 微控制器通常具有丰富的 I/O 引脚,但不同型号的芯片在 I/O 数量和功能上会有所差异。了解 IO 分配可以帮助设计师根据具体项目需求,合理选择芯片型号,并充分利用可用的 I/O 资源,避免资源浪费。 - 外设连接
在硬件设计中,需要将各种外设连接到 STM32 的 I/O 引脚。了解 IO 分配可以确保正确地连接外设,避免引脚冲突和错误连接。例如,将 UART 通信模块连接到正确的 I/O 引脚,以实现与其他设备的通信。 - 信号完整性
合理的 IO 分配可以提高信号完整性。通过将高速信号和敏感信号分配到合适的 I/O 引脚,可以减少信号干扰和噪声,提高系统的稳定性和可靠性。例如,将高速数字信号分配到具有较短布线长度和较少干扰的 I/O 引脚。
3.2 软件编程
- 驱动开发
了解 IO 分配对于编写 STM32 的驱动程序非常重要。在驱动开发中,需要根据具体的 I/O 引脚配置来初始化和控制外设。例如,配置 GPIO 引脚为输入或输出模式,设置中断触发方式等。 - 代码可维护性
合理的 IO 分配可以提高代码的可维护性。通过使用有意义的引脚名称和注释,可以使代码更加清晰易懂,便于后续的维护和升级。例如,将连接到 LED 的 GPIO 引脚命名为 “LED_PIN”,并在代码中添加注释说明其功能。 - 跨平台移植
如果需要将代码移植到不同型号的 STM32 芯片上,了解 IO 分配可以使移植过程更加顺利。通过使用相对的引脚编号或宏定义,可以在不同芯片之间轻松调整 I/O 分配,减少移植工作量。
3.3 系统性能提升
- 功耗管理
合理的 IO 分配可以帮助实现功耗管理。通过将不使用的 I/O 引脚设置为低功耗模式,可以降低系统的整体功耗。例如,将未连接外设的 GPIO 引脚设置为输入下拉模式,以减少漏电流。 - 中断处理
了解 IO 分配可以优化中断处理。通过将中断源连接到合适的 I/O 引脚,并正确配置中断优先级和触发方式,可以提高系统的响应速度和实时性。例如,将紧急中断信号连接到具有较高中断优先级的 I/O 引脚。 - 并行处理
在某些应用中,需要同时处理多个任务。了解 IO 分配可以实现并行处理,提高系统的性能。例如,将多个传感器连接到不同的 I/O 引脚,并使用中断或 DMA 方式同时采集数据。
4 F1/F7/H7芯片的IO分配差异
不同系列的 STM32 芯片的 IO 分配存在一些差异,主要体现在以下方面。
4.1 引脚数量和分组
- STM32F1 系列:以 STM32F103ZET6 芯片为例,它是 144 脚的芯片,具有 GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF 和 GPIOG 七组 GPIO 口,每组 16 个 IO 口,共有 112 个 IO 口可供编程使用。
- STM32F4 系列:如 STM32F407ZGT6 芯片,一共分成 A - G 组,每一组里面有 16 个 IO 口(以 0 - 15 进行编号),所以这款芯片一共有 112 个 GPIO 口。
- STM32H7 系列:以 STM32H750VBT6 芯片为例,它是 100 脚的芯片,IO 口有 82 个,分为 5 组,分别是 GPIOA - GPIOE,其中 GPIOA - GPIOE 有 16 * 5 = 80 个 IO 口,另外两个是 PH0 和 PH1,用于连接外部高速晶振。
4.2 功能模式
不同系列的 STM32 芯片都具备多种 GPIO 功能模式,但在一些细节上可能存在差异。常见的功能模式包括:
4.2.1 输入模式
- 浮空输入:引脚的电平完全由外部电路决定,如果引脚没有连接其他设备,其输入电平不确定,可用于按键检测等,如 STM32F1、F4、H7 系列都有此模式。
- 上拉输入:内部上拉电阻导通,默认引脚为高电平,但上拉电流较小,为 “弱上拉”,在需要外部上拉电阻时可节省一个外部电阻,各系列基本都具备。
- 下拉输入:内部下拉电阻导通,默认引脚为低电平,同样为 “弱下拉”,STM32F1、F4、H7 等系列具有此模式。
- 模拟输入:用于 ADC 采集或 DAC 输出,或者在低功耗下省电,施密特触发器关闭,双 MOS 管也关闭,常见于各系列芯片。
4.2.2 输出模式
-
开漏输出:输出端相当于三极管的集电极,所以要得到高电平必须要接上拉电阻,这种模式得到的输出电流比较大,适合做电流型的驱动,其吸收电流的能力相对强(一般在20ma左右)。 一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变供 上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS 电平输出等。这种模式下,芯片内部的 P - MOS 管被关闭,N - MOS 管受输出寄存器控制。当输出寄存器为 “0” 时,N - MOS 导通,引脚输出低电平;当输出寄存器为 “1” 时,N - MOS 截止,引脚呈现高阻态。可以实现 “线与” 功能,常用于 IIC 等需要多设备共享总线的通信场景,如 STM32F1、F4、H7 系列均支持。
-
推挽输出
可以输出高、低电平,连接数字器件;简单点来说就是这种模式下,你的输出是严格的数字信号,所以可以直接连接数字器件,但是由于不能获得大电流的输出,不能用来接需要大电流驱动的外设。推挽电路是由两个参数相同的三极管或者MOS组成,这种电路的优点是既提高了电路的负载能力,又提高了开关速度。芯片内部的 P - MOS 和 N - MOS 管根据输出寄存器的值交替导通。当输出 “0” 时,P - MOS 截止,N - MOS 导通,引脚连接到 VSS(地),输出低电平;当输出 “1” 时,P - MOS 导通,N - MOS 截止,引脚连接到 VDD,输出高电平。该模式驱动能力较强,可输出较大电流,常用于驱动 LED 灯等外设,各系列基本都支持。
4.2.3 复用功能模式
- 复用开漏输出:GPIO 口被用作第二功能时的配置情况,此时输出为开漏模式,常用于片上外设功能,如 STM32F1、F4、H7 系列中的一些特定外设引脚。
- 复用推挽输出:GPIO 口用作第二功能时,输出为推挽模式,也是用于片上外设功能,不同系列的具体复用功能引脚会有所不同。
4.3 电气特性:
- 工作电压:不同系列的 STM32 芯片工作电压范围可能有所不同。例如,STM32F1 的工作电压为 2V ≤ VDD ≤ 3.6V,而 STM32H7 的工作电压范围可能会有所差异。
- 输出电流:单个 GPIO 的最大输出电流也可能存在差别。比如,有的系列单个 GPIO 最大输出电流为 25mA,但不同系列在具体的电流驱动能力上可能会根据芯片的性能和定位有所调整。
- 引脚的电平兼容性:部分 STM32 系列的芯片引脚对不同电平的兼容性不同。例如,STM32H750 的绝大部分 IO 口都兼容 5V,凡是有 FT 标志的,都是兼容 5V 电平的 IO 口,可以直接接 5V 的外设;而没有 FT 标志的引脚则不建议接 5V,否则可能烧坏 MCU。而其他系列的芯片可能在引脚的电平兼容性上有不同的规定和限制。
4.4 复用功能的多样性
不同系列的 STM32 芯片由于面向的应用场景和具备的外设资源不同,其 GPIO 引脚的复用功能也会有很大差异。例如,STM32F1 系列可能在某些特定引脚具有特定的复用功能,如串口、SPI 等外设的对应引脚;而 STM32F4 系列由于其性能和外设资源的丰富性,可能在更多的引脚或者特定的引脚组上具有更复杂多样的复用功能,如以太网、USB 等高速外设的引脚复用。STM32H7 系列则可能在高性能计算和高速通信等方面具有独特的复用功能配置,以满足其在高端应用场景下的需求。
4.5 速度等级
不同系列的 STM32 芯片 GPIO 的速度等级可能不同。一些高性能的系列可能支持更高的速度等级,以满足对数据传输速度要求较高的应用场景,例如高速通信接口、实时数据采集等。而较低性能的系列可能速度等级相对较低,适用于对速度要求不那么高的一般性应用。在配置 GPIO 时,需要根据具体的应用需求和芯片的数据手册来选择合适的速度等级,以确保信号的正确传输和系统的稳定性。
注:笔记内容来自正点原子官方HAL库开发教程,配合STM32F407探索者开发板