04-ESP32S3-GPIO

ESP32S3-IDF GPIO

GPIO简介


ESP32S3提供了多达45个物理GPIO管脚,这些管脚不仅可以作为通用的输入输出接口,还可以连接到内部外设信号。通过GPIO交换矩阵、IO MUX和RTC IO MUX,可以灵活地配置外设模块的输入信号来源于任何GPIO管脚,同时外设模块的输出信号也可以连接到任意GPIO管脚。

在这里插入图片描述

GPIO配置

结构体方法:

#include "driver/gpio.h"// GPIO配置结构体
gpio_config_t io_conf = {.pin_bit_mask = (1ULL<<GPIO_NUM_4), // 选择GPIO4.mode = GPIO_MODE_OUTPUT,           // 设置为输出模式.pull_up_en = GPIO_PULLUP_DISABLE,  // 禁用上拉.pull_down_en = GPIO_PULLDOWN_ENABLE, // 启用下拉.intr_type = GPIO_INTR_DISABLE      // 禁用中断
};// 配置GPIO
esp_err_t ret = gpio_config(&io_conf);
if (ret != ESP_OK) {printf("GPIO配置失败\n");
}

此外,ESP-IDF还提供了一种更简单的方法来配置GPIO。

#include "driver/gpio.h"// 设置GPIO22为输出
gpio_set_direction(GPIO_NUM_22, GPIO_MODE_OUTPUT);
// 设置GPIO22输出低电平
gpio_set_level(GPIO_NUM_22, 0);

这里我们使用gpio_set_directiongpio_set_level函数来配置它的方向和输出电平。

LED灯闪烁实验

这里我参考正点原子的教学案例,将LED的代码部分单独放到.c .h文件中

main文件

/*** @file main.c* @author 宁子希 (1589326497@qq.com)* @brief LED点灯实验* @version 0.1* @date 2024-03-10* * @copyright Copyright (c) 2024* */
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "LED.h"void app_main(void)
{led_init();             /* 初始化LED */while(1){LED_A_TOGGLE();LED_B_TOGGLE();vTaskDelay(500/portTICK_PERIOD_MS);   /* 延时500ms */}}

LED.h文件

/*** @file LED.h* @author 宁子希 (1589326497@qq.com)* @brief   LED驱动代码* @version 0.1* @date 2024-03-10* * @copyright Copyright (c) 2024* */
#ifndef __LED_H_
#define __LED_H_
#include "driver/gpio.h"//引脚定义
#define LED_A_GPIO_PIN    GPIO_NUM_10
#define LED_B_GPIO_PIN    GPIO_NUM_11//引脚的输出的电平状态
enum GPIO_OUTPUT_state{GPIO_OUTPUT_HIGH,GPIO_OUTPUT_LOW
};//LED端口定义 翻转LED
#define LEDA(x)    do{   x ?                                            \gpio_set_level(LED_A_GPIO_PIN, GPIO_OUTPUT_HIGH): \gpio_set_level(LED_A_GPIO_PIN, GPIO_OUTPUT_LOW);  \}while(0)#define LEDB(x)    do{   x ?                                            \gpio_set_level(LED_B_GPIO_PIN, GPIO_OUTPUT_HIGH): \gpio_set_level(LED_B_GPIO_PIN, GPIO_OUTPUT_LOW);  \}while(0)
//LED取反定义
#define LED_A_TOGGLE()    do{gpio_set_level(LED_A_GPIO_PIN,!gpio_get_level(LED_A_GPIO_PIN));}while(0)
#define LED_B_TOGGLE()    do{gpio_set_level(LED_B_GPIO_PIN,!gpio_get_level(LED_B_GPIO_PIN));}while(0)   //函数声明
void led_init(void);   //初始化LED#endif

LED.c文件

/*** @file LED.c* @author 宁子希 (1589326497@qq.com)* @brief LED驱动代码* @version 0.1* @date 2024-03-10* * @copyright Copyright (c) 2024* */#include "LED.h"
/*** @brief   初始化LED*/
void led_init(void){//初始化GPIOgpio_config_t gpio_init_struct = {0};gpio_init_struct.intr_type = GPIO_INTR_DISABLE;                                     /* 失能引脚中断 */gpio_init_struct.mode = GPIO_MODE_INPUT_OUTPUT;                                     /* 输入输出模式 */gpio_init_struct.pull_up_en = GPIO_PULLUP_ENABLE;                                   /* 使能上拉 */gpio_init_struct.pull_down_en = GPIO_PULLDOWN_DISABLE;                              /* 失能下拉 */gpio_init_struct.pin_bit_mask = (1ull << LED_A_GPIO_PIN)|(1ull<<LED_B_GPIO_PIN);    /* 设置的引脚的位掩码 */gpio_config(&gpio_init_struct);                         /* 配置GPIO */LEDA(0);                                                 /* 关闭LED */LEDB(0);                                                 /* 关闭LED */
}

请添加图片描述

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

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

相关文章

访问一次网站的全过程

目录 流程图&#xff1a; 一、应用层开始 1. 在浏览器输入https://www.baidu.com 2. DNS获取IP地址 3. 根据HTTP协议生成HTTP请求报文 应用层结束 二、传输层开始 4. TCP三次握手 传输层结束 三、网络层开始 5. IP寻址 6. ARP协议获取MAC地址 网络层结束 四、数据…

C++面试宝典一部分

今天整理书籍资料时&#xff0c;发现多年前打印的面试资料&#xff0c;拍照分享给大家。

2013-2021年全国31省电子商务销售额数据(无缺失)

2013-2021年全国31省电子商务销售额数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;2013-2021年 2、指标&#xff1a;电子商务销售额数据 3、来源&#xff1a;国家TJ局、各省NJ 4、范围&#xff1a;31省 5、缺失情况&#xff1a;无缺失 6、指标解释&#xff1a;…

阿里云实现两个VPC网络资源互通

背景 由于实际项目预算有限&#xff0c;两套环境虽然分别属于不同的专有网络即不同的VPC&#xff0c;但是希望借助一台运维机器实现对两个环境的监控和日常的运维操作 网络架构 如下是需要实现的外网架构图&#xff0c;其中希望实现UAT环境的一台windows的堡垒机可以访问生产…

js 添加、删除DOM元素

1. js添加、删除DOM元素 1.1. 添加DOM元素 1.1.1. appendChild()方法 该方法添加的元素位于父元素的末尾&#xff0c;使用方法&#xff1a; parentNode.appenChild(NewNode) // parentNode是需要添加元素的容器&#xff0c;NewNode是新添加的元素   创建一个li元素并添加到…

Hack The Box-Crafty

目录 信息收集 rustscan whatweb WEB 漏洞利用 漏洞说明 漏洞验证 提权 get user.txt get Administrator 总结 信息收集 rustscan ┌──(root㉿ru)-[~/kali/hackthebox] └─# rustscan -a 10.10.11.249 --range0-65535 --ulimit5000 -- -A -sC [~] Automatically…

php调用guzzlehttp库时出现Segmentation fault的解决方案

先说结论&#xff0c;这个问题的原因是因为php7.4与openssl3不兼容产生的&#xff0c;解决方案如下&#xff1a; 输入openssl version -a查看openssl版本&#xff0c;如果是3以上的版本与php7.4不兼容&#xff0c;7.4以下的没测试过&#xff0c;估计也有问题。我最终是安装上了…

九州金榜|孩子厌学的因素及解决办法

孩子在学习的过程中&#xff0c;遇到厌学这种情况非常容易见到&#xff0c;这也是孩子在成长的过程中经常遇到的烦恼。面对孩子的厌学&#xff0c;作为家长这时候不要慌乱&#xff0c;要做到分析孩子产生厌学的原因&#xff0c;在去寻找解决孩子厌学的办法。下面九州金榜家庭教…

Android fragment的使用案例

效果图&#xff1a;两个点击事件&#xff0c;显示不同的fragment布局 默认是如下图&#xff0c;点击页面一也如下图 点击页面二如下图&#xff1a; Android Fragment的生命周期是与其所在的Activity紧密相关的。当一个Fragment被添加到Activity中时&#xff0c;它将经历一系列…

消息队列 MQ

文章目录 1. MQ 相关概念1.1 什么是 MQ1.2 为什么要用 MQ1.3 MQ 分类1.4 MQ 的选择 1. MQ 相关概念 1.1 什么是 MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是 message 而已&#x…

酷开科技以消费者需求为导向冲刺OTT行业的星辰大海

通过大屏营销、互动营销等方式&#xff0c;提升品牌认知度和市场竞争力。酷开科技始终坚持以消费者的需求为导向&#xff0c;致力于为品牌方和消费者搭建高效、准确的沟通桥梁&#xff0c;开创OTT大屏营销新纪元。 伴随技术发展&#xff0c;智能电视已经从“尝鲜”变成了主流产…

如何保证对外接口的安全?

文章目录 前言一、生成及校验Token1.1 生成Token1.2 校验Token1.3 SignUtil 签名工具类 前言 1.什么是安全接口&#xff1f; 通常来说要将暴露在外网的 API 接口视为安全接口&#xff0c;需要实现防篡改和防重放的功能。 1.1 什么是篡改问题&#xff1f; 由于 HTTP 是一种无状…