02_ESP32S3点亮LED实验
·
开发板 正点原子DNESP32S3 BOX3
使用开发板GPIO_NUM_13引脚接LED,实现 LED 闪烁。
/**
* 实验平台:正点原子 ESP32S3 BOX3 开发板
* 功能: FreeRTOS 任务方式实现 LED 闪烁
*/
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "nvs_flash.h"
#include "driver/gpio.h"
#define LED_GPIO_PIN GPIO_NUM_13
#define LED_BLINK_INTERVAL_MS 1000
/**
* @brief LED 硬件初始化
*/
void led_init(void)
{
gpio_config_t led_conf = {
.pin_bit_mask = (1ULL << LED_GPIO_PIN),
.mode = GPIO_MODE_OUTPUT,
.pull_up_en = GPIO_PULLUP_DISABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_DISABLE
};
gpio_config(&led_conf);
gpio_set_level(LED_GPIO_PIN, 1); // 默认熄灭
}
/**
* @brief LED 闪烁任务函数(FreeRTOS 标准任务原型)
* @param pvParameters 任务传入参数,本例未使用
*/
static void led_blink_task(void *pvParameters)
{
led_init(); // 任务内完成硬件初始化
while (1)
{
gpio_set_level(LED_GPIO_PIN, 0);
printf("LED state: ON\n");
vTaskDelay(pdMS_TO_TICKS(LED_BLINK_INTERVAL_MS));
gpio_set_level(LED_GPIO_PIN, 1);
printf("LED state: OFF\n");
vTaskDelay(pdMS_TO_TICKS(LED_BLINK_INTERVAL_MS));
}
// 正常情况下任务不会退出,此处仅为语法完整性
vTaskDelete(NULL);
}
/**
* @brief 程序入口
*/
void app_main(void)
{
esp_err_t ret;
// 初始化 NVS
ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
{
ESP_ERROR_CHECK(nvs_flash_erase());
ESP_ERROR_CHECK(nvs_flash_init());
}
// 创建 LED 闪烁任务
BaseType_t task_ret = xTaskCreate(
led_blink_task, // 任务函数入口
"led_blink", // 任务名称(调试用)
2048, // 任务栈大小(单位:字,32位系统下1字=4字节)
NULL, // 传入任务的参数
5, // 任务优先级(数字越大优先级越高)
NULL // 任务句柄(不需要控制任务可传NULL)
);
if (task_ret != pdPASS)
{
printf("LED task create failed!\n");
}
// app_main 任务执行完后会被系统自动回收
// LED 任务独立运行,不受主任务结束影响
}
更多推荐
所有评论(0)