STM32单片机入门学习——第5节: [3-1]GPIO输出

news2025/4/25 5:15:22

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做!

本文写于:2025.04.01

STM32开发板学习——第5节: [3-1]GPIO输出

  • 前言
  • 开发板说明
  • 引用
  • 解答和科普
  • 一、GPIO输出
  • 二、外部电路介绍
  • 问题
  • 总结

前言

   本次笔记是用来记录我的学习过程,同时把我需要的困难和思考记下来,有助于我的学习,同时也作为一种习惯,可以督促我学习,是一个激励自己的过程,让我们开始32单片机的学习之路。
   欢迎大家给我提意见,能给我的嵌入式之旅提供方向和路线,现在作为小白,我就先学习32单片机了,就跟着B站上的江协科技开始学习了.
   在这里会记录下江协科技32单片机开发板的配套视频教程所作的实验和学习笔记内容,因为我之前有一个开发板,我大概率会用我的板子模仿着来做.让我们一起加油!
   另外为了增强我的学习效果:每次笔记把我不知道或者问题在后面提出来,再下一篇开头作为解答!

开发板说明

   本人采用的是慧净的开发板,因为这个板子是我N年前就买的板子,索性就拿来用了。另外我也购买了江科大的学习套间。
   原理图如下
1、开发板原理图
在这里插入图片描述
2、STM32F103C6和51对比
在这里插入图片描述
3、STM32F103C6核心板
在这里插入图片描述

视频中的都用这个开发板来实现,如果有资源就利用起来。另外也计划实现江协科技的套件。

下图是实物图
在这里插入图片描述

引用

【STM32入门教程-2023版 细致讲解 中文字幕】
还参考了下图中的书籍:
STM32库开发实战指南:基于STM32F103(第2版)
在这里插入图片描述
数据手册

解答和科普

第一部分主要学习GPIO的输出,第二部分主要学习GPIO的输入
C语言的知识:结构体、指针、枚举
对MOS管的理解
MOS管的管脚有三个:源极S(source)、栅极G(Gate)和漏极(Drain),但是实际工程应用中,经常无法区分PMOS管和NMOS管、各管脚的位置以及它们各自导通的条件。

MOS管有两种:一个是PMOS管,一个是NMOS管;PMOS管就是positive管,是积极的管,而NMOS管是negative管,是消极的管。积极的管就是顺应潮流,顺势而为;消极的管就是违背趋势,逆流而上。
很显然,电流从源极(输入端)到漏极(输出端),那就是顺势而为,因为源极就是源头嘛,因此这种管就是PMOS管;而电流要是从漏极(输入端)到源极(输出端),那就是逆流而上,是NMOS管。

N沟道还是P沟道与寄生二极管方向如何判定

N沟道MOS还是P沟道MOS:
箭头指向G极的是N沟道
箭头背向G极的是P沟道

寄生二极管方向:
不论N沟道还是P沟道MOS管,中间衬底箭头方向和寄生二极管的箭头方向总是一致的:
要么都由S指向D,要么都有D指向S

MOS管的连接方式
MOS管应用电压的极性和我们普通的晶体三极管相同,N沟道的类似NPN晶体三极管,漏极D接正极,源极S接负极,栅极G正电压时导电沟道建立,N沟道MOS管开始工作。
同样P道的类似PNP晶体三极管,漏极D接负极,源极S接正极,栅极G负电压时,导电沟道建立,P沟道MOS管开始工作。

导通特性
NMOS是栅极高电平(|VGS| > Vt)导通,低电平断开,可用来控制与地之间的导通。
PMOS是栅极低电平(|VGS| > Vt)导通,高电平断开,可用来控制与电源之间的导通。
NMOS的特性,Vgs大于一定的值就会导通,适合用于源极接地时的情况(低端驱动),只要栅极电压达到4V或10V就可以了。
PMOS的特性,Vgs小于一定的值就会导通,适合用于源极接VCC时的情况(高端驱动)。但是,虽然PMOS可以很方便地用作高端驱动,但由于导通电阻大,价格贵,替换种类少等原因,在高端驱动中,通常还是使用NMOS。

MOS开关管损失
不管是NMOS还是PMOS,导通后都有导通电阻存在,这样电流就会在这个电阻上消耗能量,这部分消耗的能量叫做导通损耗。选择导通电阻小的MOS管会减小导通损耗。现在的小功率MOS管导通电阻一般在几十毫欧左右,几毫欧的也有。

MOS在导通和截止的时候,一定不是在瞬间完成的。MOS两端的电压有一个下降的过程,流过的电流有一个上升的过程,在这段时间内,MOS管的损失是电压和电流的乘积,叫做开关损失。通常开关损失比导通损失大得多,而且开关频率越高,损失也越大。
导通瞬间电压和电流的乘积很大,造成的损失也就很大。缩短开关时间,可以减小每次导通时的损失;降低开关频率,可以减小单位时间内的开关次数。这两种办法都可以减小开关损失。

MOS管驱动
跟双极性晶体管相比,一般认为使MOS管导通不需要电流,只要GS电压高于一定的值,就可以了。这个很容易做到,但是,我们还需要速度。
在MOS管的结构中可以看到,在GS,GD之间存在寄生电容,而MOS管的驱动,实际上就是对电容的充放电。如果有兴趣,可以在mos的G级串一个电流表,看电流的变化。对电容的充电需要一个电流,因为对电容充电瞬间可以把电容看成短路,所以瞬间电流会比较大。选择/设计MOS管驱动时第一要注意的是可提供瞬间短路电流的大小。
第二注意的是,普遍用于高端驱动的NMOS,导通时需要是栅极电压大于源极电压。而高端驱动的MOS管导通时源极电压与漏极电压(VCC)相同,所以这时栅极电压要比VCC大4V或10V。如果在同一个系统里,要得到比VCC大的电压,就要专门的升压电路了。很多马达驱动器都集成了电荷泵,要注意的是应该选择合适的外接电容,以得到足够的短路电流去驱动MOS管。

记忆技巧:
1.交叉的线最多的是源极;
2.栅极也就是门(gate),既然是门,就具有控制的职能。
3.无论是PMOS管还是NMOS管,二极管的方向正好与输入输出的方向是相反的
4.无论是PMOS管还是NMOS管,栅源极箭头的方向正好与二极管的方向相同
5.无论是PMOS管还是NMOS管,我们只需要比较G极电压与S极电压大小关系就可以判断MOS管能不能导通
6.对于PMOS管来说,电流是从源极(输入端)到漏极(输出端),从上到下,各节点电平应该是依次变小的,因此栅极G的电压必须小于源极电压;换句话说,当UGS<0时,PMOS管才导通。
7.对于NMOS管来说,电流是从漏极(输入端)到源极(输出端),从下到上,各节点电平应该是依次变小的,因此栅极G的电压必须大于源极电压;换句话说,当UGS>0时,NMOS管才导通。
引用

原文链接:

一、GPIO输出

在这里插入图片描述
在这里插入图片描述
STM32是32位的单片机,所以STM32内部的寄存器都是32位的,但是端口只有16位,所以这个寄存器只有低16位对应的有端口,高16位没有用到。
在这里插入图片描述

1、VDD 3.3V,VSS地,保护二极管,可以保护电路。
2、上拉电阻至VDD,下拉电阻至VSS,这个开关是可以通过程序进行配置的,上拉输入模式:上面导通,下面关断;下拉输入模式:上面断开,下面导通;两个都断开就浮空输入模式。为了给输入提供一个默认的输入电平的。
如果什么都不接,这时输入就会处于一种浮空的状态,引脚的输入电平极易受外界干扰而改变,受到一点扰动就会变化,为了避免引脚悬空导致的输入数据不确定,我们就需要在这里加上上拉或者下拉电阻了,如果接入上拉电阻,当引脚悬空时,还有上拉电阻来保证引脚的高电平,所以上拉输入又可以称作默认高电平的输入模式,下拉也是同理,就是默认低电平的输入方式。

上面导通,下面断开,就是上拉输入模式;
下面导通,上面断开,就是下拉输入模式;
两个都断开,就是浮空输入模式;
这个是为了给输入提供一个默认的输入电平的,因为对于一个数字的端口,输入不是高电平就是低电平,那如果输入引脚什么也不接,那到底是高电平还是低电平呢?
这是输入就会处于一种浮空的状态,引脚的输入电平极易受到外界干扰而改变,它的位置是不确定的,收到一点扰动就会变化,为了避免引脚悬空导致的输入数据不确定,我们就需要在这里加上上拉或者下拉电阻了。
如果接入上拉电阻,当引脚悬空时,还有上拉电阻来保证引脚的高电平,所以上拉电阻输入又可以称作是默认为高电平的输入模式。
下拉也是同理,就是默认为低电平的输入方式。
电阻都较大,是一种弱上拉合弱下拉,目的是尽量不影响正常的输入操作。
3、施密特触发器:就是对输入电压进行整形的,它的执行逻辑是,如果输入电压大于某一阈值,输出就会瞬间升为高电平,如果输入电压小于某一阈值,输出就会瞬间降为低电平。
施密特触发器:执行逻辑是,如果输入电压大于某一阀值,输出就会瞬间升为高电平,如果输入电压小于某一阀值,输出就会瞬间降为低电平。
如果没有施密特触发器,那很有可能因为干扰导致误判
在这里插入图片描述
所以输出仍然是稳定的。直到下次阈值上限。输出才会变成高。阈值之间有距离,可以有效地避兔因信号波动造成的输出抖动现象。

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

5、另一个是复用功能输入。这个是莲接到其他需要读取端口的外设上的,比如串口的输入引脚等。这根线接收的是数字量,所以在施密特触发器后面。
7、输出部分
数字部分可以由输出数据寄存器或片上外设控制,两种控制方式通过这个数据选择器接到了输出控制部分,如果选择通过输出数据寄存器进行控制,就是普通的IO口输出,写这个数据寄存器的某一位就可以操作对应的某个端口了。
左边还有一个位设置/清除寄存器,这个可以用来单独操作输出数据寄存器的某一位,而不影响其他位。因为这个输出数据寄存器同时控制16个端口,并且这个寄存器只能整体读写,所以如果想单独控制其中某一个端口而不影响其它端口的话,就需要一些特殊的操作方式,第一种方武是先读出这个寄存器。然后用按位与和按位或的方式更改某位,最后再将更改后的数据写回去。在C语言中就是&=和|=的操作。
第二种方式是通过设置这个位设置和位清除寄存器, 自动将输出数据寄存器中对应位置为1。而剩下写0的位则保持不变。
如果想对某一应进行清0的操作。就在位清除寄存器的对应位写1即可。
第三种方式是:就是读写STM32中的 “位带”区域,51的位寻址,在STM32中。专门分配的有一段地址区域。这段地址映射了RAM和外设寄存器所有的位,读与这段地址中的数据。就相当于读写所映射位置的某─位。
本次主要是第二种。

8、两个MOS管:
我们的信号来控制开关的导通和关闭,开关负责将IO口接到VDD或者VSS.在这里可以选择推挽、开漏或关闭三种输入方式。
推挽输出
在推挽输出模式下,P-MOS和N-MOS均有效,
数据寄存器为1时,上管导通,下管关断,输出直接接到VDD,就是输出高电平
数据寄存器为1时,上管关断,下管导通,输出直接接到VDD,就是输出高电平
这种模武下。高低电平均有较强的驱动能力。所以推挽输出模式也可叫强推输出模武
在推挽输出模式下。STM32对IO口具有绝对的控制权。高低电平都由STM32说的算。
在这里插入图片描述
开漏输出
在开漏输出模式下,这个P-MOS使无效的,只有N-MOS在工作。
数据寄存器为1时。下管断开。这时输出相当于断开。也就是高阻模式
数据寄存器为0时。下管导通,输出直接接到VSS。也就是输出低电平,这种模式下,只有低电平有驱动能力,高电平是没有驱动能力的。这个模式有什么用呢,这个开漏模式可以作为通信协议的驱动模式。比如I2C通信的引脚,就是使用的开漏模式。在多级通信的情况下,这个模式可以避免各个设备的互相干扰。另外开漏模式还可以又来输出5V的电平信号。比如在IO口外界一个上拉电阻到5V的电源。,当输出低电平时,有内部的N-MOS直接接到VSS.当输出高电平时,由外部的上拉电阻拉高至5V.这样就可以输出5V的电平信号,用于兼容一些5V电平的设备。这就是开漏输出的主要用途。

在这里插入图片描述

关闭;设置为输入模式是,两个管都无效,也就是输出关闭,端口的电平由外部信号来控制。
在这里插入图片描述

在输入模式时,施密特触发器打开,输出被禁止,可通过输入数据寄存器GPIOx_IDR读取IO状态。其中输人模式,可设置为上拉、下拉、浮空和模拟输入四种。上拉和下拉输入很好理解,默认的电平由上拉或者下拉决定。浮空输入的电平是不确定的,完全由外部的输人决定,一般接按键的时候用的是这个模式。模拟输入则用于ADC采集。

在这里插入图片描述
在输入模式下,输出驱动器是断开的,端口只能输入不能输出。这是因为一个端口只能有一个输出,但可以有多个输入。
在这里插入图片描述
这里输出是断开的,输入的施密特触发器也是关闭的无效状态,所以这些整个的GPIO都是没用的,只剩下模拟输入这条线,在施密特触发器前,所以当我们使用ADC的时候将引脚配置为模拟输出就行了,其他时候用不到。

在这里插入图片描述

如何P-MOS如果无效,就是开漏输出,如果P-MOS和N-MOS都有效,就是推挽输出
另外我们还可看到。在输出模式下。输入模式也是有效的。
在输入模式下,输出都是无效的。这是因为一个端口只能有一个输出,但可以有多个输入。除了模拟输入这个模式会关闭数字的输入功能,其他的7个模式,所有的输入都是有效的。

在这里插入图片描述

在这里插入图片描述
复用功能模式中,输出使能,输出速度可配置,可工作在开漏及推挽模式,但是输出信号源于其它外设,输出数据寄存器GPIOx_ODR无效;输入可用,通过输入数据寄存器可获取IO实际状态,但一般直接用外设的寄存器来获取该数据信号。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、外部电路介绍

在这里插入图片描述

在这里插入图片描述
在单片机,都使用了高电平弱驱动,低电平的强驱动的规则,可以避免高低电平打架。
在这里插入图片描述
PNP 左边是基极,带箭头的是发射极,剩下的是集电极,基极给低电平,三极管就会导通。
另外注意一下。这个PNP的极管最好接在上边,NPN的三极管最好接在下。
这是因为三极管的通断。是需要发射极和基极直接产生一定的开启电压的。
如果你把负载接在发射极这边。可能会导致三极管不能开启。
在这里插入图片描述

问题

1、有那么一瞬间想学习模电。
2、挺复杂的。

总结

本节课主要学习了STM32的输出模式,学习了GPIO的结构,1保护二极管,2、PMOS和NMOS管,3、输出数据寄存器 4、复用功能输出 5、输入数据寄存器6、复用功能输入 7、模拟输入输出。还有GPIO的工作模式,输入模式(上拉/下拉/浮空/模拟),输出模式(推挽(常用:高电平和低电平都有较强的驱动能力)/开漏(线与上方MOS管不工作)),复用功能(推挽/开漏)。还有我们常用的电路硬件基础

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

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

相关文章

pytorch中dataloader自定义数据集

前言 在深度学习中我们需要使用自己的数据集做训练&#xff0c;因此需要将自定义的数据和标签加载到pytorch里面的dataloader里&#xff0c;也就是自实现一个dataloader。 数据集处理 以花卉识别项目为例&#xff0c;我们分别做出图片的训练集和测试集&#xff0c;训练集的标…

SQL Server:触发器

在 SQL Server Management Studio (SSMS) 中查看数据库触发器的方法如下&#xff1a; 方法一&#xff1a;通过对象资源管理器 连接到 SQL Server 打开 SSMS&#xff0c;连接到目标数据库所在的服务器。 定位到数据库 在左侧的 对象资源管理器 中&#xff0c;展开目标数据库&a…

标题:利用 Rork 打造定制旅游计划应用程序:一步到位的指南

引言&#xff1a; 在数字化时代&#xff0c;旅游计划应用程序已经成为旅行者不可或缺的工具。但开发一个定制的旅游应用可能需要耗费大量时间与精力。好消息是&#xff0c;Rork 提供了一种快捷且智能的解决方案&#xff0c;让你能轻松实现创意。以下是使用 Rork 创建一个定制旅…

WebSocket原理详解(二)

WebSocket原理详解(一)-CSDN博客 目录 1.WebSocket协议的帧数据详解 1.1.帧结构 1.2.生成数据帧 2.WebSocket协议控制帧结构详解 2.1.关闭帧 2.2.ping帧 2.3.pong帧 3.WebSocket心跳机制 1.WebSocket协议的帧数据详解 1.1.帧结构 WebSocket客户端与服务器通信的最小单…

计算声音信号波形的谐波

计算声音信号波形的谐波 1、效果 2、定义 在振动分析中,谐波通常指的是信号中频率是基频整数倍的成分。基频是振动的主要频率,而谐波可能由机械系统中的非线性因素引起。 3、流程 1. 信号生成:生成或加载振动信号数据(模拟或实际数据)。 2. 预处理:预处理数据,如去噪…

RepoReporter 仿照`TortoiseSVN`项目监视器,能够同时支持SVN和Git仓库

RepoReporter 项目地址 RepoReporter 一个仓库监视器&#xff0c;仿照TortoiseSVN项目监视器&#xff0c;能够同时支持SVN和Git仓库。 工作和学习会用到很多的仓库&#xff0c;每天都要花费大量的时间在频繁切换文件夹来查看日志上。 Git 的 GUI 工具琳琅满目&#xff0c;Git…

UI设计系统:如何构建一套高效的设计规范?

UI设计系统&#xff1a;如何构建一套高效的设计规范&#xff1f; 1. 色彩系统的建立与应用 色彩系统是设计系统的基础之一&#xff0c;它不仅影响界面的整体美感&#xff0c;还对用户体验有着深远的影响。首先&#xff0c;设计师需要定义主色调、辅助色和强调色&#xff0c;并…

【计算机网络】记录一次校园网无法上网的解决方法

问题现象 环境&#xff1a;实训室教室内时间&#xff1a;近期突然出现 &#xff08;推测是学校在施工&#xff0c;部分设备可能出现问题&#xff09;症状&#xff1a; 连接校园网 SWXY-WIFI 后&#xff1a; 连接速度极慢偶发无 IP 分配&#xff08;DHCP 失败&#xff09;即使分…

第二十一章:Python-Plotly库实现数据动态可视化

Plotly是一个强大的Python可视化库&#xff0c;支持创建高质量的静态、动态和交互式图表。它特别擅长于绘制三维图形&#xff0c;能够直观地展示复杂的数据关系。本文将介绍如何使用Plotly库实现函数的二维和三维可视化&#xff0c;并提供一些优美的三维函数示例。资源绑定附上…

系统思考反馈

最近交付的都是一些持续性的项目&#xff0c;越来越感觉到&#xff0c;系统思考和第五项修炼不只是简单的一门课程&#xff0c;它们能真正融入到我们的日常工作和业务中&#xff0c;帮助我们用更清晰的思维方式解决复杂问题&#xff0c;推动团队协作&#xff0c;激发创新。 特…

【C++】vector常用方法总结

&#x1f4dd;前言&#xff1a; 在C中string常用方法总结中我们讲述了string的常见用法&#xff0c;vector中许多接口与string类似&#xff0c;作者水平有限&#xff0c;所以这篇文章我们主要通过读vector官方文档的方式来学习vector中一些较为常见的重要用法。 &#x1f3ac;个…

2025年数智化电商产业带发展研究报告260+份汇总解读|附PDF下载

原文链接&#xff1a;https://tecdat.cn/?p41286 在数字技术与实体经济深度融合的当下&#xff0c;数智化产业带正成为经济发展的关键引擎。 从云南鲜花产业带的直播热销到深圳3C数码的智能转型&#xff0c;数智化正重塑产业格局。2023年数字经济规模突破53.9万亿元&#xff…

Linux中常用服务器监测命令(性能测试监控服务器实用指令)

1.查看进程 ps -ef|grep 进程名以下指令需要先安装:sysstat,安装指令: yum install sysstat2.查看CPU使用情况(间隔1s打印一个,打印6次) sar -u 1 63.#查看内存使用(间隔1s打印一个,打印6次) sar -r 1 6

基于 GEE 的区域降水数据可视化:从数据处理到等值线绘制

目录 1 引言 2 代码功能概述 3 代码详细解析 3.1 几何对象处理与地图显示 3.2 加载 CHIRPS 降水数据 3.3 筛选不同时间段的降水数据 3.4 绘制降水时间序列图 3.5 计算并可视化短期和长期降水总量 3.6 绘制降水等值线图 4 总结 5 完整代码 6 运行结果 1 引言 在气象…

曲线拟合 | Matlab基于贝叶斯多项式的曲线拟合

效果一览 代码功能 代码功能简述 目标&#xff1a;实现贝叶斯多项式曲线拟合&#xff0c;动态展示随着数据点逐步增加&#xff0c;模型后验分布的更新过程。 核心步骤&#xff1a; 数据生成&#xff1a;在区间[0,1]生成带噪声的正弦曲线作为训练数据。 参数设置&#xff1a…

Qt6调试项目找不到Bluetooth Component蓝牙组件

错误如图所示 Failed to find required Qt component "Bluetooth" 解决方法&#xff1a;搜索打开Qt maintenance tool 工具 打开后&#xff0c;找到这个Qt Connectivity&#xff0c;勾选上就能解决该错误

JAVA- 锁机制介绍 进程锁

进程锁 基于文件的锁基于Socket的锁数据库锁分布式锁基于Redis的分布式锁基于ZooKeeper的分布式锁 实际工作中都是集群部署&#xff0c;通过负载均衡多台服务器工作&#xff0c;所以存在多个进程并发执行情况&#xff0c;而在每台服务器中又存在多个线程并发的情况&#xff0c;…

Java Spring Boot 与前端结合打造图书管理系统:技术剖析与实现

目录 运行展示引言系统整体架构后端技术实现后端代码文件前端代码文件1. 项目启动与配置2. 实体类设计3. 控制器设计4. 异常处理 前端技术实现1. 页面布局与样式2. 交互逻辑 系统功能亮点1. 分页功能2. 搜索与筛选功能3. 图书操作功能 总结 运行展示 引言 本文将详细剖析一个基…

深入剖析JavaScript多态:从原理到高性能实践

摘要 JavaScript多态作为面向对象编程的核心特性&#xff0c;在动态类型系统的支持下展现了独特的实现范式。本文深入解析多态的三大实现路径&#xff1a;参数多态、子类型多态与鸭子类型&#xff0c;详细揭示它们在动态类型系统中的理论基础与实践意义。结合V8引擎的优化机制…

GalTransl开源程序支持GPT-4/Claude/Deepseek/Sakura等大语言模型的Galgame自动化翻译解决方案

一、软件介绍 文末提供程序和源码下载 GalTransl是一套将数个基础功能上的微小创新与对GPT提示工程&#xff08;Prompt Engineering&#xff09;的深度利用相结合的Galgame自动化翻译工具&#xff0c;用于制作内嵌式翻译补丁。支持GPT-4/Claude/Deepseek/Sakura等大语言模型的…