【STM32】GPIO输出

1 GPIO简介

(1)GPIO(General Purpose Input Output)通用输入输出口

(2)可配置为8种输入输出模式

(3)引脚电平:0V~3.3V,部分引脚可容忍5V(可以输入5V,但是输出还是3.3V)

I/O口电平带FT是可以接受输入5V

(4)输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等

(5)输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等

1.1 GPIO的基本结构

在STMB2中,所有的GPIO都是挂载在APB2外设总线上的。其中GPIO外设的名称是按照GPIOA、GPIOB、GPIOC等等这样来命名的;每个GPIO外设。总共有16的引脚。编号是从0到15(PA0,PA1,...,PA15)。

在每个GPIO模块肉。主要包含了寄存器驱动器这些东西。

寄存器就是一段特殊的存储器。内核可以通过APB2总线对寄存器进行读写,这样就完成输出电平和读取电平的功能了。寄存器的每一位对应一个引脚;其中输出寄存器写1。对应的引脚就会输出高电平;写0,就输出低电平。输入寄存器读取为1,就证明对应的端口目前是高电平;读取为0,就是低电平。因为STM32是32位的单片机,所以STM32内部的寄存器都是32位的,但这个端口只有16位。所以这个寄存器只有低16位对应的端口,高16位是没有用到的。

上一节电灯实验使用的是gpioc端回配置高寄存器控制板子上pc13的输出模式

驱动器是用来增加信号的驱动能力的,寄存器只负责存储数据,如果要进行点灯这样的操作的话,还是需要驱动器来负责增大驱动能力。

1.2 GPIO位结构

具体的1

具体2:上面输入,下面输出

先看输入部分:

IO引脚接了两个保护二极管,这个是对输入电压进行限幅的;上面VDD接3.3V,下面VSS接0V;

如果输入电压大于3.3V,上面的二极管就会导通,输入电压产生的电流就会直接流入VDD,而不会流入电路内部,这样可以避兔过高的电压对内部这些电路产生伤害;

如果输入电压小于0V(这个电压是相对于VSS的电压。所以是可以有负电压的),那这时下方这个二极管就会导通,电流会从VSS(引脚?)直接流出去,而不会从内部电路汲取电流,也是可以保护内部电路的。

如果输入电压在0~3.3V之间。那两个二极管均不会导通。

这时候电路到了上拉电阻和下拉电阻处。

这个开关是可以通过程序进行配置的:

如果上面导通、下面断开。就是上拉输入模武(默认为高电平的输入模式);

如果下面导通、上面断开。就是下拉输入模式(默认为低电平的输入模式);

如果两个都断开,就是浮空输入模式;

接下来是肖特基触发器(施密特触发器),这个施密特触发器的作用就是对输入电压进行整形的。它的执行逻辑是:如果输入电压大于某阈值,输出就会瞬间开为高电平;如果输入电压小于某─阈值,输出就会瞬闻降为低电平。

如果输入电压是上图这样的;定义两个阈值,比阈值1大输出高电平;比阈值2小输出低电平,则输出电压变为:

接下来经过施密特触发器整形的波形就可以直接写入输入数据寄存器了,然后读取就是了。


最后上面这述有两路线路。这些就是连接到片上外设的一些端口。

其中有模拟输入,这个是连接到ADC上的,因为ADC需要接收模拟量,所以这根线是接到施密特触发器前面的;

另一个是复用功能输入,这个是连接到其他需要读取端口的外设上的,比如串口的输入引脚等,这根线接收的是数字量,所以在施密特触发器后面。

接下来看输出部分:

数字部分可以由输出数据寄存器或片上外设控制,两种控制方式通过这个数据选择器接到了输出控制部分。如果选择通过输出数据寄存器进行控制,就是普通的IO口输出,写这个数据寄存器的某一位就可以操作对应的某个端口了。

左边的位设置/清除寄存器,这个可以用来单独操作输出数据寄存器的某一位,而不影响其它位。因为这个输出数据寄存器同时控制16个端口,并且这个寄存器只能整体读写,所以如果想单独控制其中某端口而不影响其他端口的话,就需要一些特殊的操作方式;

(1)先读出这个寄存器。然后用按位与和按位或的方式更改某位,最后再将更改后的数据写回去,在C语言中就是&=和|=的操作。(麻烦,效率不高)

(2)通过设置这个位设置和位清除寄存器,如果我们要对某1位进行置1的操作,在位设置寄存器的对应位写1即可,剩下不需要操作的位写0,这样它内部就会有电路自动将输出数据寄存器中对应应置为1,而剩下写0的位则保持不变。如果想对某一位进行清0的操作。就在位清除寄存器的对应位写1即可。

(3)读写STM32中的“位带”区域。在STM32中,专门分配的有一段地址区域,这段地址映射了RAM和外设寄存器所有的位,读写即可。

然后输出控制就接到了两个mos管

MOS管是一种电子开关,信号控制开关的导通和关闭,开关负责将IO口接到VDD或者VSS。

在这里回以选择推挽、开漏或关闭三种输出方式。

(1)在推挽输出模式下,P-MOS和N-MOS均有效。数据寄存器为1时。上管导通,下管断开。输出直接接到VDD,就是输出高电平;数据寄存器为0时。上管断开,下管导通。输出直接接到VSS,就是输出低电平。这种模式下。高低电平均有较强的驱动能力,所以推挽输出模武也可以叫强推输出模式。在推挽输出模式下。STM32对IO口具有绝对的控制权,高低电平都由STM32说的算。

(2)在开漏输出模式下,这个P-MOS是兔效的,只有N-MOS在工作。数据寄存器为1时,下管断开,这时输出相当于断开,也就是高阻模式;数据寄存器为0时。下管导通,输出直接接到VSS,也就是输出低电平。这种模式下。只有低电平有驱动能为,高电平是没有驱动能力的。可以作为通信协议的驱动方式,比如I2C通信的引脚,在多机通信的情况下,这个模式可以避免各个设备之间的相互干扰。另外开漏模式还可以用于输出5V的电平信号。

(3)剩下的一种状态就是关闭。这个是当引脚配置为输入模式的时候,这两个MOS管都无效,也就是输出关闭,端口的电平由外部信导来控制,

1.3 GPIO的模式

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

模式名称

性质

特征

浮空输入

数字输入

可读取引脚电平,若引脚悬空,则电平不确定

上拉输入

数字输入

可读取引脚电平,内部连接上拉电阻,悬空时默认高电平

下拉输入

数字输入

可读取引脚电平,内部连接下拉电阻,悬空时默认低电平

模拟输入

模拟输入

GPIO无效,引脚直接接入内部ADC

开漏输出

数字输出

可输出引脚电平,高电平为高阻态(无驱动能力),低电平接VSS

推挽输出

数字输出

可输出引脚电平,高电平接VDD,低电平接VSS

复用开漏输出

数字输出

由片上外设控制,高电平为高阻态,低电平接VSS

复用推挽输出

数字输出

由片上外设控制,高电平接VDD,低电平接VSS

(1)浮空/上拉/下拉输入

输出驱动器是断开的,端口只能输入而不能输出,

(2)模拟输入

从引脚直接接片上外设,也就是ADC,所以,当我们使用ADC的时候。将引脚配置为模拟输入就行了。

(3)开漏/推挽输出



P-MOS无效就是开漏输出;如果P-MOS和N-MOS都有效,就是推挽输出。

另外还可以看到。在输出模式下,输入模式也是有效的,一个端口只能有一个输出,但是可以有多个输入。

(4)复用开漏/推挽输出

和普通的开漏/推挽输出差不多。

1.4 参考手册GPIO

(1)GPIO配置寄存器。

每一个端口的模式由4位进行配置,16位寄存器就需要64位,所以配置寄存器有两个,一个低寄存器,一个高寄存器


  

(2)端口输入数据寄存器

对应这个

低16位对应16个引脚,高16位没有使用。

(3)端口输出数据寄存器

对应这个

同样,低16位对应16个引脚,高16位没有使用。

(4)端口位设置/清除寄存器

对应这个

这个寄存器的高16位是进行位清除的,低16位是进行位设置的。

(5)端口位清除寄存器

这个寄存器的低16位和端口位设置/清除寄存器的高16位是一样的,为了方便操作设置的。

(6)端口配置锁定寄存器

1.5 LED和蜂鸣器简介

LED:发光二极管,正向通电点亮,反向通电不亮

有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定

无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音

LED硬件电路

低电平触发(一般使用这种)

高电平触发

蜂鸣器硬件电路

PNP型

NPN型

面包板

2 GPIO输出之LED闪烁

2.1 接线图

点亮LED,这里是低电平点亮

3 GPIO输出之LED流水灯
 

4 GPIO输出之蜂鸣器

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

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

相关文章

【数据结构实验】排序(三)快速排序算法的改进(三者取中法)

文章目录 1. 引言2. 快速排序算法2.1 传统快速排序2.2 三者取中法 3. 实验内容3.1 实验题目(一)输入要求(二)输出要求 3.2 算法实现 4. 实验结果 1. 引言 快速排序是一种经典的排序算法,其核心思想是通过选择一个基准元…

小程序如何禁止指定用户访问?如何设置指定用户才能访问?

​有些商家为了价格保密或者实行严格的会员制等原因,希望小程序能够限制某些人的访问或者设置指定人员才能访问。这种功能在小程序中,怎么支持这些功能呢?下面具体介绍。 一、禁止指定用户访问 禁止指定用户访问,可以通过小程序…

人工智能面面观

人工智能简介 人工智能(Artificial Intelligence,简称AI)是一门研究如何使计算机能够模拟和执行人类智能任务的科学和技术领域。它致力于开发能够感知、理解、学习、推理、决策和与人类进行交互的智能系统。人工智能的背景可以追溯到上世纪50…

Python武器库开发-前端篇之CSS元素(三十二)

前端篇之CSS元素(三十二) CSS 元素是一个网页中的 HTML 元素,包括标签、类和 ID。它们可以通过 CSS 选择器选中并设置样式属性,以使网页呈现具有吸引力和良好的可读性。常见的 HTML 元素包括 div、p、h1、h2、span 等,它们可以使用 CSS 设置…

栈和队列OJ题目——C语言

目录 LeetCode 20、有效的括号 题目描述: 思路解析: 解题代码: 通过代码: LeetCode 225、用队列实现栈 题目描述: 思路解析: 解题代码: 通过代码: LeetCode 232、用栈…

【ArcGIS Pro微课1000例】0037:ArcGIS Pro中模型构建器的使用---以shp批量转kml/kmz为例

文章目录 一、ArcGIS Pro模型构建器介绍二、shp批量转kml/kmz1. 打开模型构建器2. 添加工作空间4. 添加【创建要素图层】工具5. 添加【图层转kml】工具6. 输出文件命名7. 运行模型一、ArcGIS Pro模型构建器介绍 模型构建器是一种可视化编程语言,用于构建地理处理工作流。 地理…

【C++】泛型编程 ⑮ ( 类模板示例 - 数组类模板 | 自定义类中持有指针成员变量 )

文章目录 一、支持 数组类模板 存储的 自定义类1、可拷贝和可打印的自定义类2、改进方向3、改进方向 - 构造函数4、改进方向 - 析构函数5、改进方向 - 重载左移运算符6、改进方向 - 重载拷贝构造函数 和 等号运算符 二、代码示例1、Array.h 头文件2、Array.cpp 代码文件3、Test…

PC端从零搭建微信自动回复机器人(一)基础框架搭建及源码

由于工作需要,最近一年一直在研究和使用C#,加上最近工作上有做微信机器人的需要,在已经对接、调试稳定之后,将项目的源码分享给大家,传递开源精神。 一、环境依赖 1、开发工具:Vistual Studio 2022 2、Ne…

什么是自动化测试po模式,po分层如何实现?

一、什么是PO模式 全称:page object model 简称:POM/PO PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性! 主要分三层: 1.基础层BasePage:封装一些最基…

SpectralGPT: Spectral Foundation Model 论文翻译1

遥感领域的通用大模型 2023.11.13在CVPR发表 原文地址:[2311.07113] SpectralGPT: Spectral Foundation Model (arxiv.org) 摘要 ​ 基础模型最近引起了人们的极大关注,因为它有可能以一种自我监督的方式彻底改变视觉表征学习领域。虽然大多数基础模型…

云端导览,数字互动 | 拓世法宝AI数字人一体机助力全新旅游时代

《中国旅行消费趋势洞察白皮书(2023版)》显示,消费者旅行习惯已从“到此一游”变为“深度在地”,更强调在旅游中充实自我、学习新知识。 (《中国旅行消费趋势洞察白皮书(2023版》截图) 从这些资…

【腾讯云 TDSQL-C Serverless 产品测评】深度实测TDSQL-C Serverless 弹性伸缩策略及稳定性

文章目录 前言一、什么是 TDSQL-C Serverless二、TDSQL-C Serverless 的弹性伸缩方案三、弹性伸缩策略及稳定性实测1.测试设计2.测试流程:3.测试准备工作4.开始测试5.测试结果分析5.1.整体过程分析5.2.扩容过程分析5.3.缩容过程分析 四、总结 前言 Serverless 数据…