基于Freertos的ESP-IDF开发——2.点亮一颗LED

基于Freertos的ESP-IDF开发——2.点亮一颗LED

  • 前言
  • 1.创建工程
  • 2.编写程序
  • 3.烧录程序

前言

兜兜转转又回到了点亮LED灯,我之前写过了stm32和51单片机的点亮LED灯,学完
ESP-IDF的电灯可以对比看看三者有什么不同。

51单片机点亮LED灯
STM32F103ZET6点亮板载LED灯

现在回到我们的主题:ESP32使用ESP-IDF点亮第一颗LED灯

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

1.创建工程

创建工程这次我们不教了,如果感觉自己没完全会可以回到基于Freertos的ESP-IDF开发——1.HelloWorld参考这篇文章重新学习。

还是创建完工程进入工程目录下
基于Freertos的ESP-IDF开发——2.点亮一颗LED_第1张图片

2.编写程序

还是用文本编辑器打开我们main文件夹中的.c文件,在app_main函数中编写我们的代码。在freertos中似乎并不符合我们当初学习C语言的第一章节:在一个C程序中有且仅有一个main函数…

其实并非如此,freertos在它的底层main函数中将调用app_main函数,这样我们只需要使用它封装好的函数即可,而在非必要的情况下不需要考虑一些例如延时函数、任务创建删除函数的实现原理等。

所以把app_main看作是主函数即可。

下面是本次点亮led灯的代码,我的设计的ESP32的LED灯连接在IO2引脚,所以下面代码中出现的2就是我的GPIO引脚号。

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

#include "driver/gpio.h"


static const char *TAG = "LED"; 

void app_main(void)
{
	ESP_LOGI(TAG,"LED is starting~");//报告程序已启动
	
	gpio_pad_select_gpio(2);// 选择要操作的GPIO
	gpio_set_direction(2, GPIO_MODE_OUTPUT);// 设置GPIO为推挽输出模式
	
	while(1)
	{
		ESP_LOGI(TAG,"Trun down");//打印电平即将调低
		gpio_set_level(2,0);//将IO2的电平拉高
		//portTICK_PERIOD_MS是一个内置的变量,默认为1,一般不修改它的值
		//1000 / 1 = 1000ms = 1s
		vTaskDelay(1000/portTICK_PERIOD_MS);//延时1s
		
		ESP_LOGI(TAG,"Trun up");//打印电平即将调高
		gpio_set_level(2,1);//将IO2的电平拉高
		vTaskDelay(1000/portTICK_PERIOD_MS);//延时1s
	}
}

3.烧录程序

烧录命令如下

idf.py -p COM5 flash monitor

还是和上一个工程一样,第一次烧录的时间会比较久,我们耐心等待即可。

基于Freertos的ESP-IDF开发——2.点亮一颗LED_第2张图片

它的效果是上面这样。括号中的数字表示自启动以来的时刻,例如:在0时刻esp32的cpu启动,313时刻执行了我们的第一行代码,1323时刻IO2输出低电平,2323时刻IO2输出高电平。我们直接利用它的内置函数做到了精确毫秒延时。

然后下面是我们的LED闪烁演示

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