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

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

  • 前言
  • 头文件和宏
  • 任务函数
  • 主函数
  • 完整代码
  • 演示效果

前言

开发环境:ESP-IDF 4.3
操作系统:Windows10 专业版
开发板:自制的ESP32-WROOM-32E

我们已经学习了在主函数里操作GPIO引脚的方式点亮LED灯,也学习了如何使用任务,现在我们来学习使用任务的方式来操作LED灯。

头文件和宏

先创建一个新工程。

然后在main.c里编写头文件和宏定义:

#include 
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "sdkconfig.h"
#include 

#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 
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "sdkconfig.h"
#include 

#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中,可以看到灯一亮一闪,并且串口有下方输出:

基于Freertos的ESP-IDF开发——4.使用任务的方式来点亮LED灯_第1张图片

演示效果

如下:

你可能感兴趣的:(单片机,stm32,嵌入式硬件,物联网,iot)