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

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

在这里插入图片描述

演示效果

如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IoT_H2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值