ESP32 之 ESP-IDF 教学(一)——GPIO(1) GPIO配置及其简单操作

本文章 来自原创专栏《ESP32教学专栏 (基于ESP-IDF)》,讲解如何使用 ESP-IDF 构建 ESP32 程序,发布文章并会持续为已发布文章添加新内容! 每篇文章都经过了精打细磨!

↓↓↓通过下方对话框进入专栏目录页↓↓↓
CSDN 请求进入目录       _ O x

是否进入ESP32教学导航(基于ESP-IDF)?

       确定


一、GPIO配置及简单操作

0、引用头文件 #include "driver/gpio.h"

1、方式1 —— 整体法

通过调用gpio_config(const gpio_config_t *pGPIOConfig)函数配置GPIO

(1) 函数gpio_config简介

1、功能简介
GPIO common configuration.
(GPIO通用配置)
Configure GPIO’s Mode,pull-up,PullDown,IntrType
(配置GPIO的模式上拉下拉中断触发类型
2、返回值

返回值 意义
ESP_OK 配置成功
ESP_ERR_INVALID_ARG 参数错误

3、参数值

  • pGPIOConfig (结构体 gpio_config_t 的指针)
(2) 结构体简介

结构体gpio_config_t简介, 在头文件"gpio_types.h"中,但同时包含在gpio.h中,无需再次引用此头文件。

公共成员 类型 意义
pin_bit_mask uint64_t GPIO pin : set with bit mask, each bit maps to a GPIO
mode gpio_mode_t GPIO mode : set input/output mode
pull_up_en gpio_pullup_t GPIO pull-up,表示是否启用内部上拉电阻
前提是已配置上拉电阻,详见本文的第二节:GPIO内部上、下拉电阻配置
pull_down_en gpio_pulldown_t GPIO pull-down表示是否启用内部下拉电阻
前提是已配置下拉电阻(同上)
intr_type gpio_int_type_t GPIO interrupt type

例如,配置GPIO 18GPUIO 19为输出, 其他属性省略。

#
### ESP32-IDF 中创建和使用自定义GPIO组件 #### 准备工作 为了在ESP32操作GPIO,需先完成开发环境配置。这包括NodeMCU ESP32-S V3.0开发板以及数据线等硬件设备;还有安装好支持ESP-IDF的VSCode及其必要的插件和库文件[^1]。 #### 创建自定义GPIO组件 在ESP-IDF框架下构建项目时,可以将特定功能封装成独立组件来增强代码模块化程度与可维护性。对于控制GPIO而言,可以通过如下方式建立简单的自定义组件: 1. **目录结构** 首先按照标准布局设置新组建的位置,比如命名为`components/gpio_custom/`,内部应至少含有源码文件夹(`src`)、头文件夹(`include`)及描述依赖关系的CMakeLists.txt。 2. **实现逻辑** 下面展示了个基本版本的GPIO初始化函数位于`gpio_custom.c`内: ```c #include "esp_log.h" #include "driver/gpio.h" #include "gpio_custom.h" static const char* TAG = "GPIO_CUSTOM"; void gpio_custom_init(gpio_num_t pin, bool is_output){ if(is_output){ gpio_set_direction(pin, GPIO_MODE_OUTPUT); ESP_LOGI(TAG,"Pin %d set as output",pin); }else{ gpio_set_direction(pin, GPIO_MODE_INPUT); ESP_LOGI(TAG,"Pin %d set as input",pin); } } ``` 此段程序通过调用ESP-IDF提供的API完成了指定引脚方向设定,并利用日志记录当前状态以便调试. 对应接口声明则放置于公共头部文件`gpio_custom.h`之中: ```c #ifndef __GPIO_CUSTOM_H__ #define __GPIO_CUSTOM_H__ #include <stdint.h> #include "driver/gpio.h" // 初始化GPIO并指明输入输出模式 void gpio_custom_init(gpio_num_t pin,bool is_output); #endif /*__GPIO_CUSTOM_H__*/ ``` 最后不要忘记编辑该组件根路径下的`CMakeLists.txt`,确保编译器能识别到这些新增加的内容: ```cmake idf_component_register(SRCS "gpio_custom.c" INCLUDE_DIRS ".") ``` #### 应用于主工程 当上述步骤完成后就可以像官方示例那样编写应用程序了。假设目标是在main/main.c里驱动LED灯亮起熄灭,则只需引入刚才制作好的库即可轻松达成目的。 ```c #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "gpio_custom.h" #define LED_PIN 2 // 假设连接至GPIO2号管脚 extern void app_main(void){ // 设置为输出端口 gpio_custom_init(LED_PIN,true); while(1){ // 控制电平高低切换从而达到闪烁效果 gpio_set_level(LED_PIN,!gpio_get_level(LED_PIN)); vTaskDelay(pdMS_TO_TICKS(500)); // 每隔半秒改变次 } } ``` 以上就是关于如何基于ESP-IDF创建并运用个性化GPIO处理单元的方法介绍. 这种做法不仅有助于提高项目的条理性还能够促进团队协作效率.
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Augtons正(单片机)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值