GPIO
ESP32的GPIO(通用输入输出)引脚非常灵活,支持多种工作模式。这些模式可以通过编程来配置,以适应不同的应用需求。以下是ESP32 GPIO引脚的主要工作模式:
1. 输入模式
- 普通输入模式:在这种模式下,GPIO可以读取外部信号的高(1)或低(0)状态。
- 上拉输入模式:启用内部上拉电阻,当外部没有驱动信号时,GPIO引脚将读取为高电平。
- 下拉输入模式:启用内部下拉电阻,当外部没有驱动信号时,GPIO引脚将读取为低电平。
2. 输出模式
- 普通输出模式:GPIO可以输出高或低电平,直接控制外部设备。
- 开漏输出模式:在这种模式下,GPIO可以只输出低电平;当输出高电平时,引脚处于高阻状态,通常需要外部上拉电阻。
3. 输入输出模式
- 输入/输出模式:GPIO引脚可以配置为既可以输入也可以输出,这在需要双向通信的应用中非常有用。
4. 特殊功能模式
- 替代功能模式:GPIO引脚可以配置为支持特定功能,如UART、I2C、SPI、PWM(脉冲宽度调制)、CAP(输入捕捉)等。这些模式使GPIO可以直接连接到内部外设,执行复杂的通信或控制任务。
5. 中断模式
- 中断模式:在输入模式的基础上,GPIO可以配置为在信号变化时触发中断,如上升沿、下降沿或任意边沿触发。这允许微控制器在特定外部事件发生时立即作出响应,而不是不断地检查引脚状态。
示例代码(ESP-IDF)
配置GPIO作为输入,并启用上拉电阻,设置中断触发:
#include "driver/gpio.h"
#define GPIO_INPUT_PIN 4
#define GPIO_INPUT_PIN_SEL (1ULL<<GPIO_INPUT_PIN)
void app_main() {
gpio_config_t io_conf;
// 禁用输出
io_conf.mode = GPIO_MODE_INPUT;
// 设置上拉
io_conf.pull_up_en = 1;
io_conf.pull_down_en = 0;
// 设置GPIO的位掩码
io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL;
// 设置中断类型为任意边沿
io_conf.intr_type = GPIO_INTR_ANYEDGE;
// 配置GPIO
gpio_config(&io_conf);
// 初始化中断服务
gpio_install_isr_service(0);
// 添加中断处理函数(需额外定义处理函数)
gpio_isr_handler_add(GPIO_INPUT_PIN, gpio_isr, (void*) GPIO_INPUT_PIN);
}
通过配置和使用ESP32的GPIO工作模式,可以灵活地设计和实现各种硬件交互功能。如果您需要关于特定工作模式或配置的更多详细信息,我很乐意进一步提供帮助。
头文件.h 添加 (加入构建系统进行编译)
set(LV_UI_DIR ./ui)
set(UTILS_DIR ./utils)
set(LV_INC_DIR ../components/lvgl__lvgl ../components/lvgl__lvgl/src/core)
file(GLOB_RECURSE LV_UI_SOURCES ${LV_UI_DIR}/custom/*.c ${LV_UI_DIR}/generated/*.c ${LV_UI_DIR}/generated/guider_customer_fonts/*.c
${LV_UI_DIR}/generated/images/*.c
${LV_UI_DIR}/generated/guider_fonts/*.c)
idf_component_register(
SRCS
"taskStackMonitor.c"
# "tool.c"
${LV_UI_SOURCES}
INCLUDE_DIRS "." ${LV_UI_DIR}/custom ${UTILS_DIR} ${LV_UI_DIR}/generated ${LV_INC_DIR})
set_source_files_properties(
${LV_UI_SOURCES}
PROPERTIES COMPILE_OPTIONS
-DLV_LVGL_H_INCLUDE_SIMPLE)
目录结构
把头文件的路劲加入到INCLUDE_DIRS
后面
查看分区偏移地址
获取ESP32分区的起始偏移地址可以通过以下几种方法:
1. 使用ESP-IDF的Partition Table工具
在ESP-IDF中,分区的起始偏移地址通常在分区表(partition table)中定义。你可以使用ESP-IDF提供的partition_table
工具来查看分区的起始偏移地址。
以下是在ESP-IDF环境中查看分区信息的步骤:
- 打开终端,进入到你的ESP-IDF项目目录。
- 使用
idf.py partition-table
命令来生成或者查看分区表。idf.py partition-table
- 生成的分区表通常在项目的
build
目录下,名为partition_table.bin
。 - 使用
partition_table
工具来查看具体的分区信息:python ${IDF_PATH}/components/partition_table/parttool.py --partition-table build/partition_table.bin list
这个命令会输出所有分区的信息,包括分区的名称、类型、子类型、偏移地址、大小等。
2. 查看Partition Table CSV文件
在ESP-IDF项目中,分区的定义通常在一个CSV文件中(例如partitions.csv
),你可以直接查看这个文件来获取分区的起始偏移地址。
例如,一个典型的分区定义可能如下所示:
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x6000,
phy_init, data, phy, 0xf000, 0x1000,
factory, app, factory, 0x10000, 1M,
在这个例子中,factory
分区的起始偏移地址是0x10000
。
3. 在程序运行时获取
你还可以在程序运行时,使用ESP-IDF提供的API来获取分区的起始偏移地址。以下是一个示例代码:
#include "esp_partition.h"
// 获取特定名称分区的起始地址
esp_partition_t *partition = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_ANY, "factory");
if (partition != NULL) {
printf("Partition '%s' starts at offset 0x%x\n", partition->label, partition->address);
}
在上述代码中,我们使用esp_partition_find_first
函数来查找名为"factory"的分区,并打印出其起始地址。
确保在尝试上述任何方法之前,你已经正确设置了ESP-IDF环境,并且你的项目配置正确无误。