嵌入式-Stm32-江科大基于标准库的GPIO的八种模式

文章目录

    • 一:GPIO输入输出原理
    • 二:GPIO基本结构
    • 三:GPIO位结构
    • 四:GPIO的八种模式
      • 道友:相信别人,更要一百倍地相信自己。

(推荐先看文章:《 嵌入式-32单片机-GPIO推挽输出和开漏输出》)

一:GPIO输入输出原理

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

二:GPIO基本结构

GPIO的基本结构图

  • 上图是GPIO的基本结构图。在Stm32中,所有的GPIO都挂载在APB2外设总线上。每个GPIO模块内,包括有寄存器、驱动器、引脚等 寄存器就是一段特殊的存储器,内核可以通过APB2总线对寄存器进行读写,从而完成输出电平和读取电平的功能。该寄存器的每一位都对应一个引脚,由于STM32是32位的单片机,所以所有的寄存器都是32位的,也就是说只有寄存器的低16位对应上了相应的GPIO口(好多时候高16位置0,低16位才真正控制寄存器)

  • 驱动器就是增加信号的驱动能力的。

注意:stm32F103c8t6芯片上48个引脚,除了基本的电源和晶振等维持系统外,分别包括PA0~PA15、PB0-PB15、PC0 ~PC15。

三:GPIO位结构

GPIO位结构
上图分为输入部分和输出部分,看虚线框

输入部分:

  • 整个框架从左往右依次是寄存器、驱动器、IO引脚,从上到下分为“输入”、“输出”。
  • 最右侧的IO引脚上两个保护二极管,其作用是对IO引脚的输出电压进行限幅在0~3.3V之间,进而可以避免过高的IO引脚输入电压对电路内部造成伤害。Vdd = 3.3V,Vss = 0V。
  • 过压保护:当I引脚输入10V时,电压从输入引脚到保护二极管再到Vdd,有电压差就能流通,这叫过压保护。
  • 低压保护:当I引脚输入低于0V时,这叫做负电压,此时,电流流向为:从Vss →I引脚,这叫低压保护。
  • 输入驱动器的上、下拉电阻(图中像弹簧那两根):相应的开关可以通过程序进行配置,分别有上拉输入模式(上开关导通,下开关断开)、下拉输入模式(下开关导通&上开关断开)、浮空输入模式(两个开关都断开)。
    下拉电阻的作用几时给引脚输入提供一个默认的输入电平,进而避免引脚悬空导致的不确定。都属于弱上拉,弱下拉。

  • 输入驱动器的触发器:这里是用肖特基管构成的施密特触发器。只有高于上限、低于下限电压才进行变化,作用是对输入电压进行整形,可以消除电压波纹、使电压的上升沿/下降沿更加陡峭。也就是说,stm32的GPIO的端口会自动对输入的数字电压进行整形。比如像那种方波在变化的那个瞬间进行消抖,20ms.

  • “模拟输入”、“复用功能输入”:都是连接到片上外设的一些端口,前者用于ADC等需要模拟输入的外设,后者用于串口输入引脚等需要数字量的外设。

输出部分:

  • 输出数据:可以由输出数据寄存器(普通的IO口输出)、片上外设来指定,数据选择器控制数据来源。
  • 位设置/清除寄存器:单独操作输出数据的某一位,而不影响其他位。
  • 驱动器中的MOS管:MOS管相当于一种开关,输出信号来控制这两个MOS管的开启状态,进而输出信号。可以选择推挽、开漏、关闭三种输出方式(推荐先看文章:《嵌入式-32单片机-GPIO推挽输出和开漏输出》),P-MOS相当于Q1,N-MOS相当于Q2
  • 推挽输出模式:两个MOS管均有效,stm32对IO口有绝对的控制权,也称为强推输出模式。
  • 开漏输出模式:P-MOS无效。只有低电平有驱动能力,高电平输出高阻。
  • 关闭模式:两个MOS管均无效,端口电平由外部信号控制。

补充说明:stm32如何将数据写入寄存器?

  • 通过软件的方式。由于stm32的寄存器只能进行整体读写,所以可以先将数据全部读出,然后代码中用&= 清零、|= 置位的方式改变单独某一位的数据,再将该写后的数据写回寄存器。此方法比较麻烦,效率不高,对于IO口进行操作不合适(这就是基于寄存器开发的麻烦之处,所以有了基于标准库的开发)

  • 通过位设置/清除寄存器。若对某一位 置1,只需对位设置寄存器的相应位值1;若对某一位 清零,则对清除寄存器相应位 清零。这种方式通过内置电路完成操作,一步到位。

  • 通过读写stm32中的“位带”区域。在stm32中,专门分配有一段地址区域,该区域映射了RAM和外设寄存器所有的位。读写这段地址中的数据,就相当于读写所映射位置的某一位。整体流程与51单片机中的位寻址作用差不多。本教程不涉及。

四:GPIO的八种模式

模式名称性质特征
浮空输入数字输入可读取引脚电平,若引脚悬空则电平不确定,需要连续驱动源
上拉输入数字输入可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
下拉输入数字输入可读取引脚电平,内部连接下拉电阻,悬空时默认低电平
模拟输入模拟输入GPIO无效,引脚直接接入内部ADC(ADC专属配置)
开漏输出数字输出可输出引脚电平,高电平为高阻态,低电平接Vss
推挽输出数字输出可输出引脚电平,高电平接VDD,低电平接Vss
复用开漏输出数字输出由片上外设控制,高电平为高阻态,低电平接Vss
复用推挽输出数字输出由片上外设控制,高电平接VDD,低电平接Vss

上表给出了GPIO的八种模式,通过配置GPIO的端口配置寄存器即可选择相应的模式。

  1. 每一个端口的模式由四位进行控制,16个端口就需要64位,也就是两个32位寄存器,即端口配置低寄存器、端口配置高寄存器。
  2. 输入模式下,输出无效;而输出模式下,输入有效。这是因为一个IO口只能有一个输出,但可以由多个输入,所以直接将输出信号输入回去也没问题。

寄存器:暂时记录数据的模块。

复用开漏/推挽输出:引脚的控制权转移到了片上外设
stm32串口默认是半双工的。

三极管可看成两个二极管构成(背靠背)

参考:B站STM32江协自动化&【哈工大虎慕】

道友:相信别人,更要一百倍地相信自己。

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

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

相关文章

vue-cli解决跨域

在vue.config.js中 找到devServer 在devServer中创建proxy代理 proxy:{ path(路径中包含这个path就会导航到target的目标接口):{ target:"目标接口" } } 例: 1 同源策略只针对于浏览器,代理服务器到后端接…

操作系统课程设计-Linux 进程控制

目录 前言 1 实验题目 2 实验目的 3 实验内容 3.1 进程的创建 3.1.1 步骤 3.1.2 关键代码 3.2 子进程执行新任务 3.2.1 步骤 3.2.2 关键代码 4 实验结果与分析 4.1 进程的创建 4.2 子进程执行新任务 5 代码 5.1 进程的创建 5.2 子进程执行新任务 前言 本实验为课…

Electron+React项目打包踩坑记录

首先,如何打包 写下本文的时间是 2024/01/16,搜索了网络上 ElectronReact 的打包方式,中间行不通,本文采用的方式是记录本文时 Electron 快速入门(https://www.electronjs.org/zh/docs/latest/tutorial/quick-start)记录的打包方式…

Stream API 函数式编程 - 告别for循环,代码竟能写的如此优雅?

目录 一、Stream API 函数式编程 1.1、Stream 简介 a)为什么引入 Stream?Stream 的出现就是为了让关于集合的操作更加简单: b)Stream 的特性: c)对stream的操作分为为两类,中间操作 和 结束…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-3 textarea

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>textarea</title> </head><body> <h2>多行文本框:</h2> <!--textarea&#xff08;文本域&#xff09;cols(列) rows(行)--> …

Template Engine-06-模板引擎 Handlebars 入门介绍

拓展阅读 java 表达式引擎 logstash 日志加工处理-08-表达式执行引擎 AviatorScriptMVELOGNLSpELJEXLJUELJanino QLExpress 阿里表达式引擎系统学习 什么是 Handlebars&#xff1f; Handlebars 是一种简单的模板语言。 它使用模板和输入对象生成 HTML 或其他文本格式。Ha…

go语言(一)----声明常量

package mainimport ("fmt""time" )func main() {fmt.Print("hello go!")time.Sleep(1 * time.Second)}运行后&#xff0c;结果如下&#xff1a; 1、golang表达式中&#xff0c;加&#xff1b;和不加&#xff1b;都可以 2、函数的{和函数名一…

【Qt之模型视图】1. 模型和视图架构

1. 模型/视图架构是什么及有什么用 MVC&#xff08;Model-View-Control&#xff09;是一种源自Smalltalk的设计模式&#xff0c;通常用于构建用户界面。 MVC由三种类型的对象组成。模型是应用对象&#xff0c;用来表示数据&#xff1b;视图是模型的用户界面&#xff0c;用来显…

【征服redis5】redis的Redisson客户端

目录 1 Redisson介绍 2. 与其他Java Redis客户端的比较 3.基本的配置与连接池 3.1 依赖和SDK 3.2 配置内容解析 4 实战案例&#xff1a;优雅的让Hash的某个Field过期 5 Redisson的强大功能 1 Redisson介绍 Redisson 最初由 GitHub 用户 “mrniko” 创建&#xff0c;并在…

瑞_Java开发手册_(七)设计规约

文章目录 设计规约的意义设计规约 &#x1f64a;前言&#xff1a;本文章为瑞_系列专栏之《Java开发手册》的设计规约篇。由于博主是从阿里的《Java开发手册》学习到Java的编程规约&#xff0c;所以本系列专栏主要以这本书进行讲解和拓展&#xff0c;有需要的小伙伴可以点击链接…

Java数据结构实现数组(配套习题)

数据结构 数组 一组相同数据类型的集合 特点 数组在内存中是连续分配的创建时要指明数组的大小数组名代表首地址,索引从0开始,到数组的长度-1数组一旦创建好,大小不可以改变使用索引 获取索引位置的值 arr[index]修改 arr[index] val删除 (假删除)遍历,将数组中的元素,依次…

在全志T113-i平台上实现H.265视频解码步骤详解

H.265&#xff0c;也被称为HEVC(HighEfficiency Video Coding)&#xff0c;作为H.264的继任者&#xff0c;提供了更好的视频压缩和更高的视频质。H.265通过引入更多先进的编码技术&#xff0c;如更强大的运动估计和更高效的变换编码&#xff0c;对比H.264进行了改进。这些改进使…

【latex】参考文献排版前移,在最前面引用\usepackage{url}

【LaTeX】参考文献排版前移&#xff0c;在最前面引用\usepackage{url} 写在最前面完整解决步骤请教申申latex编译报错解决方案 写在最前面 参考文献从21开始排版前移了 解决方案&#xff1a;在最前面加一行 \usepackage{url}完整解决步骤 请教申申 申申yyds&#xff01;&am…

Java NIO (一)简介

1 NIO简介 在1.4版本之前&#xff0c;Java NIO类库是阻塞IO&#xff0c;从1.4版本开始&#xff0c;引进了新的异步IO库&#xff0c;被称为Java New IO类库&#xff0c;简称为Java NIO。New IO类库的目的 就是要让Java支持非阻塞IO。 Java NIO类库包含三个核心组件&#xff1a; …

Python 算术运算符:解码数字世界的算术密码

算术运算是计算机编程中最基本和常见的运算之一。在 Python 中&#xff0c;算术运算符提供了一组功能强大的操作符&#xff0c;使得我们能够对数字进行加减乘除等各种数学计算。本文将深入探讨 Python 中的算术运算符&#xff0c;包括常见的算术运算符、使用注意事项以及在实际…

线性回归理论+实战

线性回归 什么是线性回归 3.1. 线性回归 — 动手学深度学习 2.0.0 documentation (d2l.ai) 模型 损失函数 模型拟合&#xff08;fit&#xff09;数据之前&#xff0c;我们需要确定一个拟合程度的度量。 损失函数&#xff08;loss function&#xff09;能够量化目标的实际值…

导入失败,报错:“too many filtered rows xxx, “ErrorURL“:“

一、问题&#xff1a; 注&#xff1a;前面能正常写入&#xff0c;突然就报错&#xff0c;导入失败&#xff0c;报错&#xff1a;“too many filtered rows xxx, "ErrorURL":" {"TxnId":769494,"Label":"datax_doris_writer_bf176078-…

物联网中的通信技术

阅读引言&#xff1a; 本文主要大致为大家带来物联网中的常见的通信方式的知识梳理。 目录 一、概述 二、无线通信技术 1.物联网电子标签 RFID 1.1 RFID 概念 1.2 RFID 系统组成 2.WI-FI技术 3.UWB技术 4.ZigBee技术 5.NFC技术 6.蓝牙技术 7.EnOcean技术 一、概述 物…

【服务器数据恢复】服务器迁移数据时lun数据丢失的数据恢复案例

服务器数据恢复环境&服务器故障&#xff1a; 一台安装Windows操作系统的服务器。工作人员在迁移该服务器中数据时突然无法读取数据&#xff0c;服务器管理界面出现报错。经过检查发现服务器中一个lun的数据丢失。 服务器数据恢复过程&#xff1a; 1、将故障服务器中所有磁盘…

SpringBoot+MybatisPlus+dynamic-datasources实现连接Postgresql和mysql多数据源

场景 dynamic-datasource-spring-boot-starter实现动态数据源Mysql和Sqlserver&#xff1a; dynamic-datasource-spring-boot-starter实现动态数据源Mysql和Sqlserver_dynamic-datasource-spring-boot-starter mysql sqlse-CSDN博客 SpringBoot中整合MybatisPlus快速实现Mys…