STM32标准库——(2)GPIO输出

news2024/11/20 22:42:57

1.GPIO简介

  • GPIO(General Purpose Input Output)通用输入输出口
  • 可配置为8种输入输出模式
  • 引脚电平:0V~3.3V部分引脚可容忍5V
  • 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
  • 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等

每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器
(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存
器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。
根据数据手册中列出的每个I/O端口的特定硬件特征,GPIO端口的每个位可以由软件分别配置成
多种模式。

  • ─ 输入浮空
  • ─ 输入上拉
  • ─ 输入下拉
  • ─ 模拟输入
  • ─ 开漏输出
  • ─ 推挽式输出
  • ─ 推挽式复用功能
  • ─ 开漏复用功能

每个I/O端口位可以自由编程,然而必须按照32位字访问I/O端口寄存器(不允许半字或字节访
问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器进行读/更改的独立访问;这
样,在读和更改访问之间产生IRQ时不会发生危险。

2.GPIO结构

2.1 GPIO基本结构

  • 寄存器是一段特殊的存储器 内核可以通过APB2总线对寄存器进行读写 这样就可以完成输出电平和读取电平的功能 寄存器的每一位对应一个引脚 其中输出寄存器写1 对应的引脚就会输出高电平 写0 就输出低电平 输入寄存器读取为1 就证明对应的端口目前是高电平 读取为0 就是低电平 由于STM32是32位的单片机 所以STM32内部的寄存器是32位的 如图可以看到 这个端口只有16位 所以这个寄存器只有低16位对应的有端口 高16位是没有用到的
  • 驱动器是用来增加信号的驱动能力的 寄存器只负责存储数据 如果要进行点灯这样的操作 还是需要驱动器来负责增大驱动能力

2.2 GPIO系统结构

在STM32中 所有的GPIO都是挂载在APB2外设总线上的

2.3 GPIO位结构

IO端口位的基本结构

5伏兼容I/O端口位的基本结构

  1. 保护二极管:对输入电压进行限幅 上面二极管接VDD(3.3V) 下面接VSS(0V) 如果输入电压比3.3V还要高 那上方二极管就会导通 输入电压产生的电流就会直接流入VDD而不会流入内部电路 这样就可以避免过高的电压对内部这些电路产生伤害 如果输入电压比0V还要低 那下方二极管会导通 电流会从VSS直接流出去 而不会从内部电路汲取电路 也是可以保护内部电路的 如果输入电压在0~3.3V之间 两个二极管均不会导通 这时二极管对电路没有影响 这就是保护二极管的用途
  2. 上面导通下面断开 就是上拉输入模式 下面导通上面断开 就是下拉输入模式 两个都断开 就是浮空输入模式(引脚的输入电平极易受到外界干扰而改变) 接入上拉电阻 当引脚悬空时 还有上拉电阻来保证引脚的高电平 所以上拉输入又可以称作是默认为高电平的输入模式 下拉也同理 就是默认为低电平的输入模式
  3. 模拟输入:连接到ADC上 因为ADC需要接收模拟量 所以这跟线是接到肖特基触发器前面
  4. 复用功能输入:连接到其他需要读取端口的外设上的 比如串口的输入引脚等 这根线接收的是数字量 所以在肖特基触发器后面
  5. 输入数据寄存器:用程序读取输入数据寄存器某一位的数据 就可以知道端口的输入电平
  6. 输出数据寄存器:普通的IO口输出 写这个数据寄存器的某一位就可以操作对应的某个端口
  7. 位设置/清楚寄存器:用来单独操作输出数据寄存器的某一位 而不影响其他位 (库函数所使用的方法)
  8.  因为输出数据寄存器同时控制16个端口 并且这个寄存器只能整体读写 所以如果想单独控制其中某一个端口而不影响其他端口的话 就需要一些特殊的操作模式 第一种方式是先读出这个寄存器 然后用按位与、按位或的方式更改某一位 最后再将更改后的数据写回去 在C语言中就是&=和|=的操作 该方法比较麻烦 效率不高 对于IO口的操作而言不太合适 第二种就是通过设置这个位设置/位清除寄存器 如果我们对某一位进行置1操作 在位设置寄存器的对应位写1即可 剩下不需要操作的写0 这样它内部就会有电路 自动将输出数据寄存器中对应位置为1 而剩下写0的位则保持不变 这样就保证了只操作其中某一位而不影响其他位 并且这是一步到位的操作 如果想对某一位进行清0操作 就在位清除寄存器对应位写1即可 这样内部电路就会把这一位清0 第三种是读写STM32中的”位带“区域 位带作用跟51单片机的位寻址作用差不多 在STM32中 专门分配的有一段地域区域 这段地址映射了RAM和外设寄存器所有的位 读写这段地址中的数据 就相当于读写所映射位置的某一位
  9. MOS管是一种电子开关 信号来控制开关的导通和关闭 开关负责将IO口接到VDD或者VSS 在这里可以选择推挽、开漏或关闭三种输出方式 推挽输出模式:P-MOS和N-MOS均有效 数据寄存器为1时 上管导通 下管断开 输出直接接到VDD 就是输出高电平 数据寄存器为0时 上管断开 下管导通 输出直接接到VSS 就是输出低电平 该模式下 高低电平均有较强的驱动能力 所以推挽输出模式也可以叫做强推输出模式 同时STM32对IO口有绝对的控制权 高低电平都有STM说了算 开漏输出模式:P-MOS无效 只有N-MOS在工作 数据寄存器为1 下管断开 这时输出相当于断开 也就是高阻模式 数据寄存器为0时 下管导通 输出直接接到VSS 也就是输出低电平 这种模式下 只有低电平有驱动能力 高电平是没有驱动能力的 该模式可以作为通信协议的驱动方式 比如I2C通信的引脚 就是使用的开漏模式 在多机通信的情况下 这个模式可以避免各个设备的相互干扰 另外开漏模式还可以使用输出5V的电平信号 比如在IO口外接一个上拉电阻到5V的电源 当输出低电平时 由内部的N-MOS直接接到VSS 当输出高电平时 由外部的上拉电阻拉高至5V 这样就可以输出5V的电平信号 用于兼容一些5V电平的设备 关闭模式:当引脚配置为输入模式的时候 两个MOS管都无效 也就是输出关闭 端口的电平由外部信号来控制

3.GPIO模式

通过配置GPIO的端口配置寄存器,端口可以配置成以下8种模式:

端口配置

输出模式位

3.1 浮空输入

浮空输入模式下,I/O端口的电平信号直接进入输入数据寄存器。也就是说,I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。所以在要读取外部信号时通常配置IO口为浮空输入模式。

3.2 上拉输入

上拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平可以保持在高电平;并且在I/O端口输入为低电平的时候,输入端的电平为低电平。

3.3 下拉输入

下拉输入模式下,IO口工作方式刚好和上拉模式相反。I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平可以保持在低电平;并且在I/O端口输入为高电平的时候,输入端为高电平。

3.4 模拟输入

模拟输入模式下,I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块,比如ADC模块等等。(除了模拟输入这个模式会关闭数字的输入功能 在其他7个模式中 所有的输入都是有效的)

3.5 开漏输出

开漏输出模式下,通过设置位设置/清除寄存器或者输出数据寄存器的值,控制MOS管的导通。这里要注意N-MOS管,当设置输出的值为高电平的时候,N-MOS管处于关闭状态,此时I/O端口的电平就不会由输出的高低电平决定,而是由I/O端口外部的上拉或者下拉决定;当设置输出的值为低电平的时候,N-MOS管处于开启状态,此时I/O端口的电平就是低电平。同时,I/O端口的电平也可以通过输入电路进行读取;注意,I/O端口的电平不一定是输出的电平。通常使用开漏输出时外部要加一个上拉电阻。

3.6 开漏复用输出

开漏复用输出模式,与开漏输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的。

3.7 推挽输出

推挽输出模式下,通过设置位设置/清除寄存器或者输出数据寄存器的值,控制P-MOS管和N-MOS管的导通来控制IO口输出高电平还是低电平。这里要注意P-MOS管和N-MOS管,当设置输出的值为1的时候,P-MOS管处于开启状态,N-MOS管处于关闭状态,此时I/O端口的电平就由P-MOS管决定为高电平;当设置输出的值为0的时候,P-MOS管处于关闭状态,N-MOS管处于开启状态,此时I/O端口的电平就由N-MOS管决定为低电平。同时,I/O端口的电平也可以通过输入电路进行读取;注意,此时I/O端口的电平一定是输出的电平。

3.8 推挽复用输出

推挽复用输出模式,与推挽输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的。

4.LED和蜂鸣器简介

  • LED:发光二极管,正向通电点亮,反向通电不亮
  • 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定
  • 无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音

硬件电路

  • PA0输出低电平时 LED两端产生电压差 形成正向导通电流 LED会被点亮 PA0输出高电平时 LED两端都是3.3V的电压 不会形成电流 所以高电平LED就是熄灭(下面与之相反)
  • 限流电阻作用:防止LED因为电流过大而烧毁 也可以调整LED的亮度

5.面包板

面包板概述

面包板使用示例

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

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

相关文章

小程序学习-20

建议每次构建npm之前都先删除miniprogram_npm

2024最新版Python 3.12.1安装使用指南

2024最新版Python 3.12.1安装使用指南 Installation and Configuration Guide to the latest version Python 3.12.1 in 2024 By Jackson Python编程语言,已经成为全球最受欢迎的编程语言之一;它简单易学易用,以标准库和功能强大且广泛外挂…

Docker(十)Docker Compose

作者主页: 正函数的个人主页 文章收录专栏: Docker 欢迎大家点赞 👍 收藏 ⭐ 加关注哦! Docker Compose 项目 Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式…

2024PMP考试新考纲-【过程领域】近期典型真题和很详细解析(9)

华研荟继续为您分享【过程Process领域】的新考纲下的真题,帮助大家体会和理解新考纲下PMP的考试特点和如何应用所学的知识和常识(经验)来解题,并且举一反三,一次性3A通过2024年PMP考试。 2024年PMP考试新考纲-【过程领…

智能算法 | Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数对比与秩和检验

智能算法 | Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数对比与秩和检验 目录 智能算法 | Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数对比与秩和检验预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数…

Spring Boot3整合Druid(监控功能)

目录 1.前置条件 2.导依赖 错误依赖: 正确依赖: 3.配置 1.前置条件 已经初始化好一个spring boot项目且版本为3X,项目可正常启动。 作者版本为3.2.2最新版 2.导依赖 错误依赖: 这个依赖对于spring boot 3的支持不够&#…

Linux第34步_TF-A移植的第2步_修改设备树和tf-a.tsv

在虚拟机中,使用VSCode打开linux /atk-mp1/atk-mp1/my-tfa/目录下tf-a.code-workspace”; 找到“tf-a-stm32mp-2.2.r1/fdts”目录,就是设备树文件所在的目录。 见下图: 一、修改“stm32mp157d-atk.dts” 修改后,见下…

文件上传笔记整理

文件上传 web渗透的核心,内网渗透的基础 通过上传webshell文件到对方的服务器来获得对方服务器的控制权 成功条件 文件成功上传到对方的服务器(躲过杀软) 知道文件上传的具体路径 上传的文件可以执行成功 文件上传的流程 前端JS对上传文件进行…

python_ACM模式《剑指offer刷题》链表1

题目: 面试tips: 询问面试官是否可以改变链表结构 思路: 1. 翻转链表,再遍历链表打印。 2. 想要实现先遍历后输出,即先进后出,因此可借助栈结构。 3. 可用隐式的栈结构,递归来实现。 代码…

数据库(表的基本操作)

目录 1.1 表的基本操作 1.1.1 创建表 1.1.2 表物理存储结构 1.1.3 数据类型 文本类型: 数字类型: 时间/日期类型: 常用的数据类型: 1.1.4 查看表 SHOW 命令 查看表结构: 1.1.5 删除表 查看表结构&#xf…

一份关于Chrome插件开发指北

目前开发v2版本开发教程可看这里 但目前谷歌浏览器强制要v3,本文主要是总结一些v3跟v2的不同。 为什么迁移到清单V3? 正如Chrome的文档所说: 使用MV3的扩展程序将在安全性、隐私性和性能方面得到增强;它们还可以使用MV3中采用的更现代的开放网络技术,如服务人员和…

三、Flask学习之BootSrap

三、Flask学习之BootSrap Bootstrap 是一款由Twitter团队开发的开源前端框架,它以响应式设计、移动端友好和丰富的组件为特色,为开发者提供了快速构建现代化网站和Web应用的工具。借助其灵活的栅格系统、丰富的UI组件和可定制的样式,Bootstr…

实现自己的mini-react

实现自己的mini-react 创建运行环境实现最简单mini-react渲染dom封装创建虚拟dom节点封装函数封装render函数对齐react 调用方式使用 jsx 任务调度器&fiber架构封装一个workLoop方法 统一提交&实现 function component统一提交实现支持 function component 进军 vdom 的…

Python语法进阶——类

Python中的数据类型都属于类。int、str、list都是Python定义好的数据类型类。 print(type(list))#<class type> print(type(list()))#<class list> 一、自定义数据类型 一、语法 class 类名():pass #类名 要求首字母大写 #()可写可省略。 #pass在这里只是用来保证…

一文详解 Berachain 测试网:全面介绍与教程,bitget wallet教程

什么是Berachain&#xff1f; Berachain&#xff08;web3.bitget.com/zh-CN/assets/berachain-wallet&#xff09;是一种尖端区块链技术&#xff0c;使用 Cosmos SDK 构建的 Layer-1&#xff0c;兼容以太坊虚拟机&#xff08;EVM&#xff09;。它基于一种独特的概念&#xff0c…

Docker(九)Docker Buildx

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; Docker Buildx Docker Buildx 是一个 docker CLI 插件&#xff0c;其扩展了 docker 命令&#xff0c;支持 [Moby BuildKit] 提供的功能。提…

用于垃圾回收的运行时配置选项

反馈 本文内容 指定配置的方法垃圾回收的风格管理资源使用情况大型页面 显示另外 4 个 此页面包含有关 .NET 运行时垃圾回收器 (GC) 设置的信息。 如果你要尝试让正在运行的应用达到最佳性能&#xff0c;请考虑使用这些设置。 然而&#xff0c;在特定情况下&#xff0c;默认…

Linux指令补充和权限简单介绍

一.tar指令 形式&#xff1a;tar [-cxtzjvf] 文件与目录 ....
 参数&#xff1a;
 -c &#xff1a;建立一个压缩文件的参数指令(create 的意思)&#xff1b; -x &#xff1a;解开一个压缩文件的参数指令&#xff01; -t &#xff1a;查看 tarfile 里面的文件&#xff01; -…

Kafka常见指令及监控程序介绍

kafka在流数据、IO削峰上非常有用&#xff0c;以下对于这款程序&#xff0c;做一些常见指令介绍。 下文使用–bootstrap-server 10.0.0.102:9092,10.0.0.103:9092,10.0.0.104:9092 需自行填写各自对应的集群IP和kafka的端口。 该写法 等同 –bootstrap-server localhost:9092 …

2024 前端高频面试题之 JS 篇

JS 篇&#xff08;持续更新中&#xff09; 1、什么是原型、原型链&#xff1f;2、什么是继承&#xff1f;说一说有哪些&#xff1f;继承组合的原理及优点&#xff1f;3、new 操作符具体干了什么&#xff1f;4、js 有哪些方法改变 this 指向&#xff1f;5、bind 有哪些实现的注意…