【STM32】GPIO输出(江科大)

一、GPIO简介

1.GPIO:通用输入输出口
2.可配置为8种输入输出模式
3.引脚电平:0-3.3V(输出最大3.3V),部分引脚可容忍5V(输入,有FT)
4.输出模式下,可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
5.输入模式下,可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
在这里插入图片描述
·在STM32中,所有的GPIO都是挂载在APB2外设总线上的
·每个GPIO外设有16个引脚
·寄存器是一段特殊的存储器,内核可以通过APB2总线对寄存器进行读写,这样就可以完成输出电平和读取电平的功能了。寄存器的每一位对应一个引脚,其中输出寄存器写1,对应的引脚就会输出高电平,写0,就会输出低电平;输入寄存器读取为1,对应的端口目前是高电平,读取为0,就是低电平。因为STM32是32位的单片机,所以内部的寄存器都是32位的,但端口只有16位,所以这个寄存器只有低16位对应的有端口
·驱动器是用来增加信号的驱动能力
在这里插入图片描述
左边:寄存器;中间:驱动器;右边:某一个IO的引脚
上面:输入部分;下面:输出部分
在这里插入图片描述

在这里插入图片描述

·输入部分:
1.最右边IO引脚,接两个保护二极管,对输入电压进行限幅,如果输入电压比3.3V高,上方的二极管导通,输入电压就会直接流入VDD而不会流入内部电路;如果输入电压比0V低,下方的二极管会导通,电流会从VSS直接流出去。
2.然后连接一个上拉电阻和一个下拉电阻,上拉电阻至VDD,下拉电阻至VSS,开关是可以通过程序进行配置的。如果上面导通,下面断开,就是上拉输入模式;如果下面导通,上面断开,就是下拉输入模式;如果两个都断开,就是浮空输入模式。为了避免引脚悬空导致的输入数据不确定,需要加上拉电阻或下拉电阻,上拉输入默认为高电平输入模式,下拉默认低电平。上拉电阻和下拉电阻的阻值都是比较大的,是一种弱上拉和弱下拉,目的是不影响正常的输入操作。
3.然后是一个肖特基触发器(施密特触发器),作用是对输入电压进行整形,执行逻辑是,如果输入电压大于某一阈值,输出就会瞬间升为高电平;如果输入电压小于某一阈值,输出就会瞬间降为低电平,可以有效避免因信号波动造成的输出抖动现象。接下来经过施密特触发器整形的波形就可以直接写入输入数据寄存器了,再用程序读取输入数据寄存器对应的某一位的数据,就可以知道端口的输入电平了。
4.最后上面还有两根线路,连接到片上外设的一些端口,模拟输入连接到ADC上,接收的是模拟量,接到施密特触发器前面;复用功能输入连接到其他需要读取端口的外设上,接收的是数字量,接到施密特触发器后面。
·输出部分:
1.数字部分由输出数据寄存器或片上外设控制,两种控制方式通过数据选择器接到输出控制部分。如果选择通过输出数据寄存器进行控制,就是普通的IO口输出,写这个数据寄存器的某一位就可以操作对应的某个端口。
2.左边的位设置/清除寄存器,用来单独操作输出数据寄存器的某一位(因为输出数据寄存器同时控制16个端口,并且这个寄存器只能整体读写),如果要对某一位进行置1操作,在位设置寄存器的对应位写1即可,剩下写0,内部电路自动将输出数据寄存器中对应位置为1,写0位保持不变;如果想对某一位进行清0的操作,就在位清零寄存器的对应位写1即可。
3.接下来接到两个MOS管(一种电子开关),信号来控制开关的导通和关闭,开关负责将IO口接到VDD或VSS,可以选择推挽、开漏或关闭三种输出方式
在这里插入图片描述
在这里插入图片描述

(1)在(强)推挽输出模式下,P-MOS和N-MOS均有效,数据寄存器为1时,上管导通,下管断开,输出直接接到VDD,输出高电平;0则相反。
(2)在开漏输出模式下,P-MOS无效,数据寄存器为1时,下管断开,这时输出相当于断开,也就是高阻模式;数据寄存器为0时,下管导通,输出直接接到VSS,也就是输出低电平,这种模式下只有低电平有驱动能力,可以作为通信协议的驱动方式,在多机通信的情况下,可以避免各个设备的相互干扰;还可以用于输出5V的电平信号(在IO口外接一个上拉电阻到5V的电源,当输出低电平时,有内部的N-MOS直接接VSS,当输出高电平时,由外部的上拉电阻拉高至5V,就可以输出5V的电平信号,用于兼容一些5V电平的设备)。
(3)关闭:当引脚配置为输入模式时,两个MOS管都无效,端口的电平由外部信号来控制。
在这里插入图片描述

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

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

相关文章

网络学习(14)|RESTful API设计:构建优雅的Web服务

文章目录 设计原则最佳实践命名与URI设计状态码与响应格式HTTP状态码详解响应格式选择 在当今的互联网世界中,RESTful API已成为构建可扩展、可维护和高性能Web服务的标准。本文将深入探讨RESTful API的设计原则、资源命名与URI设计的最佳实践,以及请求与…

linux系统宝塔服务器temp文件夹里总是被上传病毒php脚本

目录 简介 上传过程 修复上传漏洞 tmp文件夹总是被上传病毒文件如下图: 简介 服务器时不时的会发送短信说你服务器有病毒, 找到了这个tmp文件, 删除了之后又有了。 确实是有很多人就这么无聊, 每天都攻击你的服务器。 找了很久的原因, 网上也提供了一大堆方法,…

通过语言大模型类学习python,卡哪问哪(一)

代码语法学习,代码解析 import matplotlib.pyplot as plt import numpy as np import PIL import tensorflow as tffrom tensorflow import keras from tensorflow.keras import layers from tensorflow.keras.models import Sequential 一、语法解析 (…

themleaf 页面弹层取值

themleaf 页面弹层取值 创作背景themleaf页面事件onbluronclick 页面参数提交 创作背景 个人在日常开发中,遇到了一个需求页面,页面交互较多,用到的事件也很丰富,特此记录,方便后续查找也方便有需要的开发者采用&…

10 SpringBoot 静态资源访问

我们在开发Web项目的时候,往往会有很多静态资源,如html、图片、css等。那如何向前端返回静态资源呢? 以前做过web开发的同学应该知道,我们以前创建的web工程下面会有一个webapp的目录,我们只要把静态资源放在该目录下…

从零手写实现 nginx-23-nginx 对于 cookie 的操作

前言 大家好,我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的,可以参考我的另一个项目: 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …

信号与系统实验MATLAB-实验2-连续时间系统的时域分析

实验二 连续时间系统的时域分析 一、实验目的 1、掌握连续时间信号卷积及其MATLAB实现方法; 2、掌握连续系统的冲激响应、阶跃响应及其MATLAB实现方法; 3、掌握利用MATLAB求LTI系统响应的方法; 4、掌握利用MATLAB求函数卷积和解微分方程…

网络IO模型:BIO NIO AIO 的区别!!!

BIO是同步阻塞I/O模型,它使用一个线程来处理一个请求,如果这个请求没有被处理完,这个线程就会一直等待,直到请求处理完成。这种模型适用于连接数较小的情况。 NIO是同步非阻塞I/O模型,它使用单个线程来处理多个请求&a…

APM之:卡顿监控

方案一:参考了ANR-WatchDog机制 ANR-WatchDog机制原理不复杂,它内部启动了一个子线程,定时通过主线程Handler发送Message,然后定时去检查Message的处理结果。 通俗来说就是利用了Android系统MessageQueue队列的排队处理特性。 …

学习grdecl文件格式之后的事情

学习了grdecl文件格式,搞地质的专业人士都知道,这是专门用在地质上的油藏软件(个人感觉就是斯伦贝谢的Petrel的)的一种文件格式,正好自己也在学习三维的开发,顺手写了一个简单的读取grdecl算法,…

Vue3【十九】自定义Hooks钩子 将数据和方法分组

Vue3【十九】自定义Hooks钩子 将数据和方法分组 Vue3【十九】自定义Hooks钩子 将数据和方法分组 每个分组都可以放置 各种生命周期钩子 分组和可以使用计算属性等 案例截图 目录结构 代码 person.vue <template><div class"person"><h2>Vue3自定…

Linux指令学习(4)

目录 0.普通用户和root用户之间的切换 1.head/tail指令 2.管道 3.date命令 4.三个查找相关的指令 5.文件过滤grep 6.打包和压缩 5.zip/unzip指令 0.普通用户和root用户之间的切换 &#xff08;1&#xff09;这个我们之前不是经常使用这个root用户吗&#xff0c;现在随着…

NLP--逻辑回归

1.定义 如何解决二元分类问题&#xff0c;除了上节我们谈到的贝叶斯分类器&#xff0c;我们可以通过计算数据属于不同类别的概率进行分类的逻辑回归。虽然有回归二字&#xff0c;但逻辑回归解决的是分类问题&#xff0c;也可以用于两类以上的多分类问题。 2.方法 概率是介于0到…

python操作jenkins

参考链接&#xff1a; python操作jenkins

数据结构笔记39-48

碎碎念&#xff1a;想了很久&#xff0c;不知道数据结构这个科目最终该以什么笔记方式呈现出来&#xff0c;是纸质版还是电子版&#xff1f;后来想了又想&#xff0c;还是电子版吧&#xff1f;毕竟和计算机有关~&#xff08;啊哈哈哈哈哈哈哈&#xff09; 概率论已经更新完了&…

代码随想录训练营第八天 151反转字符串中的单词 右旋字符串

第一题&#xff1a; 原题链接&#xff1a;151. 反转字符串中的单词 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 先把首尾的空格去掉&#xff1a;找到第一个不是空格的字符&#xff0c;找到最后一个不是空格的字符。substr字符串为新的字符串t。 使用双指针&…

【Python入门与进阶】Jupyter Notebook配置与优化

目录 1.Jupyter Notebook简介 2.Jupyter Notebook的安装 2.1 命令行安装 2.2 可视化界面安装 3.Jupyter Notebook的使用 3.1 启动 Jupyter Notebook 3.2 Jupyter Notebook 界面介绍 3.3 创建新的 Notebook 3.4 编写和运行代码单元 3.5 使用 Markdown 编写文档 3.6 保…

快慢指针在字符串中的应用-443. 压缩字符串

题目链接及描述 443. 压缩字符串 - 力扣&#xff08;LeetCode&#xff09; 题目分析 这个题目总体不算太难&#xff0c;如果之前接触过双指针&#xff08;快慢指针&#xff09;的话&#xff0c;比较好做。题目可以理解为计算数组中对应各个连续字符出现的次数&#xff0c;并将…

SAPUI5基础知识5 - 控件(control)的使用

1. 背景 在SAPUI5中&#xff0c;控件&#xff08;Control&#xff09;是构建用户界面的基本元素。控件是一个可重用的组件&#xff0c;它可以与用户进行交互或显示信息。 每个控件都有自己的特性&#xff0c;例如属性&#xff08;Properties&#xff09;、聚合&#xff08;Agg…