板载LED无法闪烁

编程语言 2026-07-09

我是一个完全的初学者,正在尝试入门嵌入式系统,使用ESP32。

我想用这段代码让LED闪烁

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"

// Built-in LED is on GPIO2
#define LED_GPIO GPIO_NUM_2

void app_main(void) {
    // Resets any previous state of the pin (good practice)
    gpio_reset_pin(LED_GPIO);
    // Configure GPIO2 as output
    gpio_set_direction(LED_GPIO, GPIO_MODE_OUTPUT);

    // Blink forever
    while (1) {
        gpio_set_level(LED_GPIO, 1);            // Set pin(GPIO2 in this case) to HIGH(3.3V)
        vTaskDelay(pdMS_TO_TICKS(1000)); 

        gpio_set_level(LED_GPIO, 0);            // Set pin(GPIO2 in this case) to LOW(0V)
        vTaskDelay(pdMS_TO_TICKS(1000)); 
    }
}

但LED没有闪烁。不过当我在vTaskDelays之前像下面这样添加printf时,它就会闪烁

// Blink forever
while (1) {
    gpio_set_level(LED_GPIO, 1);            // Set pin(GPIO2 in this case) to HIGH(3.3V)
    printf("LED ON\n");
    vTaskDelay(pdMS_TO_TICKS(1000)); 
    gpio_set_level(LED_GPIO, 0);            // Set pin(GPIO2 in this case) to LOW(0V)
    printf("LED OFF\n");
    vTaskDelay(pdMS_TO_TICKS(1000));
}

解决方案

看起来你的原始代码其实已经正确。并非所有的ESP32开发板都将板载LED连接到GPIO 2。首先,你应该检查你的开发板上的LED实际连接的是GPIO 2还是其他GPIO引脚。

如果LED连接到了不同的引脚,你可以在原来的代码中简单地更新GPIO号,然后再次运行。

在你更新的代码中,包含了内置的 printf() 函数。这个函数与ESP32的串行接口一起工作,某些开发板还包含串行调试LED。因为这个原因,你可能会误以为代码工作正常,因为在使用 printf() 时LED会闪烁,但情况未必如此。

我的建议是,先检查你的开发板,找出连接板载LED的正确GPIO引脚。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章