乐鑫技术交流
直播中

生龙活虎3

8年用户 724经验值
擅长:光电显示
私信 关注
[问答]

ESP32S3 GPIO36配置成Dedicated 写入值后没有输出信号是怎么回事?

测试代码放在main文件中的:
        const int lcd_data_gpios[] = {36};
    gpio_config_t io_conf = {
        .mode = GPIO_MODE_OUTPUT,
    };
    for (int i = 0; i < sizeof(lcd_data_gpios) / sizeof(lcd_data_gpios[0]); i++) {
        io_conf.pin_bit_mask = 1ULL << lcd_data_gpios[i];
        gpio_config(&io_conf);
    }
    // Create bundleA, output only
    dedic_gpio_bundle_config_t lcd_bundle_config = {
        .gpio_array = lcd_data_gpios,
        .array_size = sizeof(lcd_data_gpios) / sizeof(lcd_data_gpios[0]),
        .flags = {
            .out_en = 1,
        },
    };
    ESP_ERROR_CHECK(dedic_gpio_new_bundle(&lcd_bundle_config, &lcd_bundle));
    while(1)
    {
        dedic_gpio_bundle_write(lcd_bundle,36,0);
        dedic_gpio_bundle_write(lcd_bundle,36,1);
        vTaskDelay(1);
    }Code

回帖(1)

caokyo

2024-6-13 16:36:38
在您的代码中,您尝试将ESP32-S3的GPIO36配置为输出模式,并尝试写入值。但是,您遇到了一个问题,即在写入值后没有输出信号。以下是可能的原因和解决方案:

1. **配置错误**:在您的代码中,`io_conf.pin_bit_mask` 的赋值方式可能不正确。您应该使用数组中的元素,而不是数组本身。请尝试以下修改:

   ```c
   for (int i = 0; i < sizeof(lcd_data_gpios) / sizeof(lcd_data_gpios[0]); i++) {
       io_conf.pin_bit_mask = 1ULL << lcd_data_gpios[i];
       gpio_config(&io_conf);
   }
   ```

   这里,我们使用 `lcd_data_gpios[i]` 来获取数组中的每个GPIO编号,并将其左移以生成正确的位掩码。

2. **GPIO模式设置**:确保您的GPIO模式设置正确。ESP32-S3的GPIO可以配置为多种模式,包括输入、输出、特殊功能等。您已经将其设置为输出模式,这是正确的。

3. **电源和接地**:确保您的GPIO36已经正确连接到外部电路的电源和接地。如果连接不正确,可能不会有信号输出。

4. **写入值**:在配置GPIO为输出模式后,您需要使用 `gpio_set_level()` 函数来写入值。例如:

   ```c
   gpio_set_level(lcd_data_gpios[0], 1); // 写入高电平
   gpio_set_level(lcd_data_gpios[0], 0); // 写入低电平
   ```

5. **检查硬件**:如果以上步骤都正确,但仍然没有输出信号,可能是硬件问题。检查GPIO36的引脚是否损坏或存在其他硬件故障。

6. **软件问题**:如果硬件没有问题,可能是ESP32-S3的固件或软件库存在问题。尝试更新ESP-IDF框架到最新版本,或者检查是否有已知的bug影响您的设备。

7. **调试**:使用ESP-IDF的调试工具,如GDB,来检查程序的执行流程和变量状态,以确定问题所在。

通过以上步骤,您应该能够诊断并解决GPIO36没有输出信号的问题。如果问题仍然存在,可能需要更深入地检查硬件或软件配置。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分