板载LED无法闪烁
我是一个完全的初学者,正在尝试入门嵌入式系统,使用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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。