其他分享
首页 > 其他分享> > ESP32学习2:定制工程

ESP32学习2:定制工程

作者:互联网

一、工程文件介绍:

新建工程文件如下图:

        由于ESP-IDF使用的编译工具为CMake,而CMake可以通过编写CMakeLists.txt文件来定制整个编译流程,然后再根据用户平台生成Makefile和工程文件。也就是说编译过程完全依赖于CMakeLists.txt。

CMakeLists.txt文件内容分析

main/CMakeLists.txt内容如下:(其他CMakeLists.txt文件类同)

idf_component_register(SRCS "blink.c"
                    INCLUDE_DIRS ".")

        该文件中的内容很简单,只有一句话,意思是注册并编译源文件blink.c和当前目录中的所有.h头文件

根目录CMakeLists.txt内容如下:

# The following five lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.5)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(blink)

该文件表明:

 二、通过CMakeLists.txt修改工程名称

通过以上CMakeLists.txt文件的介绍,修改工程名称。

  1. 修改工程文件名称为ESPTest
  2. 将main文件中的blink.c重命名为ESPTest.c 

  3. 修改main/CMakeLists.txt文件,包含ESPTest.c。修改后如下:

  4. 修改根目录CMakeLists.txt文件,更改工程名为ESPTest

  5. 查看Makefile文件,将项目名称也改为ESPTest

  6. 最后,保存并编译程序。

 三、添加驱动模块组件

         添加.c.h组件最简单的方法,是直接将.c.h添加到main文件夹,之后修改main\CMakeLists.txt。但此方法并没有将.c.h单独划分为模块,删减功能时会很麻烦,不利于大型工程的管理。

         常规的做法是,将相似和关联的方法/函数封装为.c和.h文件,并以文件夹的方式加以区分管理。这样有利于系统对功能部件的删减,便于管理。

以下以LED闪烁的程序为例,单独编写led.c和led.h驱动文件:

 1. 创建驱动组文件夹:

        首先创建components文件夹,用来存储所有的驱动文件,然后再components文件夹中创建led文件夹,用来存储led驱动文件。再led文件夹下,创建led.c文件以及include文件夹,存放led.h文件。同时,复制CMakeLists.txt文件到led文件夹中。工程目录结构如图:

 

2.编写led,h及led.c驱动文件

 led.h文件:

/*
 * led.h
 *
 *  Created on: 2021年12月4日
 *      Author: wangy
 */

#ifndef DRIVE_LED_LED_H_
#define DRIVE_LED_LED_H_


#include "sdkconfig.h"
#include "driver/gpio.h"

/* Can use project configuration menu (idf.py menuconfig) to choose the GPIO to blink,
   or you can edit the following line and set a number here.
*/
#define BLINK_GPIO 2

void led_init(void);
void led_on(void);
void led_off(void);


#endif /* DRIVE_LED_LED_H_ */

 led.c

/*
 * led.c
 *
 *  Created on: 2021年12月4日
 *      Author: wangy
 */
#include "led.h"

void led_init(void)
{
    /* Configure the IOMUX register for pad BLINK_GPIO (some pads are
       muxed to GPIO on reset already, but some default to other
       functions and need to be switched to GPIO. Consult the
       Technical Reference for a list of pads and their default
       functions.)
    */
    gpio_pad_select_gpio(BLINK_GPIO);
    /* Set the GPIO as a push/pull output */
    gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
}

void led_on(void)
{
    gpio_set_level(BLINK_GPIO, 1);
}

void led_off(void)
{
    gpio_set_level(BLINK_GPIO, 0);
}

 3.修改led驱动文件夹下的CMakeLists.txt文件

idf_component_register(SRCS "led.c"
                    INCLUDE_DIRS "include")

4.修改main/ESPTest.c

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
//#include "driver/gpio.h"
//#include "sdkconfig.h"
#include "led.h"
#define BLINK_GPIO 2

void app_main(void)
{
    led_init();
    /* Set the GPIO as a push/pull output */
    gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
    while(1) {
        /* Blink off (output low) */
        printf("Turning off the LED\n");
        led_on();
        vTaskDelay(3000 / portTICK_PERIOD_MS);
        /* Blink on (output high) */
        printf("Turning on the LED\n");
        led_off();
        vTaskDelay(3000 / portTICK_PERIOD_MS);
    }
}

结束

        本文参考https://blog.csdn.net/Mark_md/article/details/113884641,这篇博客写的很详细,收益匪浅,再次对该博文作者表示感谢!

标签:CMakeLists,include,led,ESP32,学习,GPIO,定制,txt,void
来源: https://blog.csdn.net/sssxlxwbwz/article/details/121718943