STM32单片机(三)第一节:GPIO输出

news2024/11/29 22:33:32

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。
☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋。
🌙专栏目标:实现从零基础入门51单片机和STM32单片机,力求在玩好单片机的同时,能够了解一些计算机的基本概念,了解电路及其元器件的基本理论等。

⭐️ 专栏主要内容: 主要学习STM32单片机的功能、各个模块、单片机的外设、驱动等,最终玩好单片机和单片机的外设,全程手敲代码,实现我们所要实现的功能。
🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。
💑专栏主页:http://t.csdn.cn/HCD8v

本学习过程参考:https://space.bilibili.com/383400717

STM3单片机安装软件、各种资料以及源码的路径:
链接:https://pan.baidu.com/s/1snD0uuTfMhchFqOMWvAiHA?pwd=asdf#list/path=%2F
提取码:asdf

链接里压缩包的解压密码:32

本大节主要学习GPIO通用输入输出口,包含两部分,第一小节主要学习GPIO的输出,第二小节是写三个简单的程序进行练习,分别是LED闪烁、LED流水灯、蜂鸣器等;第三小节是学习GPIO输入,第四小节是写两个简单的程序进行练习,分别是案件控制LED和光敏传感器控制蜂鸣器;
本小节主要学习GPIO的基础知识、GPIO的输出、以及STM32外部设备和电路;

文章目录

  • 一、GPIO基础知识
    • 1.1 GPIO简介
    • 1.2 GPIO基本结构
    • 1.3 GPIO位结构
      • 1.3.1 输入部分
      • 1.3.2 输出部分
    • 1.4 GPIO模式
  • 二、STM32外部设备和电路
    • 2.1 LED和蜂鸣器介绍
    • 2.2 LED和蜂鸣器硬件电路
    • 2.3 面包板

一、GPIO基础知识

1.1 GPIO简介

在这里插入图片描述

  • GPIO的引脚电平是0V~3.3V;数据0就是低电平,也就是0V,数据1就是高电平,也就是3.3V;部分引脚可容忍5V,容忍5V的意思是可以在这个端口输入5V的电压,也认为是高电平;但是对于输出而言,最大就只能输出3.3V,因为供电就只有3.3V;具体哪些端口可以容忍5.5V,可以参考一下STM32的引脚定义;如下图所示:
    在这里插入图片描述
    带FT的就是可以容忍5V的,不带FT的,就只能介入3.3V的电压;

  • 关于第四条,我们此节要演示的现象,比如LED和蜂鸣器,就使用到了GPIO的输出模式,另外在其他场景,只要是可以用高低电平来进行控制的地方,都可以用GPIO来完成;如果是控制的功率比较大的设备,只需要再加入驱动电路即可;除此之外,我们可以用GPIO来模拟通讯协议,比如I2C、SPI或者某个芯片特定的协议,我们都可以用GPIO的输出模式来模拟其中的输出时序部分;

  • 关于第五条,输入模式最常见的就是读取按键了;用来捕获我们的按键按下事件,另外也可以读取带有数字输出的一些模块;比如我们套件里的光敏电阻模块、热敏电阻模块等;如果这个模块输出的是模拟量,那GPIO还可以配置成模拟输入的模式,再配合内部的ADC外设,就能直接读取端口的模拟电压了;除此之外,模拟通信协议时,接受数据通信上的数据,也是靠GPIO的输入来完成的;

1.2 GPIO基本结构

在这里插入图片描述

上图是GPIO的整体构造,左边是APB2外设总线,其在STM32系统结构图的位置如下图所示:

在这里插入图片描述
在STM32中,所有的GPIO都是挂载在APB2外设总线上的,其中GPIO外设的名称是按照GPIOA、GPIOB、GPIOC等等这种方式来命名的;每个GPIO外设,总共有16个引脚,编号是0~15;例如GPIOA的第0个引脚,我们称它为PA0,GPIOA的第1个引脚称为PA1,以此列推,一直到PA15;

在每个GPIO模块内,主要包含了寄存器和驱动器这些东西;寄存器就是一段特殊的存储器,内核可以通过APB2总线对寄存器进行读写,这样就可以完成输出电平和读取电平的功能了;寄存器的每一位对应着一个引脚,其中输出起存器写1,对应的引脚就会输出高电平,写0,就输出低电平;输入寄存器读取1,就证明对应的端口目前是高电平,读取0,就是低电平;

因为STM32是32位的单片机,所以STM32内部的寄存器都是32位的,但是这个端口只有16位,所以这个寄存器只有低16位对应有端口 ,高16位是没有用到的;

在GPIO基本结构图中,驱动器是用来增加信号的驱动能力的,寄存器只负责存储数据,如果要进行点灯这样的操作的话,还是需要驱动器来负责增大驱动能力;

以上这些就是GPIO的整体基本结构了。

1.3 GPIO位结构

在这里插入图片描述

下面来看一下GPIO中每一位的具体电路结构,上图就是STM32参考手册中的GPIO位结构的电路图了;左边三个是寄存器,中间部分是驱动器,最右边就是某一个IO口的引脚了;

在这里插入图片描述

整体结构可以分为两部分,上面是输入部分,下面是输出部分。

在这里插入图片描述

1.3.1 输入部分

在输部分,首先是这个IO引脚,可以看到IO口上下都结了两个保护二极管,这是对输入电压进行限幅的,上面这个二极管接VDD,3.3V,下面接VSS,0V;如果输入电压比3.3V还要高,那上方的这个二极管就会导通,输入电压产生的电流就会直接流入Vdd而不会流入内部电路,如下图:

在这里插入图片描述
这样就可以避免过高的电压对内部这些电路产生伤害;

同样的,如果输入电压比0V还要低,这个电压是相对于VSS的电压,所以是可以有负电压的,那这时下方这个二极管就会导通,电流会从VSS直接出去,也是可以保护内部电路的,如下图所示:

在这里插入图片描述

如果输入电压在0~3.3V之间,那两个二极管均不会导通,这时二极管对电路没有影响,这就是保护二极管的用途;

接下来如果是正常电压,电流的流向如下图所示:

在这里插入图片描述
这里连接了一个上拉电阻和一个下拉电阻,上拉电阻是VDD,下拉电阻是VSS,这个开关是可以通过程序进行配置的;如果上面导通,下面断开,就是上拉输入模式;如果下面导通,上面断开,就是下拉输入模式;如果两个都断开,就是浮空输入模式;

上拉和下拉的作用是为了给输入提供一个默认的输入电平的,因为对应一个数字的端口,输入不是高电平就是低电平,如果输入引脚什么都不接,那到底算是高电平还是低电平呢?所以实际情况是,如果输入啥都不接,这时输入就处于一种浮空的状态,引脚的输入电平极易受到外界干扰而改变,就像是一个物体悬浮在太空一样,它的位置是不确定的,受到一点扰动就会变化;为了避免引脚悬空导致的输入数据不确定,我们就需要在这里加上上拉或者下拉电阻了;

如果接入上拉电阻,当引脚悬空时,还有上拉电阻来保证引脚是高电平,所以上拉输入又可以称为是默认为高电平的输入模式,如下图所示:

在这里插入图片描述

下拉也是同理,就是默认为低电平的输入方式;

在这里插入图片描述

再往后是TTL肖特基触发器,其实英文文档里写的是施密特触发器,所以这里写肖特基触发器其实是一个翻译错误;这个施密特触发器的作用就是对输入电压进行整形的,它的执行逻辑是,如果输入电压大于某一阈值,输出就会瞬间升为高电平;如果输入电压小于某一阈值,输出就会瞬间降为低电平;能够抗干扰;

在这里插入图片描述

接下来经过施密特触发器整形的波形就可以直接写入输入数据寄存器了,如上图,我们再用程序读取输入数据寄存器对应的某一位的数据,就可以知道端口的输入电平了;

在这里插入图片描述

最后上面还有两路线路,这些就是链接到片上外设的一些端口,其中有模拟输入,这个是连接到ADC上的,因为ADC需要接受模拟量,所以这根线是接到施密特触发器前面的;另一个是复用功能输入,这个连接到其他需要读取端口的外设上的,比如串口的输入引脚等,这根线接收的是数字量,所以在施密特触发器的后面;

1.3.2 输出部分

在这里插入图片描述

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

在这里插入图片描述

左边还有个叫做位设置/清除寄存器,这个可以用来单独操作输出数据寄存器的某一位,而不影响其他位,因为这个输出寄存器同时控制16个端口,并且这个寄存器只能整体读写,所以如果想单独控制某一个端口而不影响其他端口的话,就需要一些特殊的操作方式,第一种方式是先读出这个寄存器,然后用按位与和按位或的方式更改某一位,最后再将更改后的数据写回去,在C语言中就是&=|=操作;这种方法比较麻烦,效率并不高,对于IO口的操作而言不太适合;第二种方式是通过设置这个位设置和位清除寄存器,如果我们要对某一位进行置1的操作,在位设置寄存器的对应位写1即可,剩下的不需要操作的位写0,这样它内部就会有电路,自动将输出数据寄存器中对应位置为1,而剩下的写0的位则保持不变;这样就保证了只操作其中某一位而不影响其他位,并且这是一步到位的操作; 如果想对某一位进行清零的操作,就在位清除寄存器的对应位写1即可,这样内部电路就会把这一位清0了; 这就是第二种方式也就是这个位设置和位清除寄存器的作用;另外还有第三种方式,那就是读写STM32中的“位带”区域,不再详细讲述;

在这里插入图片描述

输出控制之后就接到了两个MOS管,上面是P-MOS,下面是N-MOS,这个MOS管就是一种电子开关,我们的信号来控制开关的到同和关闭,开关负责将IO口接到VDD或者VSS;在这里可以选择推挽、开漏或关闭三种方式;

  • 在推挽输出模式下,P-MOS和N-MOS均有效,数据寄存器位1时,上管导通,下管断开,输出直接接到VDD,就是输出高电平;数据寄存器位0时,上管断开,下管导通,输出直接接到VSS,就是输出低电平;这种模式下,高低电平均有较强的驱动能力,所以推挽模式也可以叫强输出模式;在推挽模式下,STM32对IO口具有绝对的控制权,高低电平都由STM32说了算;
  • 在开漏输出模式下,这个P-MOS是无效的,只有N-MOS在工作,输出寄存器为1时,下管断开,这是输出相当于断开,也就是高阻模式;数据寄存器为0时,下管导通,输出直接接到VSS,也就是输出低电平;这种模式下,只有低电平具有驱动能力,高电平是没有驱动能力的;这个模式的用处就是开漏模式可以用作通信协议的驱动方式,如果I2C通信的引脚,用到就是开漏模式; 在多机通信的情况下,这个模式可以避免各个设备之间的相互干扰;另外开漏模式还可以用于输出5V的电平信号,比如IO口外接一个上拉电阻到5V的电源;当输出低电平时,由内部的N-MOS直接接VSS,当输出高电平时,由外部的上拉电阻拉高至5V;这样就可以输出5V的电平信号,用于兼容一些5V电平的设备;
  • 在关闭输出模式下,当引脚配置位输入输出模式的时候,这两个MOS管都无效,也就是输出关闭,端口的电平由外部信号来控制

这些就是GPIO位结构的全部介绍了。

1.4 GPIO模式

在这里插入图片描述

以上是GPIO的8中工作模式,通过GPIO端口配置寄存器,上一小节介绍的位结构电路就会根据我们的配置进行改变,比如开关的通断、N-MOS和P-MOS是否有效、数据选择器的选择等;这个端口的电路就可以配置成上图中的8种模式。

在使用浮空输入时,端口一定要接上一个连续的驱动源,不能出现悬空的状态;

浮空输入、上拉输入、下拉输入的电路图如下图所示:

在这里插入图片描述

模拟输入的电路图如下图所示:

在这里插入图片描述

在这里插入图片描述

其他地方都断开,只有模拟输入这一条路有用;所以当我们使用ADC的时候,将引脚配置位模拟输入就行了;其他时候一般用不到模拟输入;

开漏输入和推挽输入的电路结构如下图所示:

在这里插入图片描述
复用开漏输出和复用推挽输出的电路图如下所示:

在这里插入图片描述

二、STM32外部设备和电路

2.1 LED和蜂鸣器介绍

在这里插入图片描述

  • LED图标,左边是正极,右边是负极
  • LED实物图:左边(较小的一半)是正极,右边(较大的一半)是负极;
  • 本学习过程用的就是有源蜂鸣器,低电平触发

2.2 LED和蜂鸣器硬件电路

在这里插入图片描述

左边两个图是使用STM32的GPIO口驱动LED的电路,

  • 上面这个是低电平驱动的电路,LED正极接3.3V,负极通过一个限流电阻接到PA0上,当PA0输出低电平时,LED两端就会产生电压差,就会产生正向导通的电流,这样LED就会点亮;反之当PA0输出高电平时,因为LED两端都是3.3V的电压,灯则不会被点亮;中间的限流电阻一方面可以保护LED灯不会因电流过大时而烧毁,另一方面可以调整LED的亮度;
  • 下面这个图是高电平驱动的电路,正极通过一个限流电阻接到PA0上,这时就是高电平点亮,低电平熄灭了。

在单片机中,一般倾向于使用第一种接法;

左边两个图是使用STM32的GPIO口驱动蜂鸣器的电路,使用了三极管开关的驱动方案,三极管开关是最简单的驱动电路了,对于功率稍微大一点的,直接使用IO口驱动会导致STM32负担过重,这时就可以用一个三极管驱动电路来完成驱动的任务

  • 上面这个图是PNP三极管的驱动电路,三极管的左边是基极,带箭头的是发射极,剩下的是集电极;左边的基极给低电平,三极管就会导通,那通过3.3V和GND,就可以给蜂鸣器提供驱动电流了;反之基极给高电平,三极管截止,蜂鸣器就没有电流。
  • 下面这个图是NPN三极管的驱动电路,同样左边是基极,带箭头的是发射极,剩下的是集电极;它的驱动逻辑跟上面是相反的,基极给高电平导通,低电平断开
  • 另外需要注意,这个PNP的三极管最好接在蜂鸣器上面,NPN的三极管最好接在蜂鸣器下面(即最好接在集电极上),因为三极管的通断,是需要在发射极和基极直接产生一定的开启的,如果把负载接在发射极这边,可能会导致三极管不能开启;

2.3 面包板

在这里插入图片描述
最后介绍一下面包板的使用方法,左边上面的图是面包板的正面,左边下面的图是面包板的背面;右边是面包板内部金属爪的示意图,当我们把原件的引脚插到面包板的孔里后,它内部的金属爪就会夹住引脚;在面包板中,竖着的一列是连载一起的,这样当我们原件插在一纵排的不同空位时,内部的金属爪就实现了线路的链接;而上下四排孔整体是连在一起的,这四排是用于供电的;

在这里插入图片描述
如果想要在面包板上直接点亮LED灯,可以按照如下进行电路连接:

在这里插入图片描述
这样就用面包板实现了电源直接点亮一个LED灯的电路;

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

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

相关文章

5个超好用的在线抠图网站,告别繁琐的PS,快马住!

本期给大家推荐5个超好用的在线抠图网站,几秒钟就能搞定你的需求,告别繁琐的PS,重点是免费哦,赶紧收藏起来吧! 1、菜鸟图库 https://www.sucai999.com/default/crx/removebg?vNTYwNDUx 菜鸟图库是一个专门为新手设计…

Go网络通信

Go中HTTP协议客户端实现 Go语言标准库内置了net/http包,涵盖了HTTP客户端和服务端具体的实现方式。内置的net/http包提供了最简洁的HTTP客户端实现方式,无须借助第三方网络通信库,就可以直接使用HTTP中用得最多的GET和POST方式请求数据。 fun…

一道很简单的面试题,怎么那么多人不会?

大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 web前端面试题库 VS java后端面试题库大全 最近帮公司招聘,主要负责一面,所以基本上问的基础多一点。但是我在…

【云计算与虚拟化】第五章—— vCenter Server的高级功能

第五章—— vCenter Server的高级功能 1、在ESXi01中,新建一个资源池,命名为polo,将ESXi01上的虚拟机加入其中,CPU资源设置如下:份额正常,预留自定义,限制自定义,不可扩展预留,内存…

新版电脑微信怎么锁屏?不能升级到新版本又怎么锁?

#微信新增锁定功能# 许多小伙伴在工作或家里用电脑时都不想让别人私自看到自己微信的聊天记录,手机端还好,毕竟会自动锁屏,而且开屏也简单,只需指纹或人脸、手势就行,但电脑端就比较麻烦了,只要人一离开&a…

Intewell智能工业操作系统,助力制造业智能化发展

软件定义控制 ——工业操作系统是工业互联网的核心,也是工业产业生态的核心,更是工业时代安全的基石。基于软件定义控制的智能工业操作系统,是我国工业发展、工业安全、工业未来的核心。 日前,以“筑牢粤港澳软件产业新生态、打…

组合总和-回溯

1题目 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1: 输入: k 3, n 7 输出: [[1,2,…

全场景,新技术,维视智造携重磅产品实力收官SNEC2023

5月26日, SNEC第十六届(2023)国际太阳能光伏与智慧能源(上海)大会暨展览会 圆满落幕 。 展会期间维视 智造旗下视觉检测系统、光伏组件生产核心场景检测方案等高口碑产品悉数 亮相,吸引了众多观众驻足观摩。 喜看稻菽千重浪!接下来让我们一起…

《微服务实战》 第二十二章 Redis发布订阅、事务

前言 本章节讲解Redis发布订阅、事务。 1、发布订阅 Redis PubSub 模块又称发布订阅者模式,是一种消息传递系统,实现了消息多播功能。发布者(即发送方)发送消息,订阅者(即接收方)接收消息&am…

同源部署自定义sessionId解析器实现一个浏览器同时登录正常使用

前言 废话不多说,昨天是实现同源部署返回不同cookie,现在是核心,就是一个浏览器同时登录,客户端、运营端同时正常使用。 一、核心实现 核心实现实际上就是自定义HttpSessionIdResolver处理sessionid解析,上一篇博文已实…

VMWare ESXI6.7创建虚拟机

VMware ESXi:专门构建的裸机 管理程序 首先开启ESXI主机 登录ESXI 打开浏览器输入物理机ip,输入账号密码进行登录 创建虚拟机 选择创建类型 创建RedHat7.6 选择存储类型和数据存储 仅一个存储,直接点下一页即可 配置虚拟机硬件和虚拟机附…

商场里的导购图怎么制作?在商场内怎么导航?

在商场内怎么导航?很多顾客在逛商场的时候会先看商场的导览图,寻找自己心仪品牌的位置。有的商场导览图上会标注商铺号,在几层的几号铺位,然后按照品牌对应的编号去找店,方便、快捷,不然真的很容易迷路。 …

Android系统原理性问题分析 - 单路情况下的C/S模型

声明 在Android系统中经常会遇到一些系统原理性的问题,在此专栏中集中来讨论下。Android系统中很多地方都采用了I/O多路复用的机制,为了引出I/O多路复用机制,先来分析多路并发情况下的C/S模型。此篇参考一些博客和书籍,代码基于A…

float浮点/double双精度浮点和二进制的相互转换,小白也能看明白!

二进制文件包含了太多的数据,如何看懂二进制文件,决定于基础。 文章目录 前言1、重点知识1.1何为二进制文件1.2浮点和双精度的浮点如何生成二进制1.2.1 float和double的基础知识1.2.2 IEEE754约束的重点1.2.3 浮点是如何表示二进制 1.3 例子说明 双精度d…

The Open Graph protocol(开放图谱协议)的介绍及应用

介绍 Open Graph 协议使任何网页都可以成为社交中的丰富对象。例如,用于 Facebook 以允许任何网页具有与 Facebook 上任何其他对象相同的功能。 以下是把链接分享到钉钉,钉钉识别后显示的效果: 基本元数据 要将网页变成图形对象&#xff0…

【如何在三个月时间里,从零基础小白变身为专业的数据分析师?】

如何在三个月时间里,从零基础小白变身为专业的数据分析师? 随着数字经济、大数据时代的发展,数据已然成为当下时代最重要的盈利资源,让企业在做决策和计划方案时更有针对性和依据,能提前预测市场发展方向,做…

【C++学习】异常

🐱作者:一只大喵咪1201 🐱专栏:《C学习》 🔥格言:你只管努力,剩下的交给时间! 异常 🥮异常🍢自定义异常体系🍢C标准库的异常体系🍢异…

Linux 开机过程

参考链接 Linux引导过程 Linux 系统的运行级别 Linux 系统总共有设置了 7 种运行级别。分别是: 0 级:关机;1 级:单用户模式;2 级:无网络的多用户模式;3 级:多用户模式&#xff0…

EasyDSS调用录像回看接口出现报错“请先合成mp4”,是什么原因?

EasyDSS支持一站式的上传、转码、直播、回放、嵌入、分享功能,具有多屏播放、自由组合、接口丰富等特点。平台可以为用户提供专业、稳定的直播推流、转码、分发和播放服务,全面满足超低延迟、超高画质、超大并发访问量的要求。 有用户反馈,在…

内网搭建 SFTP 服务器

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#xff0…