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

news2024/11/25 22:53:21

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_InitTypeDef
	2.时钟使能   RCC_AHBlPeriphClockCmd
	3.配置结构体
	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 灯灭 写高电平
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2128944.html

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

相关文章

cesium.js 入门到精通(5)

现在我们看这个地图是 属于一个平面的 如果我们想把这个弄成 那种真实的高低起伏的 山脉 或者 其他的建筑显示 我们可以使用 添加地形 terrainProvider: new Cesium.CesiumTerrainProvider({url: "./terrains/gz",}), 这是一个参数 配置 地形 整体代码 <templa…

vba发邮件:如何设置自动化发送电子邮件?

vba发邮件的技巧有哪些&#xff1f;VBA如何调用outlook发邮件&#xff1f; VBA发邮件功能是一个非常实用的工具&#xff0c;能够帮助用户自动发送电子邮件&#xff0c;减少手动操作的时间和错误。AokSend将详细介绍如何通过VBA发邮件来实现自动化发送电子邮件的设置。 VBA发邮…

macOS上谷歌浏览器的十大隐藏功能

谷歌浏览器&#xff08;Google Chrome&#xff09;在macOS上拥有一系列强大而隐蔽的特性&#xff0c;这些功能能显著提高您的浏览体验。从多设备同步到提升安全性和效率&#xff0c;这些被低估的功能等待着被发掘。我们将逐步探索这些功能&#xff0c;帮助您最大化利用谷歌浏览…

让人眼前一亮的软件测试简历,收不到面试邀请算我输

不知道大家的简历是不是都写成下面这样 根据需求文档进行需求分析 熟悉业务流程&#xff0c;明确测试点 根据测试点设计测试用例 参与评审测试用例 提交和回归跟踪缺陷&#xff0c;确认修复完成之后关闭Bug 通过使用Fiddler进行抓包分析并定位前后端Bug 使用简单的SQL语…

【北京迅为】《STM32MP157开发板使用手册》- 第二十五章Cortex-M4 GPIO_LED实验

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

什么是线程池?从底层源码入手,深度解析线程池的工作原理

导航&#xff1a; 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码解析 目录 一、什么是线程池&#xff1f; 1.1 基本介绍 1.2 创建线程的两种方式 1.2.1 方式1&#xff1a;自定义线程池…

山峰个数【python实现】

思路见此处 def get_mountain_peaks(height):peak_count 0n len(height)if n 0:#如果一个山高都没有&#xff0c;return 0return 0for i in range(1,n-1):if height[i] > height[i-1] and height[i] > height[i1]:peak_count 1if height[0] > height[1] and n &g…

TimedRotatingFileHandler 修改 suffix 后 backupCount 设置失效无法自动删除文件

本文主要分析 TimedRotatingFileHandler 在实际使用中 backupCount 设置未生效的问题。源码分析显示&#xff0c;文件删除依赖于后缀 suffix 的正则匹配&#xff0c;如果自定义了 suffix 格式&#xff0c;必须同步更新 extMatch 的正则表达式&#xff08;保证正则表达式可以正常…

国庆出游季,南卡Runner Pro5骨传导耳机让旅途更完美!

国庆长假将至&#xff0c;无论是计划一场远行还是近郊的户外活动&#xff0c;一款适合的耳机都能让旅途更加愉快。南卡Runner Pro5骨传导耳机以其独特的设计和功能&#xff0c;成为了国庆出行的理想伴侣。 首先&#xff0c;骨传导耳机通过颅骨传递声音&#xff0c;避免了传统耳…

从理论到实战:人才培养基地如何缩短职场适应期?

在当今竞争激烈的职场环境中&#xff0c;从校园到职场的过渡对于许多新人来说充满挑战。而人才培养基地正以其独特的方式&#xff0c;努力缩短这一职场适应期。 人才培养基地首先注重理论与实践的结合。不再是单纯的知识灌输&#xff0c;而是将理论教学与实际操作紧密相连。 实…

JAVA——方法重载

方法的重载&#xff1a;多个方法在同一个类&#xff0c;方法名相同&#xff0c;参数/参数类型/参数数量不同 返回值不能作为重载条件 public class demo9_12_2 {public static void main(String[] args) {//调用&#xff0c;方法的签名getMax();getMax(10);getMax(10.9F);}//…

如何在Word中复制整页内容并保持原有格式不变?

在日常处理工作时&#xff0c;我们经常需要在Word文档中复制和粘贴内容&#xff0c;特别是在处理报告方案等文档时&#xff0c;保持复制内容的格式不变显得尤为重要。本文将详细介绍如何在Word中复制整页内容并保持原有格式不变&#xff0c;确保文档的整洁性和一致性。 方法一&…

修改jupyter notebook 默认浏览器(不动配置文件,改系统默认浏览器)

最开始把联想浏览器切到EDGE就是用的修改系统的默认浏览器。不知怎么的现在搜到的方法都是在说修改配置文件&#x1f613;。 不想动配置文件&#xff0c;平时对默认浏览器没有特殊要求的&#xff0c;可以用这个方法。 这里是把默认浏览器改成联想浏览器&#xff0c;电脑也是联…

【学习笔记】SSL密码套件的选择

往期介绍了TLS/SSL中4种密码套件&#xff0c;分别是Key Exchang、Authentication、Encryption和Hashing&#xff0c;每种密码套件下又包含多种协议。 当我们部署SSL证书时&#xff0c;我们需要选择自己支持哪种密码套件。我们可能想要用最安全的&#xff0c;但我们的潜在客户可…

一文弄懂FLink状态及checkpoint源码

一文弄懂Flink重要源码 1. Flink 状态源码1.1 valueState源码1.1.1 Update方法1.1.2 Value 方法 2. checkPoint 源码分析2.1 SourceStreamTask的checkpoint实现2.1.1 JobManager端checkpoint调度2.1.2 ScheduledTrigger定时触发checkpoint2.1.3 SourceStreamTask的Checkpoint执…

搭建 WordPress 及常见问题与解决办法

浪浪云活动链接 &#xff1a;https://langlangy.cn/?i8afa52 文章目录 环境准备安装 LAMP 堆栈 (Linux, Apache, MySQL, PHP)配置 MySQL 数据库 安装 WordPress配置 WordPress常见问题及解决办法数据库连接错误白屏问题插件或主题冲突内存限制错误 本文旨在介绍如何在服务器上…

推荐一款非常强大的表单校验库:React Hooks Form

React Hooks Form react-hook-form 是一个专注于管理 React 表单状态的库。它的核心理念是利用 React Hooks 来简化表单的处理过程。与其他表单管理库相比&#xff0c;它的优势在于性能和简洁性。它不需要在每次输入更改时重新渲染整个表单组件&#xff0c;从而提高了性能。 …

茶百道三天市值抹去三分之一:新茶饮脱下“皇帝的新装”

近日&#xff0c;随着港股通标的调整生效&#xff0c;茶百道获纳入的消息传出后&#xff0c;股价不升反降&#xff0c;单日跌幅之大引发热议。 9月10日至12日&#xff0c;茶百道在三个交易日内累计下跌36%&#xff0c;股价屡创上市以来新低。其中&#xff0c;9月11日单日跌幅更…

【强化学习系列】Gym库使用——创建自己的强化学习环境1:单一环境创建测试

目录 一、Gym类创建单一环境 1.gym类初始化 __init__() 2.gym类初始状态 reset() 3.gym类渲染可视化 render() 4.gym类运行核心 step() 5.gym类运行 在强化学习中实操中&#xff0c;有两个非常重要的设计模块&#xff0c;一个是模型网络和算法的设计&#xff0c;另一个则是用于…

计算机毕业设计选题推荐-学生在线投票系统-Java/Python项目实战(亮点:数据可视化分析、找回密码)

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…