General Purpose Input Output (通用输入/输出)简称为GPIO,就是IO口而已。就相当于51单片机中的IO口,即P1_0等。

GPIO的八种模式:

typedef enum

{ GPIO_Mode_AIN = 0x0, //模拟输入
GPIO_Mode_IN_FLOATING = 0x04, //浮空输入
GPIO_Mode_IPD = 0x28, //下拉输入
GPIO_Mode_IPU = 0x48, //上拉输入
GPIO_Mode_Out_OD = 0x14, //开漏输出
GPIO_Mode_Out_PP = 0x10, //推挽输出
GPIO_Mode_AF_OD = 0x1C, //复用开漏输出
GPIO_Mode_AF_PP = 0x18 //复用推挽输出
}    GPIOMode_TypeDef;

推挽输出:可以输出高电平,也可以输出低电平,结构是两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止,高电平由IC电源确定;推挽电路是两个参数相同的三极管或MOSFET,以推挽的方式存在于电路中,各负责正负半周的波形放大任务,电路工作时两只对称的功率开关管每次只有一个导通,所以损耗小效率高,输出既可以向负载灌电流也可以向负载抽取电流;

开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要使用上拉电阻才行,适用于做电流型的驱动,其吸收能力相对较强(一般20ma以内)。
开漏的特点:利用外部电流的驱动能力,减少IC内部的驱动,当IC内部的MOSFET导通的时候,驱动电流是从外部的VCC流经 R pull-up,MOSFET到GND。IC内部仅需要很小的栅极驱动电流。
一般来说 开漏是用来连接不同电平的元器件,匹配电平使用的。因为开漏输出的引脚在不连接外部的上拉电阻的时候,只能输出低电平,如果需要同时具备输出高电平的功能需要加上上拉电阻,很好的一个有点就是可以通过改变上拉电源的电压,便可以改变输出电平,比如加上上拉电阻就可以提供TTL/CMOS电平的输出等,(上拉电阻的组织决定了逻辑电平转换速度,阻值越大,速度越低功耗越小,所以负载电阻的阻值要结合实际情况选优);
OPEN-DRAIN 提供了灵活的输出方式,但是也有弱点,就是在上升沿的时候会有延时,因为上升沿是通过外接无源上拉电阻对负载进行充电实现的,所以当电阻选择小的时候延时就小,但是功耗大,反之延时大功耗小,如果对延时有要求,则建议使用下降沿输出。
可以将多个开漏输出的Pin,连接到一条线上,通过一个上拉电阻,在不增加任何器件的情况下,形成”与逻辑”关系。这也是I2C,SMBus等总线判断总线占用的原理;

浮空输入
由于浮空输入一般多用于外部按键输入,在浮空输入的状态下,IO口的电平状态是不确定的,如果在该引脚悬空的,读取端口的电平状态是不确定的

复用开漏输出、复用推挽输出:可以理解为GPIO被作为第二功能使用的时候的配置情况;

总结:
浮空输如:可以做Key识别 
上拉输入:内部有上电阻
下拉输入 :内部有下拉电阻
模拟输入 :应用ADC模拟输入,或者低电平状态下有电
开漏输出: IO口输出0接地 IO口输出1 悬空 需要上拉电阻才能实现输出高电平,可以读取IO输入电平的变化实现C51的IO的双向功能;
推挽输出: IO输出0接地 IO输出1接VCC 读输入值是未知的
复用功能推挽输出 :片内外设功能 (I2C的SCL,SDA USART TX)
复用开漏输出 :片内外设功能 (TX1,MOSI,MISO,SCK,SS)

使用的实例:
模拟I2C使用开漏输出的时候,接上拉电阻,能够实现0和1的输出,读值的时候先GPIO_SetBits(GPIOB,GPIO_Pin_0); 拉高,然后在读取IO口的值,GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);

※如果无上拉电阻,IO口默认是高电平;需要读取IO口的值,可以使用带上拉电阻的IPU和浮空输入和开漏输出

通常的五种方法使能一个引脚的IO口,作为普通GPIO输入输出:根据需要配置引脚,同时不要使能该引脚的多有的复用功能模块
作为普通模拟输入:配置该IO口为模拟输入模式,同时不要使能该引脚对应的所有的复用功能模块
作为内置外设的输入的设置:根据需要配置该引脚为 浮空输入 带弱上拉输入或者带弱下拉输入,同时使能该引脚对应的某个复用功能模块;
作为内置外设输出:根据需要配置该引脚为复用推挽输出或则复用开漏输出,同时使能该引脚对用德尔复用功能模块

stm32单片机里面的GPIO是什么意思?相关推荐

  1. 单片机里面的CPU使用率是什么鬼?

    打开电脑的任务管理器,看着跳动的CPU使用率,发现很舒服.每一个线程占用了多少CPU清清楚楚,也就能针对性的确认为啥你的电脑跑的慢了. 今天这篇笔记不讲每个任务(或线程)CPU的使用情况,而是单片机整 ...

  2. cpu使用率_单片机里面的CPU使用率是什么鬼?

    打开电脑的任务管理器,看着跳动的CPU使用率,发现很舒服.每一个线程占用了多少CPU清清楚楚,也就能针对性的确认为啥你的电脑跑的慢了. 今天这篇笔记不讲每个任务(或线程)CPU的使用情况,而是单片机整 ...

  3. 单片机搭建环境烧录方法_万物互联-stm32单片机简介、烧录、编程及其项目环境搭建...

    万物互联-stm32单片机简介.烧录.编程 前言:stm32单片机这里给出简单介绍,给不了解的朋友普及下硬件端的基本知识,叙述的较为简单,想深入研究的朋友可以去一些官方网站.论坛.博客汲取知识.最下端 ...

  4. keil 4c语言读写寄存器,【STM32单片机学习】第四课:GPIO控制LED(用寄存器编程)

    [朱老师课程总结] 第一部分.章节目录 第二部分.章节介绍 3.5.1.STM32的GPIO模块数据手册详解1 本节讲解STM32数据手册中GPIO模块相关的部分,主要是GPIO的各类模式及其配置方法 ...

  5. STM32单片机在Keil5下仿真的问题解决及GPIO口初始化、使用

    STM32单片机在Keil5下仿真的问题解决及GPIO口初始化.使用 参考文章: (1)STM32单片机在Keil5下仿真的问题解决及GPIO口初始化.使用 (2)https://www.cnblog ...

  6. STM32单片机入门例程(1.GPIO端口硬件结构)

    文章目录 前言 一.STM32F10x芯片命名规则 二.STM32F10x芯片内部资源 1.内核 2.调试模式 3.内部总线 4.中断控制器(NVIC) 5.存储器 6.时钟.复位和电源管理 7.I/ ...

  7. 基于STM32单片机采集数据数据上云

    前言 以往采集数据均是采用Arduino开发板.esp32wifi模块等,本次实验采用的是STM32单片机,STM32系列基于专为要求高性能.低成本.低功耗的嵌入式应用专门设计的ARM Cortex- ...

  8. 初学者入门:认识STM32单片机

    本教程含有较多专业词汇,大部分时候,不完全理解并不影响继续往下阅读,大家只需要了解大致的概念即可.当然,也鼓励大家多查百度和多问chatgpt,让自己学会的更多. 什么是单片机? 单片机,就是把中央处 ...

  9. 基于STM32单片机的智能停车场车位管理系统设计

    摘  要 通过调查发现,现有的许多公共场所的停车位管理落后,智能化程度不高.为顺应现代自动化狂潮的发展趋势,本项目以STM32单片机为主控芯片,基于RFID智能识别技术,设计了一个具有IC识别的智能停 ...

最新文章

  1. PHP比较时间段一与时间段二是否有交集
  2. OO实现ALV TABLE 九:ALV的事件
  3. Table 自动换行问题
  4. http请求中的Content-Type,详解
  5. elasticsearch运维实战之2 - 系统性能调优
  6. 贪心: Array Splitting(数列分段)(洛谷CF1175D)
  7. mysql 3.5安装_MYSQL学习笔记-06-搭建数据库
  8. 蒙特卡洛法求圆周率 c语言,c++蒙特卡洛法求圆周率
  9. linux shell脚本链接操作符,Shell脚本中的操作符
  10. @Valid注解详解
  11. C# 图片处理之:旋转图片任意角度
  12. NDT 算法和一些常见配准算法
  13. 内存一致性模型(Memory Consistency Models)
  14. C# 文件上传 默认最大为4M的解决方法
  15. TEM014 - 新版阿里云网站界面高保真原型模板-AxureUX
  16. springboot配置错误页面
  17. RK3288-安卓5.1-AP6212-WIFI模组调试
  18. AutoCAD2010安装教程
  19. 每日excel学习之查找替换和定位
  20. 5.21 ticker的使用

热门文章

  1. java 将网页表格导出_Java导出网页表格Excel过程详解
  2. 手推优化算法,了解KKT和closed-form solution是如何使用的
  3. 杭电计算机专业期末考试助攻,杭电嘻哈:舶来文化亦可玩出小清新
  4. Kewail-短信接口接入流程
  5. BeautyGAN图片的高精度美颜
  6. 【墨尘】变态心理学(北京大学)
  7. c语言表达ch是大写英文字母,做几道C语言的习题!
  8. stm32 U盘升级 bootloader程序 基于stm32f407 将升级包下载到U盘中,插入到设备中,完成对主程序的升级
  9. 第五章 多变量线性回归
  10. android js下载地址,js点击下载跳转iOS或安卓