前言
   
    开发环境:ESP-IDF 4.3
    
    操作系统:Windows10 专业版
    
    开发板:自制的ESP32-WROOM-32E
   
我们已经学习了在主函数里操作GPIO引脚的方式点亮LED灯,也学习了如何使用任务,现在我们来学习使用任务的方式来操作LED灯。
    
    
    头文件和宏
   
先创建一个新工程。
然后在main.c里编写头文件和宏定义:
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "sdkconfig.h"
#include <esp_log.h>
#define LED 2//GPIO引脚号
    
    
    任务函数
   
编写我们的任务函数,功能是初始化GPIO引脚和控制GPIO高低电平输出:
static const char *TAG = "LED_Task";
void LED_Task(void *param)
{
	gpio_pad_select_gpio(LED);//选择GPIO
	gpio_set_direction(LED, GPIO_MODE_OUTPUT);// 设置GPIO为推挽输出模式
	
	int LED_STATUE = 0;
	
	while(1) 
	{
		ESP_LOGI(TAG, "LED STATUE%d\n",LED_STATUE);
		gpio_set_level(LED, LED_STATUE);// GPIO输出电平(1或者0)
		vTaskDelay(1000 / portTICK_PERIOD_MS);//延时1s
		
		LED_STATUE = !LED_STATUE;
	}
	
}
    
    
    主函数
   
编写app_main()函数,只需要在主函数中执行我们的任务即可:
void app_main(void)
{
	xTaskCreate(LED_Task,"LED_Task",2048,NULL,1,NULL);//创建任务
}
    
    
    完整代码
   
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "sdkconfig.h"
#include <esp_log.h>
#define LED 2
static const char *TAG = "LED_Task";
void LED_Task(void *param)
{
	gpio_pad_select_gpio(LED);//选择GPIO
	gpio_set_direction(LED, GPIO_MODE_OUTPUT);// 设置GPIO为推挽输出模式
	
	int LED_STATUE = 0;
	
	while(1) 
	{
		ESP_LOGI(TAG, "LED STATUE%d\n",LED_STATUE);
		gpio_set_level(LED, LED_STATUE);// GPIO输出电平(1或者0)
		vTaskDelay(1000 / portTICK_PERIOD_MS);//延时1s
		
		LED_STATUE = !LED_STATUE;
	}
	
}
void app_main(void)
{
	xTaskCreate(LED_Task,"LED_Task",2048,NULL,1,NULL);//创建任务
}
编译并烧录至ESP32中,可以看到灯一亮一闪,并且串口有下方输出:
     
   
    
    
    演示效果
   
如下:
     
   
 
版权声明:本文为qq_53381910原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
