【学习笔记】STM32F407探索者HAL库开发(三)IO分配

devtools/2024/11/13 9:43:30/

学习笔记】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,最后微调的原则。

分配外设说明
特定外设IICIIC 一般用到 2 根线:IIC_SCL 和 IIC_SDA(ST 叫 I2C)数据手册有 I2C_SCL、I2C_SDA 复用功能的GPIO 都可选用。
特定外设SPISPI 用到 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/UARTUSART 有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 都可选用。
特定外设USBUSB 用到 2 根线:USB_DP 和USB_DM,数据手册有 USB_DP、USB_DM 复用功能的GPIO 都可选用。
特定外设CANCAN 用到 2 根线:CAN_RX 和 CAN_TX,数据手册有 USB_DP、USB_DM 复用功能的GPIO 都可选用。
特定外设ADCADC 根据需要可选:ADC_IN0 ~ ADC_IN15,数据手册有 ADC_IN0 ~ ADC_IN15 复用功能的GPIO 都可选用。
特定外设DACDAC 根据需要可选:DAC_OUT1 / DAC_OUT2,DAC 固定为:DAC_OUT1 使用 PA4、DAC_OUT2 使用 PA5。
特定外设SDIOSDIO 一般用到 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 硬件设计优化

  1. 资源合理利用
    STM32 微控制器通常具有丰富的 I/O 引脚,但不同型号的芯片在 I/O 数量和功能上会有所差异。了解 IO 分配可以帮助设计师根据具体项目需求,合理选择芯片型号,并充分利用可用的 I/O 资源,避免资源浪费。
  2. 外设连接
    在硬件设计中,需要将各种外设连接到 STM32 的 I/O 引脚。了解 IO 分配可以确保正确地连接外设,避免引脚冲突和错误连接。例如,将 UART 通信模块连接到正确的 I/O 引脚,以实现与其他设备的通信。
  3. 信号完整性
    合理的 IO 分配可以提高信号完整性。通过将高速信号和敏感信号分配到合适的 I/O 引脚,可以减少信号干扰和噪声,提高系统的稳定性和可靠性。例如,将高速数字信号分配到具有较短布线长度和较少干扰的 I/O 引脚。

3.2 软件编程

  1. 驱动开发
    了解 IO 分配对于编写 STM32 的驱动程序非常重要。在驱动开发中,需要根据具体的 I/O 引脚配置来初始化和控制外设。例如,配置 GPIO 引脚为输入或输出模式,设置中断触发方式等。
  2. 代码可维护性
    合理的 IO 分配可以提高代码的可维护性。通过使用有意义的引脚名称和注释,可以使代码更加清晰易懂,便于后续的维护和升级。例如,将连接到 LED 的 GPIO 引脚命名为 “LED_PIN”,并在代码中添加注释说明其功能。
  3. 跨平台移植
    如果需要将代码移植到不同型号的 STM32 芯片上,了解 IO 分配可以使移植过程更加顺利。通过使用相对的引脚编号或宏定义,可以在不同芯片之间轻松调整 I/O 分配,减少移植工作量。

3.3 系统性能提升

  1. 功耗管理
    合理的 IO 分配可以帮助实现功耗管理。通过将不使用的 I/O 引脚设置为低功耗模式,可以降低系统的整体功耗。例如,将未连接外设的 GPIO 引脚设置为输入下拉模式,以减少漏电流。
  2. 中断处理
    了解 IO 分配可以优化中断处理。通过将中断源连接到合适的 I/O 引脚,并正确配置中断优先级和触发方式,可以提高系统的响应速度和实时性。例如,将紧急中断信号连接到具有较高中断优先级的 I/O 引脚。
  3. 并行处理
    在某些应用中,需要同时处理多个任务。了解 IO 分配可以实现并行处理,提高系统的性能。例如,将多个传感器连接到不同的 I/O 引脚,并使用中断或 DMA 方式同时采集数据。

4 F1/F7/H7芯片的IO分配差异

不同系列的 STM32 芯片的 IO 分配存在一些差异,主要体现在以下方面。

4.1 引脚数量和分组

  1. STM32F1 系列:以 STM32F103ZET6 芯片为例,它是 144 脚的芯片,具有 GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF 和 GPIOG 七组 GPIO 口,每组 16 个 IO 口,共有 112 个 IO 口可供编程使用。
  2. STM32F4 系列:如 STM32F407ZGT6 芯片,一共分成 A - G 组,每一组里面有 16 个 IO 口(以 0 - 15 进行编号),所以这款芯片一共有 112 个 GPIO 口。
  3. STM32H7 系列:以 STM32H750VBT6 芯片为例,它是 100 脚的芯片,IO 口有 82 个,分为 5 组,分别是 GPIOA - GPIOE,其中 GPIOA - GPIOE 有 16 * 5 = 80 个 IO 口,另外两个是 PH0 和 PH1,用于连接外部高速晶振。

4.2 功能模式

不同系列的 STM32 芯片都具备多种 GPIO 功能模式,但在一些细节上可能存在差异。常见的功能模式包括:

4.2.1 输入模式

  1. 浮空输入:引脚的电平完全由外部电路决定,如果引脚没有连接其他设备,其输入电平不确定,可用于按键检测等,如 STM32F1、F4、H7 系列都有此模式。
  2. 上拉输入:内部上拉电阻导通,默认引脚为高电平,但上拉电流较小,为 “弱上拉”,在需要外部上拉电阻时可节省一个外部电阻,各系列基本都具备。
  3. 下拉输入:内部下拉电阻导通,默认引脚为低电平,同样为 “弱下拉”,STM32F1、F4、H7 等系列具有此模式。
  4. 模拟输入:用于 ADC 采集或 DAC 输出,或者在低功耗下省电,施密特触发器关闭,双 MOS 管也关闭,常见于各系列芯片。

4.2.2 输出模式

  1. 开漏输出:输出端相当于三极管的集电极,所以要得到高电平必须要接上拉电阻,这种模式得到的输出电流比较大,适合做电流型的驱动,其吸收电流的能力相对强(一般在20ma左右)。 一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变供 上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS 电平输出等。这种模式下,芯片内部的 P - MOS 管被关闭,N - MOS 管受输出寄存器控制。当输出寄存器为 “0” 时,N - MOS 导通,引脚输出低电平;当输出寄存器为 “1” 时,N - MOS 截止,引脚呈现高阻态。可以实现 “线与” 功能,常用于 IIC 等需要多设备共享总线的通信场景,如 STM32F1、F4、H7 系列均支持。
    在这里插入图片描述

  2. 推挽输出
    可以输出高、低电平,连接数字器件;简单点来说就是这种模式下,你的输出是严格的数字信号,所以可以直接连接数字器件,但是由于不能获得大电流的输出,不能用来接需要大电流驱动的外设。推挽电路是由两个参数相同的三极管或者MOS组成,这种电路的优点是既提高了电路的负载能力,又提高了开关速度。芯片内部的 P - MOS 和 N - MOS 管根据输出寄存器的值交替导通。当输出 “0” 时,P - MOS 截止,N - MOS 导通,引脚连接到 VSS(地),输出低电平;当输出 “1” 时,P - MOS 导通,N - MOS 截止,引脚连接到 VDD,输出高电平。该模式驱动能力较强,可输出较大电流,常用于驱动 LED 灯等外设,各系列基本都支持。
    在这里插入图片描述

4.2.3 复用功能模式

  1. 复用开漏输出:GPIO 口被用作第二功能时的配置情况,此时输出为开漏模式,常用于片上外设功能,如 STM32F1、F4、H7 系列中的一些特定外设引脚。
  2. 复用推挽输出:GPIO 口用作第二功能时,输出为推挽模式,也是用于片上外设功能,不同系列的具体复用功能引脚会有所不同。

4.3 电气特性:

  1. 工作电压:不同系列的 STM32 芯片工作电压范围可能有所不同。例如,STM32F1 的工作电压为 2V ≤ VDD ≤ 3.6V,而 STM32H7 的工作电压范围可能会有所差异。
  2. 输出电流:单个 GPIO 的最大输出电流也可能存在差别。比如,有的系列单个 GPIO 最大输出电流为 25mA,但不同系列在具体的电流驱动能力上可能会根据芯片的性能和定位有所调整。
  3. 引脚的电平兼容性:部分 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探索者开发板


http://www.ppmy.cn/devtools/100436.html

相关文章

RAG与LLM原理及实践(14)---- Python + MinIO + Kafka进阶

目录 背景 根因分析 配置 构造 创建 network 构造 zookeeper 构造 kafka 参数构造 原理解析 图解 全过程解析 工具使用 kafkacat 查看 broker python 实现 python send + kafka recv python 代码 kafka recv 运行效果 python recv + kafka send python 代…

力扣最热一百题——6.三数之和

目录 题目链接:15. 三数之和 - 力扣(LeetCode) 题目描述 示例 提示 解法一:双指针 代码分析 总结 没啥多说的,就是最近CS根本上不了分谢谢。 题目链接:15. 三数之和 - 力扣(LeetCode&…

鸿蒙(API 12 Beta3版)【DRM系统管理(ArkTS)】数字版权保护

DRM系统管理(MediaKeySystem)支持MediaKeySystem实例管理、设备DRM证书申请与处理、会话实例管理、离线媒体密钥管理、获取DRM度量统计信息、设备属性等。在使用DRM Kit功能时,先查询设备是否支持对应DRM解决方案的DRM功能。在DRM Kit里DRM解…

游戏学(ludology):概念、现状与发展展望?

游戏学(ludology):概念、现状与发展展望? 李升伟 以下是关于“游戏学(ludology):概念、现状与发展展望”的综述: 一、概念 游戏学(ludology)是专门研究…

ffplay源码分析(二)结构体VideoState

在多媒体的世界里,播放器是离用户最近的一环,它将数字编码的音频和视频数据转化为生动的视听体验。ffplay 播放器作为一款强大而备受关注的工具,其背后隐藏着一系列精妙的结构体,它们协同工作,共同完成了从数据读取、解…

汽车的UDS诊断02

UDS的不同服务: 1)物理寻址和功能寻址 can总线上往往有多个ECU,诊断设备可以和某个ECU通信,也可以和多个ECU通信,通过物理寻址和功能寻址来解决这个问题,只针对请求报文: 物理寻址:就是诊断仪与ECU之间点对点通信 功能寻址:就是诊断仪与多个ECU之间一对多信 我们的…

地平线—征程2(Journey 2-J2)芯片详解(22)—I2S

写在前面 本系列文章主要讲解地平线征程2(Journey 2-J2)芯片的相关知识,希望能帮助更多的同学认识和了解征程2(Journey 2-J2)芯片。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 错过其他章节的同学可以电梯直达目录↓↓↓ 地平线—征程2(Journey 2-J2)芯片详解…

android gradle.properties 的作用

android gradle.properties 的作用 1 将多个应用程序打包成一个单一的应用程序(超级应用或聚合应用)在里面配置打包的版本,版本号,比如 version_code110 RELEASE_VERSION3.0.5 DEFAULT_BUILD_TYPE_NAMERelease 2 配置一些在线库&a…