首页 > 其他分享 >GPIO协议

GPIO协议

时间:2023-07-11 11:47:41浏览次数:40  
标签:输出 引脚 协议 复用 模式 开漏 GPIO

GPIO协议

定义

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

GPIO基本结构

img

GPIO位结构
img

GPIO模式

GPIO的模式一共有八个,就是四个输入四个输出。通过配置GPIO的端口配置寄存器。

  • 浮空输入(Input floating)
  • 上拉输入(Input pull-up)
  • 下拉输入(Input-pull-down)
  • 模拟输入(Analog)
  • 开漏输出(Output open-drain)
  • 推挽输出(Output push-pull)
  • 复用开漏输出(Alternate function open-drain)
  • 复用推挽输出(Alternate function pull-push)

端口可以配置成以下8种模式:
img

代码应用

  • STM32
//开启时钟RCC
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

//GPIO初始化
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
	
  • ESP32
    ESP32主要是根据官方文档给出得用例,来完成GPIO驱动的。官方文档配置的结构体如下:

typedef struct
{
  uint64_t pin_bit_mask;  //要配置的GPIO引脚位码
  gpio_mode_t mode;  //GPIO输入输出模式
  gpio_pullup_t pull_up_en;  //设置上拉
  gpio_pulldown_t pull_down_en; //设置下拉
  gpio_int_type_t intr_type; //GPIO中断类型
}gpio_config_t;


#define GPIO_OUTPUT_IO_0    5   //设置输出引脚
#define GPIO_OUTPUT_PIN_SEL  ((1ULL<<GPIO_OUTPUT_IO_0)) //
#define GPIO_INPUT_IO_0     34
#define GPIO_INPUT_PIN_SEL  ((1ULL<<GPIO_INPUT_IO_0))
#define ESP_INTR_FLAG_DEFAULT 0


//初始化GPIO
void ds_touch_gpio_init(){

    //初始化结构
    gpio_config_t io_conf;
    //禁止中断
    io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
    //设置输出模式
    io_conf.mode = GPIO_MODE_OUTPUT;
    //设置引脚位码
    io_conf.pin_bit_mask = GPIO_OUTPUT_PIN_SEL;
    //禁止下拉使能
    io_conf.pull_down_en = 0;
    //禁止上拉使能
    io_conf.pull_up_en = 0;
    //配置GPIO,返回ESP_OK success,或者ESP_ERR_INVALID_ARG Parameter error
    gpio_config(&io_conf);

    //GPIO的中断类型,上升沿或者下降沿
    io_conf.intr_type = GPIO_INTR_ANYEDGE;
    //设置引脚位码
    io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL;
    //设置输入模式    
    io_conf.mode = GPIO_MODE_INPUT;
    //允许使能上拉
    io_conf.pull_up_en = 1;
    gpio_config(&io_conf);

    //改变GPIO中断位引脚
    // gpio_set_intr_type(GPIO_INPUT_IO_0, GPIO_INTR_NEGEDGE);

    //create a queue to handle gpio event from isr
    gpio_evt_queue = xQueueCreate(10, sizeof(uint32_t));
    //开始GPIO任务
    xTaskCreate(gpio_task_example, "gpio_task_example", 2048, NULL, 10, NULL);

    //安装GPIO中断服务程序驱动,开启每个引脚GPIO中断处理程序
    gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT);
    //给GPIO引脚添加中断处理回调函数
    gpio_isr_handler_add(GPIO_INPUT_IO_0, gpio_isr_handler, (void*) GPIO_INPUT_IO_0);

}

小结

GPIO的输出模式,选型的思考,推挽输出模式下,输出具有驱动能力,当CPU输出逻辑'0'时,I/O端口输出低电平,而
当CPU输出逻辑'1'时,输出高电平,一般用于驱动LED,数码管等电子元器件或输出控制某个信号;
开漏输出:适合做电流型的驱动,吸收电流能力较强。当CPU输出逻辑'0'时,I/O端口输出低电平,当CPU输出逻辑'1'时,该引脚处于开漏,也就是浮空状态(高阻态),如果想输出高电平必须接入上拉电阻,同时IO口,可以由外部电路改变位低电平或不变,即可读IO输入电平变化,实现IO口的双向功能;此外还可以将多路开漏输出的引脚连接到一条线上,通过一个上拉电阻,在不增加任何器件的情况下,形成“逻辑与”关系,这也是I2C等总线判断总线占用状态的原理;
复用推挽输出:在STM32中,一个引脚通常可作为普通GPIO来使用,但通常有多个复用模块对应着同一个引脚,那么当这个GPIO作为内置外设引脚时,就叫做复用模式。使用场合:常见片内外设(USART TX/SPI/PWM输出等等)
复用开漏输出:与开漏输出模式一致,不过引脚选择了复用功能。使用场合:常见片内外设(I2C/SMBus etc);

GPIO代码配置思路:
RCC时钟配置-> APB2 -> GPIO结构体 -> GPIO的各种模式,参数配置

标签:输出,引脚,协议,复用,模式,开漏,GPIO
From: https://www.cnblogs.com/7xiaomao/p/17544168.html

相关文章

  • GDB RSP协议
    https://www.cnblogs.com/cfas/p/16847682.htmlhttps://blog.csdn.net/hmsiwtv/article/details/8759129https://blog.51cto.com/u_15060461/4145151......
  • IIC协议介绍
    (1)CSDN学习参考资料1.什么是I2C?I2C全拼InterIntegratedCircuit,简称IIC或I2C,是由Philips公司开发的两线时串行总线,用于SOC与外设的连接通讯,它只需要两根线就能实现I2C的通讯,采用主从模式,主的一方可以读写数据,而从的一方只能等待被读写。从的一方没有主动权。I2C是双向通讯的,由......
  • PROFINET转ETHERCAT协议网关ethercat总线伺服如何控制
    捷米特JM–ECAT-PN是自主研发的一款PROFINET从站功能的通讯网关。该产品主要功能是将PROFINET网络和ETHERCAT网络连接起来。捷米特JM-ECAT-PN连接到PROFINET总线中做为从站使用,连接到ETHERCAT总线中做为从站使用。 3.技术参数PROFINET技术参数网关做为PROFINET......
  • 树莓派Linux跨平台免授权CNC数控数据采集协议,TCP协议包,支持(fanuc、三菱、西门子、海德
    市面上的数控基本都支持了跨平台通讯,下面以三菱为列讲解跨平台协议如何通讯,无需任何DLL,适配任何开发语言,纯Socket通讯先上采集图   代码如下usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;us......
  • OpenFeature 特性flag 标准协议
    OpenFeature属于cncf一个沙箱项目OpenFeature特性社区驱动的标准协议一个sdk可以支持各种后端目前包含了不少支持工具(包含了开源的以及商业工具)支持不少客户端(目前支持了js,java,golang,c#,php)核心概念OpenFeature提供了一些核心概念Evaluationapi -Evaluationcont......
  • jmeter各种协议脚本的开发
    1.各种协议脚本的开发1.1http协议(略)1.2jdbc1.2.1驱动下载地址:https://dev.mysql.com/downloads/mysql-connector-java-5.1.46.jar1.2.1 JDBCConnectionConfiguration前置处理器jdbc配置官网样例:ApacheJMeter-User'sManual:ComponentReferen参数说明:Variab......
  • 开源协议 学习
    关于开源许可协议现今存在的开源协议很多,而经过 OpenSourceInitiative(OSI) 组织通过批准的开源协议目前有 80 多种( http://www.opensource.org/licenses/alphabetical )。本文我们不再阐述 BSD,GPL,LGPL,MIT 等主流协议,而是和大家分享交流几个非主流的开源协议。 ......
  • BugKu:文件包含+php伪协议
     这道题一进去发现一个超连接点击后发现跳转到了如下页面url如下/index.php?file=show.php,觉得这道题应该是一个php伪协议的应用1php://filterphp://filter是一种元封装器,设计用于数据流打开时的筛选过滤应用。这对于一体式(all-in-one)的文件函数非常有用,类似readfile()......
  • 微信小程序websocke协议wss用nginx反向代理
    map$http_upgrade$connection_upgrade{defaultupgrade;''close;}upstreamwebsocket{serveryourip:port;}server{listen443;server_namexxxx.com;sslon;ssl_certificate/xx/xx/cert.crt;ssl_certificate_key/xx/xx/cert.key;......
  • RTSP协议报文交互过程全记录
    一。rtsp拉流(UDP)1.OPTIONS:OPTIONSrtsp://10.0.16.111:554/Streaming/Channels/101RTSP/1.0CSeq:1User-Agent:Lavf59.26.100 RTSP/1.0200OKCSeq:1Public:OPTIONS,DESCRIBE,PLAY,PAUSE,SETUP,TEARDOWN,SET_PARAMETER,GET_PARAMETERDate:  Thu,......