ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ESP32学习2:定制工程

2021-12-04 20:05:18  阅读:213  来源: 互联网

标签:CMakeLists include led ESP32 学习 GPIO 定制 txt void


一、工程文件介绍:

新建工程文件如下图:

        由于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)

该文件表明:

  •  指定运行此配置文件所需的CMake最低版本为3.5
  • 指定ESP-IDF应用的CMake配置文件
  • 指定当前工程的名称为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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有