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

news2024/9/20 22:26:05

【学习笔记】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.coloradmin.cn/o/2073160.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes 外部 etcd 集群的快速 Docker Compose 部署指南

一、背景 在高可用 Kubernetes 部署中,需要单独部署外部 etcd 集群,而不是使用 kubeadm 默认在 master 节点上部署的 etcd。以下是关于这一配置场景的详细记录。 二、etcd简介 etcd 是一个高可用的分布式键值存储系统,主要用于存储和管理配…

使用Qt+Visual Stuidio写一个简单的音乐播放器(1)

1.使用QMediaPlayer播放音乐 第三步:在代码头部加上: #include <QtMultimedia/QMediaPlayer> // VS向.pro文件添加代码的方式 #pragma execution_character_set("utf-8") // qt支持显示中文 QMediaPlayer类是一个高级媒体播放类。它可以用来播放歌曲、电…

leetcode 893. Groups of Special-Equivalent Strings

原题链接 You are given an array of strings of the same length words. In one move, you can swap any two even indexed characters or any two odd indexed characters of a string words[i]. Two strings words[i] and words[j] are special-equivalent if after any …

力扣: 设计链表

文章目录 需求代码结尾 需求 你可以选择使用单链表或者双链表&#xff0c;设计并实现自己的链表。 单链表中的节点应该具备两个属性&#xff1a;val 和 next 。val 是当前节点的值&#xff0c;next 是指向下一个节点的指针/引用。 如果是双向链表&#xff0c;则还需要属性 p…

Java 的数组详解

数组的定义 数组是相同类型数据的有序集合 数组描述的是相同类型的若干个数据&#xff0c;按照一定的先后次序排列组合而成 其中&#xff0c;每一个数据称作一个数组元素&#xff0c;每个数组元素可以通过一个下标(编号、标记)来访问它&#xff0c;下标是从 0 开始的&#xf…

100套动画PPT模版分享

100套动画PPT模板 目录下载链接 目录 下载链接 「动画模板」链接&#xff1a;https://pan.quark.cn/s/73ea2523f198 点击下载

中小型企业如何管理文档?8款工具来帮你

文章介绍了以下几个工具&#xff1a;PingCode、Worktile、氚云、泛微、中通天鸿、Tower、知因智慧、SharePoint。 在中小型互联网企业中&#xff0c;文档知识库的管理常常让人头疼。团队成员散布在不同的地点&#xff0c;文档分散在各种工具中&#xff0c;查找信息变得异常困难…

Linux启动流程和Systemd特性

文章目录 内核设计流派linux启动流程1.硬件加电自检2.启动加载器bootloader3.加载kernel4.init初始化5.用户终端启动 systemdsystemd特性systemd的unitunit配置文件 systemctl管理系统服务service unit服务状态 service unit文件格式Unit段Service段Install段 内核设计流派 1.…

资源第二篇:bundle 的config.json 文件内容的解析

简介 本篇文章主要是对bundle包的核心文件config.json 的分析。config.json记录着整个bundle包的具体信息&#xff0c;并通过config.json 去解析整个bundle包。 bundle 目录下的文件结构 import 存放所有的json。场景、预制体、texture2D配置等jsonnative 存放所有的实际资源…

分子属性梯度引导的3D分子生成扩散模型 TAGMOL - 评测

TAGMoL 是一个基于分子属性条件引导扩散的 3D 分子生成模型&#xff0c;适合在给定靶标蛋白质的情况下&#xff0c;可以生成一系列满足目标特性&#xff08;分子属性&#xff0c;binding affinity&#xff09;的候选分子。 一、背景介绍 TAGMoL 来源于新德里 Molecule AI, 以及…

ESP32 出现 failed to load RF 报错

前言 个人邮箱&#xff1a;zhangyixu02gmail.com 正文 周五我测试程序没有问题&#xff0c;板子放在桌子上就没动过了。周一过来的时候&#xff0c;重新烧录程序&#xff0c;就发现出现如下报错。最终发现是电池过放导致电池损坏功率不够&#xff0c;因此 RF 无法启动&#…

探寻少儿自闭症的解决之道

自闭症&#xff0c;又称孤独症谱系障碍&#xff0c;是一种广泛性发育障碍&#xff0c;给无数家庭带来了沉重的负担。然而&#xff0c;随着科学技术的不断进步和人们对自闭症认识的逐步深入&#xff0c;越来越多的方法和途径正在被探索出来&#xff0c;为自闭症的解决带来了希望…

RocketMQ 与 Spring Cloud Stream之事务消息配置

1 引言 RocketMQ的事务消息设计是为了解决分布式系统中数据一致性的问题。在分布式系统中&#xff0c;由于数据可能分布在不同的服务或节点上&#xff0c;因此需要一种机制来确保数据的最终一致性。事务消息通过引入本地事务和消息状态的关联&#xff0c;确保了消息的发送与本…

【什么是“Binary“二进制文件?】

“Binary”二进制文件是计算机文件的一种形式。部件文件是开发人员编写的源代码文件&#xff0c;还未被编译成可执行的机器代码&#xff0c;通常具有如.c、.cpp、.java 等扩展名。对象文件是部件文件经过编译器编译生成的中间文件&#xff0c;包含了部件文件的机器代码和符号表…

链表OJ题——环形链表2

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 环形链表2 题目描述&#xff1a;在链表有环的基础上&#xff0c;找出环的入口点。 二、解题思路 三、解题代码

移动端爬虫学习记录

免责声明 本文旨在探讨移动端爬虫技术的应用和挑战&#xff0c;仅供教育和研究用途。请确保在合法合规的框架内使用爬虫技术&#xff0c;遵循相关法律法规和网站的使用条款。作者不对因使用本文内容而产生的任何法律或安全问题承担责任。 1、初识移动端爬虫 学习移动端爬虫的原…

.NET 开发的高性能内网穿透工具

目录 前言 什么是NSmartProxy&#xff1f; 项目特点 运行原理 客户端安装 服务端安装 使用案例 项目地址 最后 前言 在许多情况下&#xff0c;我们需要从外部网络访问内部网络中的服务&#xff0c;比如家里的服务器或者公司的内部资源。这时内网穿透工具就可以帮助我们…

【吊打面试官系列-Memcached面试题】什么是二进制协议,我该关注吗?

大家好&#xff0c;我是锋哥。今天分享关于 【什么是二进制协议&#xff0c;我该关注吗&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 什么是二进制协议&#xff0c;我该关注吗&#xff1f; 关于二进制最好的信息当然是二进制协议规范&#xff1a; 1000道 互…

【AI+编程】只需1句提示词0代码生成前端展示效果

最近被Vercel发布的V0 编程效果惊艳到了&#xff0c; 不管是前端开发 还是立志成为全栈工程师的 同学&#xff0c;不可错过。 官网地址&#xff1a;https://v0.dev/chat/ 代码生成工具很多&#xff0c;不管是github copilot、阿里的通义灵码&#xff0c; 腾讯云的AI代码助手…

python 多进程 多线程 程序

这个纯粹为了增加理解&#xff0c;将很多比较好的资料进行归纳总结。 1、理论汇总 并发和并行 image.png 多进程和多线程 同步和异步 同步&#xff1a;所谓同步&#xff0c;就是在发出一个功能调用时&#xff0c;在没有得到结果之前&#xff0c;该调用就不会返回。 异步…