04-ESP32S3-GPIO

2024-03-10 22:52
文章标签 04 gpio esp32s3

本文主要是介绍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 */
}

请添加图片描述

这篇关于04-ESP32S3-GPIO的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/795788

相关文章

【设计模式-04】原型模式

【设计模式-04】原型模式 1. 概述2. 结构3. 实现4. 案例5. 使用场景6. 优缺点6.1 原型模式的优点6.2 原型模式的缺点 7. 实现深克隆(深拷贝) 1. 概述 原型模式: 用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。 2. 结构 原型模式包含如下角色: 抽象原型类:规定了具体原型对象必须实现的 clone() 方法。

C++ 教程 - 04 类的使用

文章目录 类的定义类定义案例构造函数 类的定义 C++ 在 C 语言的基础上增加面向对象编程,类是用于指定对象的形式,是一种用户自定义的数据类型,封装了数据和函数。类可以被看作是一种模板,可以用来创建具有相同属性和行为的多个对象。 class 关键字定义类,相当于在结构体中加入方法; 花括号内定义成员变量、成员方法,并且分块表示,每块使用public/private/prote

04 TensorFlow 2.0:高阶OP之meshgrid

谁诀别相思成疾莫问天涯 也莫问归期 怎奈何无人了解 情断之时 冷暖自知                                                                                                                                 《莫问归期》 内容覆盖: stackmeshgrid im

stm32学习笔记---GPIO输出(代码部分)LED闪烁/流水灯/蜂鸣器

目录 面包板的使用方法 第一个演示代码:LED闪烁 最后一次快速新建工程演示 点击新建工程 选择芯片 在工程文件夹中创建Start、Library、User Start文件夹的必备文件复制操作 Library文件夹的必备文件复制操作 User文件夹的必备文件复制操作 在keil中创建Start、Library、User分组并添加文件 添加Start、Library、User文

stm32学习笔记---GPIO输入(理论部分)

目录 GPIO输入模式下的硬件和电路 按键原理 传感器原理 什么是上下拉电阻? 运算放大器当做比较器 按键的硬件电路 传感器的硬件电路 STM32用到的C语言知识 STM32中的C语言数据类型 C语言中的宏定义 typedef和define的区别是什么? C语言的枚举 声明:本专栏是本人跟着B站江科大的视频的学习过程中记录下来的笔记,我之所以记录下来是为了方便自己

stm32学习笔记---GPIO输出(理论部分)

目录 GPIO通用输入输出口 GPIO的基本结构 I/O端口位的基本结构 输入部分 输出部分 推挽模式 开漏模式 GPIO的8种工作模式 STM32手册GPIO和AFIO大致介绍 STM32外部的设备和电路 声明:本专栏是本人跟着B站江科大的视频的学习过程中记录下来的笔记,我之所以记录下来是为了方便自己日后复习。如果你也是跟着江科大的视频学习的,可以配套本专栏食用,如

More Effective C++ 条款04:非必要不提供默认构造函数

所谓默认构造函数,就是不给任何变量,就可以给调用(无参或参数为默认值)。 基本准则:凡可以“合理地从无到有生成对象”的类,都应该包含默认构造函数,而“必须有某些外来信息才能生成对象”的类,则不必拥有默认构造函数。 但如果类缺乏一个默认构造函数,当你使用这个类时便会有某些限制。 考虑下面这个针对公司仪器而设计的class,在其中,仪器识别码是一定得有的一个构造参数: class Equipm

04_FFmpeg常用API及内存模型

【说明】课程学习地址:https://ke.qq.com/course/468797 FFmpeg内存模型 FFmpeg内存模型 int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt);int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *f

【Rust日报】 2019-04-06

Arenas vs. Indices:為型別寫函數要寫在型別裡還是外面? 作者舉了一些例子 下面簡單說明他討論的這個問題 他想為MVPArena寫一個add的函數 那把add這個函數從 impl MVPArena 移到外面 那首先就要解決生命週期的問題 struct MVPArena<T>(Vec<T>);impl<T> MVPArena<T> {fn add(&mut self, T valu

【Rust日报】 2019-04-05

「系列文章」审阅Sled源码 Part I #CodeReview #sled Sled项目是一个用Rust编写的嵌入式数据库。该文作者在日程工作中用到了它,为了掌握它的工作原理,准备开始写这个系列的博客。也可以通过学习此文,掌握一些阅读开源项目源码的技巧或其他启示,比如: 先找你擅长领域的项目去阅读,事半功倍。从整体上先把握代码组织结构、依赖库,从所获得的信息中去推测更多信息。携带某个主要的问