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

【学习笔记】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.rhkb.cn/news/409385.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7-6 分段函数2

计算分段函数&#xff0c;测试数据分别是-1、5、12。 输入格式: 输入一个数。 输出格式: 直接输出保留6位小数的结果&#xff0c;没有其它任何附加字符&#xff0c;没有宽度控制。 输入样例: 11输出样例: 0.999912输入样例: 7输出样例: 8.000000 #include <stdio.h…

java之类和对象2

封装的概念&#xff1a;将数据和操作数据的方法进行有机结合&#xff0c;隐藏对象的属性和实现细节&#xff0c;仅对外公开接口来和对象进行 交互 。&#xff08;主要通过类和访问权限符进行封装&#xff09; 访问权限符的介绍&#xff1a; public:相同/不同包中的子类/非子类…

足球规则指南,快速入门一看就懂

保姆级足球规则指南&#xff0c;旨在帮助初学者快速入门&#xff0c;一看就懂。以下是精简而全面的指南&#xff1a; 一、比赛场地与球员 场地&#xff1a;足球比赛在长方形场地上进行&#xff0c;长度为101米&#xff0c;宽度为64米。场地两端设有球门&#xff0c;高2.44米&…

【git bash编码错误解决方案】启动conda环境时报错,其他terminal却正常

&#x1f50e;嘿&#xff0c;这里是慰慰&#x1f469;&#x1f3fb;‍&#x1f393;&#xff0c;会发各种类型的文章&#xff0c;智能专业&#xff0c;从事前端&#x1f43e; &#x1f389;如果有帮助的话&#xff0c;就点个赞叭&#xff0c;让我开心一下&#xff01;&#x1f…

2024网络安全学习路线 非常详细 推荐学习

关键词&#xff1a;网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线 首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有几门&#xff0c;有些人会倒在学习 linux 系统及命令的路上&#…

MacOS安装 Python 和 PyCharm

MacOS安装 Python3.12.5 和 PyCharm 小阿呜有话说一、MacOS安装PythonPython官网下载 二、MacOS安装PyCharmPyCharm官网下载 叮嘟&#xff01;这里是小啊呜的学习课程资料整理。好记性不如烂笔头&#xff0c;今天也是努力进步的一天。一起加油进阶吧&#xff01; 小阿呜有话说 …

CR80清洁卡:一款磁卡读卡设备广泛适用的清洁利器!

CR80清洁卡&#xff0c;专为磁卡读卡设备设计&#xff0c;是一款高效且广泛适用的清洁工具。CR80是国际标准中定义的卡片尺寸&#xff0c;即长85.60mm、宽53.98mm&#xff0c;这种尺寸的卡片广泛应用于身份证、银行卡、门禁卡、会员卡等多种场合。因此&#xff0c;CR80清洁卡特…

【PyQt】切换界面的实现

前言一、介绍二、代码2.1 QStackedWidget2.1.1 代码2.1.2 运行结果展示 2.2 QTabWidget2.2.1 代码2.2.2 运行结果展示 2.3 QDockWidget2.3.1 代码2.3.2 运行结果展示 PULSE结果 总结 前言 实现几个界面的切换展示的效果。 一、介绍 在 PyQt 中实现一个主界面包含其他子界面的…

Vue3 获取农历(阴历)日期,并封装日历展示组件

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;我是码喽的自我修养&#xff01;今天给大家分享vue3项目中使用 chinese-lunar-calendar 插件获取农历(阴历)日期&#xff0c;并封装了日历展示组件&#xff01;提供了具体的代码帮助大家深入理解&#xff0c;彻底掌握&#…

【SpringBoot】11 多数据源(MyBatis:dynamic-datasource)

介绍 多数据源&#xff1a;指的是一个单一应用程序中涉及了两个及以上的数据库&#xff0c;这种配置允许应用程序根据业务需求灵活地管理和操作不同的数据库。 需求 一个应用服务中&#xff0c;连接多个数据库&#xff0c;有本地的也有远程的&#xff0c;有MysQL、Oracle、P…

Python和MATLAB梯度下降导图

&#x1f3af;要点 寻找局部最小值普通最小二乘法和随机梯度下降的动量线性回归媒体广告销售光学字符识别和最小化均方误差男女医疗费用最快速下降方向函数优化等高线图可视化共轭梯度下降可视化损失函数、动量、涅斯特洛夫动量、权衰减量化不确定性拓扑结构算法分类中权重归一…

Threejs学习-三维坐标系、相机控件

坐标系&#xff1a; Three.js 使用的是右手坐标系&#xff0c;x 轴朝右&#xff0c;y 轴朝上&#xff0c;z 轴朝向自己。 相机控件轨道控制器 相机控件OrbitControls 通过相机控件OrbitControls实现旋转缩放预览效果。 // 设置相机控件轨道控制器OrbitControls const contr…

OpenCV几何图像变换(6)计算反转仿射变换函数invertAffineTransform()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 反转一个仿射变换。 该函数计算由 23 矩阵 M 表示的逆仿射变换&#xff1a; [ a 11 a 12 b 1 a 21 a 22 b 2 ] \begin{bmatrix} a_{11} & a…

windows vs2022 MFC使用webview2嵌入网页

Microsoft Edge WebView2 控件允许在本机应用中嵌入 web 技术(HTML、CSS 以及 JavaScript)。 WebView2 控件使用 Microsoft Edge 作为绘制引擎&#xff0c;以在本机应用中显示 web 内容。 一、通过菜单“项目”-“管理NuGet程序包”&#xff0c;下载相关包 二、安装 Microsof…

结构化与面向对象

人类认识世界总是循序渐进的过程&#xff0c;软件工程也一样&#xff0c;从最开始的单兵作战&#xff0c;再到软件作坊&#xff0c;直到如今的大规模软件开发&#xff0c;软件工程从业者不断总结实践中存在的问题以及解决途径&#xff0c;逐渐形成了一系列的软件工程方法&#…

ZooKeeper--基于Kubernetes部署ZooKeeper

ZooKeeper 服务 服务类型: 无头服务&#xff08;clusterIP: None&#xff09;&#xff0c;这是 StatefulSet&#xff08;有状态集&#xff09;必需的配置。 端口: 2181 (客户端): 用于客户端连接。 2888 (跟随者): 用于 ZooKeeper 服务器之间的连接。 3888 (领导者): 用于领导者…

Linux查看jvm相关参数以及设置调优参数

1、查看jvm相关参数 1.1、查看Java进程命令 jcmd会显示出来对应的Java进程id 1.2、查看堆内存各个区域的使用大小、具体大小和GC次数以及耗时 jstat -gc 4036145jstat -gc 进程id 各个参数的含义。 如上图,4036145的进程,FGCT是0.452,FGC是4.平均每次full gc耗时0.11秒。 …

Android13系统源码内置App并通过AIDL调用获取内置存储卡的真实大小

jix 进行从事Android系统源码开发不得不在原有的系统上内置自己的App。通过内置App一般都需要调用些系统才能访问的系统级App。App的部署和调试需要依赖源码系统。通过命令 &#xff1a; mm 来实现。 第三方App想调用内置的app需要通过跨进程调用。 这里通过AIDL来实现跨进程…

Qt第二十章 数据库操作

文章目录 Qt操作数据库QSqlDataBaseQSqlQuery执行SQL语句 QSqlRecordQSqlField数据库模型QSqlQueryModelQSqlTableModelQSqlRelationalTableModel 编译MySql驱动msvc版本MySql客户端程序部署 Qt操作数据库 需要在cmakelist加上Sql模块 QSqlDataBase 可以通过静态成员查看支持的…

苹果已删除照片的恢复方法有哪些?盘点几种实用办法

苹果设备上的照片往往是珍贵的回忆&#xff0c;但不小心删除照片的情况时有发生。幸运的是&#xff0c;苹果提供了几种方法来帮助用户恢复已删除的照片。本文将详细介绍几种有效的恢复方法&#xff0c;帮助您找回那些重要的照片。 方法一&#xff1a;通过“最近删除”文件夹恢复…