系列教程链接

HAL库编程点灯篇https://blog.csdn.net/oHaoEr/article/details/122999523

一 GPIO简介

1.1 概述

GPIO(通用输入输出端口)即芯片的IO管脚,STM32F103系列中不同产品有不同数量的IO管脚。

下图是其中一个IO管脚的示意图。图中绿色部分即表示芯片的引脚,图中的黄色部分为芯片的钳位保护电路。

1.2 钳位保护电路

钳位电路是指利用二极管正向导通压降相对稳定,且数值较小(有时可近似为零)的特点,来限制IO管脚的电位范围。当该点电压超过VDD+0.7V时,上面的二极管导通;而当该点电压小于VSS-0.7V时,下面的二极管导通。

该电路使得单片机引脚的输入电压限制(钳位)于-0.7V~5.7V之间。

  • 当管脚输入电压高于VDD

这里的VDD指的是单片机的供电电压3.6V或者5V。STM32单片机的引脚可以作为输入,接收外界的电压输入。当出现输入电压高于单片机的内部允许的电压时会烧毁单片机,为此ST公司为了保护芯片在内部设计了钳位电路,即在引脚的供电电压和引脚之间添加了一个二极管。

该钳位电路工作原理如下:

由于二极管的导通电压是+0.7V,当输入引脚与VDD间的电压差即Vpin-VDD>0.7V时,二极管导通形成通路,如下图所示。

  • 当管脚输入电压低于Vss

这里的Vss一般指接地。STM32单片机的引脚可以作为输入,接收外界的电压输入。当出现输入电压高于单片机的内部允许的电压时会烧毁单片机,为此ST公司为了保护芯片在内部设计了钳位电路,即在引脚的供电电压和引脚之间添加了一个二极管。

该钳位电路工作原理如下:

由于二极管的导通电压是0.7V,当输入引脚与Vss间的电压差即Vss-Vpin>0.7V时,即外界输入负电压信号,二极管导通形成通路,如下图所示。

1.3  GPIO工作模式

STM32F103XX产品单片机的IO引脚工作模式可划分为二类八种。分别是4种输入模式和4种输出模式。

引脚状态 工作模式
输入模式 模拟输入
浮动输入
上拉输入
下拉输入
输出模式 推挽输出
开漏输出
复用推挽输出
复用开漏输出

二  GPIO输入模式

2.1 模拟输入模式

STM32F103XX工作在模拟输入模式时,输  入链路中斯密斯缓冲器被关断,输出链路的输出控制器也被断开。模拟输入模式下,STM32单片机的IO引脚将外界输入信号直接传输给内置的ADC电路进行信号采样。

2.2 浮空输入模式

STM32F103XX工作在输入模式时,用于输出模式的缓冲器就会被禁用。下图中的施密特触发器可作为波形整形电路,能将模拟信号波形整形为数字电路能够处理的方波波形,而且由于施密特触发器具有滞回特性,所以抗干扰能力较强。

施密特触发器将模拟信号波形整形为数字电路能够处理的方波波形。

浮空输入模式下,上拉电路与下拉电阻均断开,施密特触发器的输入信号完全取决于引脚的电压状态,施密特触发器将模拟信号波形整形方波波形,单片机按照APB2时钟频率对转化的数字信号进行采样存储于Input Data register寄存器中。

2.3 上拉输入模式

单片机配置成上拉模式后,芯片内部的施密特触发器接入,并将一电阻接入VDD与施密特触发器的输入端之间,如下图所示。

单片机配置成上拉模式后,分两种情况分析讨论:

  • 当IO引脚没有输入时

由于VDD为芯片供电电 压,此时施密特触发器输入电平为高电平,Input Data register寄存器经采样得到的信号为高电平。

  • 当IO引脚接地即输入为低电平时

VDD的电流经上拉电阻,从图中可知,施密特触发器(TTL Schmitt trigger)的输入端与芯片引脚直接相连,当外部芯片引脚接地时,相应地施密特触发器(TTL Schmitt trigger)的输入端为低电平。

经上述分析可知,该输入模式可用于按键检测应用,即芯片引脚与按键相连接,按键此时接地,可输入低电平。

2.4 下拉输入模式

单片机配置成上拉模式后,芯片内部的施密特触发器接入,并将一电阻接入VSS与施密特触发器的输入端之间,如下图所示。

单片机配置成下拉模式后,分两种情况分析讨论:

  • 当IO引脚没有输入时

由于Vss配置为地,此时施密特触发器输入电平为低电平,Input Data register寄存器经采样得到的信号为低电平。

  • 当IO引脚输入为高电平时

从图中可知,施密特触发器(TTL Schmitt trigger)的输入端与芯片引脚直接相连,当外部芯片引脚接3V高电平时,相应施密特触发器(TTL Schmitt trigger)的输入端为高电平。

经上述分析可知,该输入模式可用于按键接高电平时的检测应用。

2.5 复用输入

STM32F103XX在使用片上外设如串口通信等,其信号流入下图所示。信号经芯片引脚进入斯密斯触发器整形后,直接流向对应的内部外设。

三  GPIO输出模式

3.1 推挽输出模式

单片机处于输出模式时,打开输出缓冲,同时输入模式中的斯密斯触发器也同时被激活。

单片机配置成推挽输出模式,当 Output Data register 的值为0时,N-MOS 导通,输出低电平。当 Output Data register 的值为1时,P-MOS 导通,输出高电平。

该模式可以输出0或1。

3.2 开漏输出模式

单片机配置成开漏模式时,电路原理图如下所示,此时需要在芯片引脚处外接工作电压5V作为上拉电压,当 Output Data register 的值为0时,N-MOS导通,输出0;当 Output Data register 的值为1时,芯片引脚为高阻态。

  • 开漏输出特点:

1)开漏输出的这一特性可以实现"线与"功能,多个信号线直接连接在一起,只有当所有信号全部为高电平时,合在一起的总线为高电平;只要有任意一个或者多个信号为低电平,则总线为低电平。

2)用户可以根据项目需要设计不同的上拉电阻,调整上拉电压,调整输出电流增强芯片的驱动能力。

3.3 复用开漏输出模式

如下图所示,单片机的IO引脚供内核感知外界的电压,此时功能较为单一;片上集成的外设可通过IO引脚复用功能与IO引脚连接获取外界输入,再将处理后的数据交于内核处理。

单片机内部集成了诸如USART、CAN、SPI等外设, 这些外设需要借用单片机的对外引脚,这一用法称为单片机引脚的复用功能,同一个引脚既可以单片机使用也可给片上外设使用。

单片机配置成复用模式时,此时的输入信号来自片上外设,同时输入线路中的斯密斯触发器也被激活,而输入链路中的上拉和下拉电阻禁用。

和3.1节、3.2节一样,在开漏模式下,单片机会读取 Input Data register的值获取IO引脚的状态;在推挽模式下,单片机会读取 Output Data register的值获取最后一次输出的值。

3.4 复用推挽输出模式

单片机内部集成了诸如USART、CAN、SPI等外设, 这些外设需要借用单片机的对外引脚,这一用法称为单片机引脚的复用功能,同一个引脚既可以单片机使用也可给片上外设使用。

在推挽模式下,单片机会读取 Output Data register的值获取最后一次输出的值。

使用单片机中的USART时,芯片引脚可以配置成复用推挽输出模式,见下表。

四  总结

经过上面学习可知,单片机的IO引脚可配置成二类八种模式,输入状态对应4种模式;输出状态下对应4种模式。具体应用中应当如何选取正确的配置呢?此时取决于具体应用情况,例如对于串口通信而言,当单片机的IO引脚作为USART的Tx(即发送引脚)时,此时该引脚应配置为复用推挽输出模式;而当单片机的IO引脚作为USART的Rx(即接收引脚)时,此时该引脚应配置为浮空输入或者上拉输入

零基础入门STM32编程——GPIO(五)相关推荐

  1. 零基础入门STM32编程(三)

    前情回顾 通过前面两篇文章的学习,我们已经对STM32有了一定的了解,知道了STM32单片机的基本分类和不同产品间的特点等知识,今天起围绕STM32F103xx继续深入浅出地学习单片机编程. 一.总线 ...

  2. 零基础入门STM32编程(二)

    前情回顾 上篇文章初步认识了STM32,了解了STM32的分类及型号命名规则,本篇内容继续STM32串口编程入门学习. 一 走进STM32 STM32的单片机分为四类,主流单片机又分为五种,四类介绍参 ...

  3. 零基础入门STM32编程(七)——定时器篇(HAL)

    前情回顾 上一篇讲解了HAL库函数点灯,初步学习了如何使用CUBE MX创建工程文件,以及文末送出了获取HAL库函数API手册方法的小福利,本篇将继续学习HAL库函数中的定时器API使用方法. 一 初 ...

  4. 一篇文章让你从JAVA零基础入门`OOP`编程12.20

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(QQ_3336392096.png)] 一篇文章让你从JAVA零基础入门OOP编程 前言: 此文为玄子,复习ACCP-S1课程后, ...

  5. 一期完结《一篇文章让你从JAVA零基础入门`OOP`编程》12.21

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(QQ_3336392096.jpg)] 一篇文章让你从JAVA零基础入门OOP编程 前言: 此文为玄子,复习ACCP-S1课程后, ...

  6. python编程零基础-如何零基础入门Python编程?

    Python目前已经成为最受欢迎的编程语言之一,吸引了一大批粉丝,但是很多人在要跨入的时候犹豫了,原因竟然是觉得零基础学习Python太难了,真的是这样吗?零基础入门Python编程学习有什么好的技巧 ...

  7. 一篇文章让你从JAVA零基础入门`OOP`编程12.19

    一篇文章让你从JAVA零基础入门OOP编程 前言: 此文为玄子,复习ACCP-S1课程后,整理的文章,文中对知识点的解释仅为个人理解. 配套PPT,站点源码,等学习资料 一.预科 1.1 JAVA 介 ...

  8. 零基础入门转录组分析——第五章(表达定量)

    零基础入门转录组分析--第五章(表达定量) 目录 零基础入门转录组分析--第五章(表达定量) 1. 序列比对结果的复查 2. 表达定量 3. 提取有效信息 4. 合并多个样本定量结果 5. 进一步修改 ...

  9. 零基础入门深度学习的五篇经典教程

    零基础入门深度学习>系列文章旨在讲帮助爱编程的你从零基础达到入门级水平.零基础意味着你不需要太多的数学知识,只要会写程序就行了,没错,这是专门为程序员写的文章.虽然文中会有很多公式你也许看不懂, ...

最新文章

  1. 搞java不细心_Java 2 (基础总结)
  2. 零基础入门图像语义分割必备概念整理,复制文件内容到Word观看效果更佳
  3. 第九节、人脸检测之Haar分类器
  4. matlab中用数据拟合圆心,拟合圆并求圆心(matlab)
  5. python生成验证码的程序_Python基础篇生成4位随机验证码
  6. R-Sys.time计算程序运行时间
  7. 查理·芒格的合伙人李录:价值投资在中国到底适不适用?
  8. iPad mini Retina越狱小结【2014年02月06日 - 初稿】
  9. 怎么用软件设计班旗_设计制作:班旗设计
  10. java多线程厨师做饼,Java多线程之厨师与食客问题
  11. vivado时序分析 实例
  12. 【数学】对向量的求导和Jacobian矩阵的几何意义与Hessian矩阵
  13. HyperAttentionDTI:基于注意机制的序列深度学习改进药物-蛋白质相互作用预测
  14. Peregrine半导体推出DOCSIS 3.1标准RF开关IC
  15. 在java中的正则表达式基础
  16. 散户一般持股多少天?
  17. Notepad++统计文本字数
  18. 神马笔记 版本2.11.0——歌词笔记
  19. 腾讯云直播回调处理方式和流程
  20. 网站无法用localhost打开,修复localhost一切常见错误,一次性去除病根

热门文章

  1. Html5 什么是语义化标签? 常见的语义化标签有哪些?
  2. 传奇脚本变量,命令详解
  3. Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>: java.
  4. 极值点坐标C语言,C语言——打印极值点下标
  5. 嵌入式GUI QT之注意事项
  6. 使用nginx搭建Discuz X3.4论坛的QQ互联登录失败问题
  7. 一通百通,带你一次性全理解Spring 中的Template
  8. B站韩顺平java学习笔记(二十三)-- MYSQL基础篇 章节
  9. 测试你潜在是天使还是魔鬼
  10. PCB对点之Mark点检测