基于Freertos的ESP-IDF开发——4.使用任务的方式来点亮LED灯

  • Post author:
  • Post category:其他


基于Freertos的ESP-IDF开发——4.使用任务的方式来点亮LED灯



前言

开发环境: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 版权协议,转载请附上原文出处链接和本声明。