当前位置: 首页 > news >正文

GPIO(General Purpose Input/Output)输入/输出

GPIO最简单的功能是输出高低电平;GPIO还可以被设置为输入功能,用于读取按键等输入信号;也可以将GPIO复用成芯片上的其他外设的控制引脚。

STM32F407ZGT6有8组IO。分别为GPIOA~GPIOH,除了GPIOH只有两个IO,其余每组IO有16根引脚。

1)编写代码步骤

1.看原理图确认要操作的引脚以及相关逻辑 2.GPIO初始化 申明结构体GPI0 InitiypeDef

时钟使能RCC AHBlPeriphclockCmd

配置结构体

调用初始化函数进行初始化 3.写逻辑代码

2)GPIO工作模式

输入模式,输出模式,复用,模拟

4种输入模式

(1)GPIO_Mode_IN_FLOATING 浮空输入

(2)GPIO_Mode_IPU 上拉输入

(3)GPIO_Mode_IPD 下拉输入

(4)GPIO_Mode_AIN 模拟输入

输出电流时不够会采用上下拉,开漏输出不够时用上拉,推挽输出强0或强1,开漏...

输出速度,

4种输出模式

(5)GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)

(6)GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)

(7)GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉,在M4内核是支持的,M3支持)

(8)GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉,在M4内核是支持的,M3支持)

4种最大输出速度

(1)2MHZ (低速)

(2)25MHZ (中速)

(3)50MHZ (快速)

(4)100MHZ (高速)

3)GPIO电路图

1.保护二极管

引脚上的这两个保护二极管可以将引脚外部过高或过低的电压进行钳位,当引脚电压高于VDD_FT 时,上方的二极管导通吸收这个高电压,当引脚电压低于VSS 时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁,也叫钳位二极管。

2.上拉、下拉电阻 :

  1. 阻值大概在 30~50K 欧之间,由寄存器控制。

  2. 没有干扰引脚的电压时,即没有外部的上、下拉电压,引脚的电平由引脚内部上、下拉决定,开启 内部上拉电阻工作,引脚电平为高,开启内部下拉电阻工作,则引脚电平为低。

  3. STM32 的内部上拉是一种“弱上拉”,这样的上拉电流很弱,如果有要求大电流还是得外部上拉。

  4. 当配置成上拉模式,即GPIO_PuPd_UP时,IO端口内部通过上拉电阻连接到电源VDD。 当配置成下拉模式,即GPIO_PuPd_DOWN时,IO端口内部通过下拉电阻连接到电源VSS。

  5. 一般,当检测信号发生时,被检测信号接到电源的低电位,如IO口通过按键接到VSS,此时应该配置为上拉模式,按键未按下时,读取IO状态为高电平1,按键按下时,由于外部接到VSS,此时读取IO状态为低电平0。

  6. 反之当检测信号发生时,被检测信号接到电源的高电位,如果IO口通过按键接到VDD,此时应该配置为下拉模式。按键未按下时,读取IO状态为低电平0,按键按下时,由于外部接到VDD,此时读取IO状态为高电平1。

3.施密特触发器 :

  1. 施密特触发器可作为波形整形电路,能将模拟信号波形整形为数字电路能够处理的方波波形,而且 由于施密特触发器具有滞回特性,所以可用于抗干扰,以及在闭回路正回授/负回授配置中用于实 现多谐振荡器。

  2. 输入电压高于正向阈值电压,输出为高;

  3. 当输入电压低于负向阈值电压,输出为低;

  4. 当输入在正负向阈值电压之间,输出不改变。

4.P-MOS 管和 N-MOS 管 :

  1. 控制 GPIO 的开漏输出和推挽输出两种模式。

  2. 开漏输出: 输出端相当于三极管的集电极, 要得到高电平状态需要上拉电阻才行。

  3. 推挽输出:这两只对称的 MOS 管每次只有一只导通,所以导通损耗小、效率高。

5.IO 口复用功能 :

一个 IO 口可以是通用的 IO 口功能,还可以是其他外设的特殊功能引脚,这就是 IO 口的复用功 能。

6.输入浮空 :

  1. 上拉/下拉电阻为断开状态,施密特触发器打开,输出被禁止。

  2. IO 口的电平完全是由外部电路决定。如果 IO 引脚没有连接其他的设备,引脚的电平是不可确定的。

7.输入上拉 :

  1. 上拉电阻导通,施密特触发器打开,输出被禁止。

  2. 内部上拉电阻的阻值较大,是“弱上拉”,不适合做电流型驱动。

8.输入下拉 :

  1. 下拉电阻导通,施密特触发器打开,输出被禁止。

  2. 内部下拉电阻的阻值较大,所以不适合做电流型驱动。

9.模拟功能 :

  1. 上下拉电阻断开,施密特触发器关闭,双 MOS 管也关闭。

  2. 用于 ADC、 DAC、 MCO 这类操作模拟信号的外设。

10.开漏输出 :

  1. P-MOS 被“输出控制” 控制在截止状态,只有 N-MOS 还受控制于输出寄存器 , 且上下拉电阻都断开 了,可以看成浮空输入;

  2. 从结果上看它只能输出低电平 Vss 或者高阻态

  3. 常用于 IIC 通讯(IIC_SDA) 或其它需要进行电平转换的场景

  4. 开漏输出模式下 P-MOS 一直在截止状态,即不导通,所以 P-MOS 管的栅极相当于一直接VDD。如果输出数据寄存器①的值为 0,那么 IO 引脚的输出状态②为低电平,

  5. 输出数据寄存器的逻辑 0 经过“输出控制” 的取反操作后,输出逻辑 1 到 N-MOS 管的栅极,这时 NMOS管就会导通,使得 IO 引脚连接到 VSS,即输出低电平。

  6. 如果输出数据寄存器的值为 1,经过“输出控制”的取反操作后,输出逻辑 0 到 N-MOS 管的栅极,这时 N-MOS 管就会截止。 又因为 P-MOS 管是一直截止的,使得 IO 引脚呈现高阻态,即不输出低电平,也不输出高电平。

  7. 因此要 IO 引脚输出高电平就必须接上拉电阻。 又由于 F1 系列的开漏输出模式下,内部的上下拉电阻不可用,所以只能通过接芯片外部上拉电阻的方式,实现开漏输出模式下输出高电平。如果芯片外部不接上拉电阻,那么开漏输出模式下,IO 无法输出高电平。

  8. 在开漏输出模式下, 施密特触发器是工作的,所以 IO 口引脚的电平状态会被采集到输入数据寄存器中,如果对输入数据寄存器进行读访问可以得到 IO 口的状态。也就是说开漏输出模式下,我们可以读取 IO 引脚状态。

11.推挽输出 :

  1. 推挽输出模式 P-MOS 管和 N-MOS 管都用上。

  2. 结果上看它会输出低电平 VSS 或者高电平VDD。

  3. 如果输出数据寄存器①的值为 0,经过“输出控制” 取反操作后,输出逻辑 1 到 P-MOS管的栅极,这时 P-MOS 管就会截止,同时也会输出逻辑 1 到 N-MOS 管的栅极,这时 NMOS 管就会导通,使得 IO 引脚接到 VSS,即输出低电平。

  4. 如果输出数据寄存器的值为 1 ,经过“输出控制” 取反操作后,输出逻辑 0 到 N-MOS管的栅极,这时 N-MOS 管就会截止,同时也会输出逻辑 0 到 P-MOS 管的栅极,这时 PMOS 管就会导通,使得 IO 引脚接到 VDD,即输出高电平。

  5. 当 IO 引脚在做高低电平切换时,两个管子轮流导通,一个负责灌电流,一个负责拉电流,使其负载能力和开关速度都有较大的提高。 (拉电流:数字电路输出高电平给负载提供的输出电流,是从输出端流出的电流,表征输出电流的 能力。 灌电流:数字电路输出低电平时外部负载输入的电流,是从输出端流入的电流,表征输入电流的 能力。)

  6. 施密特触发器也是打开的,我们可以读取 IO 口的电平状态。

12.开漏式复用功能 :

  1. 一个 IO 口可以是多个外设的功能引脚,选择作为其中一个选择复用功能时,引脚的状态是由对应的外设控制,而不是输出数据寄存器。

  2. 施密特触发器也是打开的,我们可以读取 IO 口的电平状态,同时外设可以读取 IO 口的信息。

13.推挽式复用功能 :

GPIO初始化

#include "led.h"
#include "stm32f4xx.h"//代码步骤
/*
1.看原理图确认要操作的引脚以及相关逻辑
2.GPIO初始化1.申明结构体  GPIO_InitTypeDef2.时钟使能   RCC_AHBlPeriphClockCmd3.配置结构体4.调用初始化函数进行初始化3.写逻辑代码
*/void LED_Init(void)//初始化
{GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//时钟使能,通电还是断电//开始配置F端口下的9号跟10号引脚。GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10; //PF9引脚GPIO_InitStructure.GPIO_Mode= GPIO_Mode_OUT; //输出模式GPIO_InitStructure.GPIO_OType=GPIO_OType_PP; //推挽输出GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL; //不进行上下拉GPIO_InitStructure.GPIO_Speed=GPIO_High_Speed; //引脚响应速度GPIO_Init(GPIOF, &GPIO_InitStructure);GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);     //set 置位1 灯灭 写高电平
}

相关文章:

GPIO(General Purpose Input/Output)输入/输出

GPIO最简单的功能是输出高低电平;GPIO还可以被设置为输入功能,用于读取按键等输入信号;也可以将GPIO复用成芯片上的其他外设的控制引脚。 STM32F407ZGT6有8组IO。分别为GPIOA~GPIOH,除了GPIOH只有两个IO,其余每组IO有…...

两个pdf合并成一个pdf,这些pdf合并小技巧了解下

在日常工作和学习中,我们经常会遇到需要将多个PDF文件合并成一个文件的情况。这不仅可以提高文件管理的效率,还能让信息展示更加集中和便捷。今天就来给大家分享几种非常简单便捷的PDF合并小技巧,一起来学习下吧。 方法一:WPS WP…...

Transformer学习(2):自注意力机制

回顾 注意力机制 自注意力机制 自注意力机制中同样包含QKV,但它们是同源(Q≈K≈V),也就是来自相同的输入数据X,X可以分为 ( x 1 , x 2 , . . , x n ) (x_1,x_2,..,x_n) (x1​,x2​,..,xn​)。 而通过输入嵌入层(input embedding)&#xff0c…...

分类预测|基于粒子群优化径向基神经网络的数据分类预测Matlab程序PSO-RBF 多特征输入多类别输出 含基础RBF程序

分类预测|基于粒子群优化径向基神经网络的数据分类预测Matlab程序PSO-RBF 多特征输入多类别输出 含基础RBF程序 文章目录 一、基本原理1. 粒子群优化算法(PSO)2. 径向基神经网络(RBF)PSO-RBF模型流程总结 二、实验结果三、核心代码…...

【React】Vite 构建 React

项目搭建 vite 官网:Vite 跟着文档走即可,选择 react ,然后 ts swc。 着重说一下 package-lock.json 这个文件有两个作用: 锁版本号(保证项目在不同人手里安装的依赖都是相同的,解决版本冲突的问题&am…...

算法刷题:300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

300. 最长递增子序列 1.dp定义:dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度 2.递推公式:if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1); 注意这里不是要dp[i] 与 dp[j] 1进行比较,而是我们要取dp[j] 1的最大值…...

【linux】一种基于虚拟串口的方式使两个应用通讯

在Linux系统中,两个应用之间通过串口(Serial Port)进行通信是一种常见的通信方式,特别是在嵌入式系统、工业自动化等领域。串口通信通常涉及到对串口设备的配置和读写操作。以下是一个基本的步骤指南,说明如何在Linux中…...

并行程序设计基础——并行I/O(3)

目录 一、多视口的并行文件并行读写 1、文件视口与指针 1.1 MPI_FILE_SET_VIEW 1.2 MPI_FILE_GET_VIEW 1.3 MPI_FILE_SEEK 1.4 MPI_FILE_GET_POSTION 1.5 MPI_FILE_GET_BYTE_OFFSET 2、阻塞方式的视口读写 2.1 MPI_FILE_READ 2.2 MPI_FILE_WRITE 2.3 MPI_FILE_READ_…...

性能测试-jmeter脚本录制(十五)

一、jmeter脚本录制(不推荐)简介: 二、jmeter脚本录制步骤 1、添加代理服务器和线程组 2、配置http代理服务器的端口和目标线程组 3修改本机浏览器代理 4、点击启动 5、每次操作页面前,修改提示文字...

关系型数据库 - MySQL I

MySQL 数据库 MySQL 是一种关系型数据库。开源免费,并且方便扩展。在 Java 开发中常用于保存和管理数据。默认端口号 3306。 MySQL 数据库主要分为 Server 和存储引擎两部分,现在最常用的存储引擎是 InnoDB。 指令执行过程 MySQL 数据库接收到用户指令…...

解锁AI写作新境界:5款工具让你的论文创作事半功倍

在这个数字化飞速发展的时代,人工智能(AI)已经不再是科幻小说中的幻想,而是实实在在地融入了我们的日常生活。特别是在学术领域,AI技术的介入正在改变传统的论文写作方式。你是否还在为撰写论文而熬夜苦战?…...

一文读懂多组学联合分析产品在医学领域的应用

疾病的发生和发展通常涉及多个层面的生物学过程,包括基因表达、蛋白质功能、代谢物变化等。传统的单一组学研究只能提供某一层面的信息,而多组学关联分析能够综合多个层面的数据,提供更全面、更深入的疾病理解。例如,通过分析患者…...

js react 笔记 2

起因, 目的: 记录一些 js, react, css 1. 生成一个随机的 uuid // 需要先安装 crypto 模块 const { randomUUID } require(crypto);const uuid randomUUID(); console.log(uuid); // 输出类似 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d 2. 使用 props, 传递参数…...

快速使用react 全局状态管理工具--redux

redux Redux 是 JavaScript 应用中管理应用状态的工具,特别适用于复杂的、需要共享状态的中大型应用。Redux 的核心思想是将应用的所有状态存储在一个单一的、不可变的状态树(state tree)中,状态只能通过触发特定的 action 来更新…...

活动系统开发之采用设计模式与非设计模式的区别-非设计模式

1、父类Base.php <?php /*** 初始化控制器* User: Administrator* Date: 2022/9/26* Time: 18:00*/ declare (strict_types 1); namespace app\controller; use app\model\common\Token; use app\BaseController; use app\BaseError; use OpenSSL\Encrypt; use app\model…...

JVM面试(六)垃圾收集器

目录 概述STW收集器的并发和并行 Serial收集器ParNew收集器Parallel Scavenge收集器Serial Old收集器Parallel Old收集器CMS收集器Garbage First&#xff08;G1&#xff09;收集器 概述 上一章我们分析了垃圾收集算法&#xff0c;那这一章我们来认识一下这些垃圾收集器是如何运…...

固态硬盘装系统有必要分区吗?

前言 现在的新电脑有哪一台是不使用固态硬盘的呢&#xff1f;这个好像很少很少了…… 有个朋友买了一台新的笔记本电脑&#xff0c;开机之后&#xff0c;电脑只有一个分区&#xff08;系统C盘500GB&#xff09;。这时候她想要给笔记本分区…… 这个真的有必要分区吗&#xf…...

网络安全架构师

网络安全架构师负责构建全面的安全框架&#xff0c;以保护组织的数字资产免受侵害&#xff0c;确保组织在数字化转型的同时维持强大的安全防护。 摩根大通的网络安全运营副总裁兼安全架构总监Lester Nichols强调&#xff0c;成为网络安全架构师对现代企业至关重要&#xff0c;…...

如何本地部署Ganache并使用内网穿透配置公网地址远程连接测试网络

目录 前言 1. 安装Ganache 2. 安装cpolar 3. 创建公网地址 4. 公网访问连接 5. 固定公网地址 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊如何本地部署Ganache并使用内网穿透配置公网地址远程连接测试网络&#xff0c;欢迎大家点赞 &a…...

算法岗/开发岗 实况

深信服算法岗一面 第一题 树的直径有哪些解法 两次dfs和树形dp&#xff0c;讲了一下树形dp的思路 因为我的简历写的比较少&#xff0c;所以面试官问我一些个人信息和擅长哪方面。 我说&#xff1a;ACM大一下打到大三&#xff0c;然后去考研。dp写的多一点&#xff0c;还有思维…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式&#xff0c;给定一个隐函数关系&#xff1a; F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 &#x1f9e0; 目标&#xff1a; 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版

1.题目描述 2.思路 当前的元素可以重复使用。 &#xff08;1&#xff09;确定回溯算法函数的参数和返回值&#xff08;一般是void类型&#xff09; &#xff08;2&#xff09;因为是用递归实现的&#xff0c;所以我们要确定终止条件 &#xff08;3&#xff09;单层搜索逻辑 二…...