• ESP-IDF学习——1.环境安装与hello-world



    0.前言

      最近在学习freertos,但由于买的书还没到,所以先捣鼓捣鼓ESP-IDF,因为这个比Arduino更接近底层,并且也是基于FreeRTOS实现的,所以先熟悉一些相关基础功能。

    一、环境搭建

      ESP-IDF支持windows、linux、MacOS,但总体比较起来,windows下安装似乎更加方便,所以笔者就以windows作为开发环境。Linux和MacOS用户可以参考官方安装教程
      windows下的安装也可以分为官方IDE和vscode开发环境两种:

    1.官方IDE工具

      可以直接进入官方的下载链接进行下载和安装。除此之外,还需要安装python3,安装完成后即可通过桌面installer快捷方式中的命令行进行一系列的配置和编译。

    2.vscode图形化配置

      官方ide是基于eclipse界面做的,并且编译和下载还需要执行idf.py命令,比较繁琐,所以笔者更喜欢使用vscode图形化界面进行开发,还可以使用ai代码工具辅助开发,更加方便。
      在vscode中安装Espressif IDF插件:
    在这里插入图片描述
    然后会跳转到配置界面,如果没有跳转,在vscode的命令行中输入 ESP-IDF: Configure ESP-IDF extension即可进入配置界面,进入express即可配置:
    在这里插入图片描述
    download server可以选择github(需要网络环境),也可以选择Espressif(乐鑫国内下载地址),如果事先有安装官方ide和python,则version可以选择从本地查找,如果未安装,则可以选择一个release version,然后在下方选择一个安装地址,点击install即可在线安装(建议有良好的网络环境)。
    在这里插入图片描述
    在这里插入图片描述

    二、示例工程

      安装完成后,在vscode命令行中输入ESP-IDF:New Project,即可新建工程:
    在这里插入图片描述
    在这里插入图片描述
    选择如下选项即可加载示例的hello_world工程:
    在这里插入图片描述
    在这里插入图片描述
    编译之前需要在menuconfig中选择芯片flash大小,打开图形化工具,搜索flash设置即可编译和烧录。示例工程的功能为启动后打印一次hello world,然后十秒后重启板子。
    在这里插入图片描述
    在这里插入图片描述

    三、自定义工程

    在创建工程时选择sample project即可创建空白项目:
    在这里插入图片描述
    在这里插入图片描述
    将FreeRTOS的头文件包含进来,即可使用相关api。这里有两个地方需要注意,如果使用printf时未添加换行符,则需要使用fflush(stdout)将缓冲区中的数据打印出来。另外vTaskDelay(1000)函数的延时为1000个时钟tick,所以想要延时1s,需要除以当前的时间周期,在menuconfig中查找tick即可配置相关参数。
    在这里插入图片描述
    程序的结果即为每隔一秒打印一次hello world。
    在这里插入图片描述

    四、点灯

    笔者的板子上有两颗LED灯,就从简单的led闪烁开始。
    在这里插入图片描述
    main.c

    #include 
    #include "freertos/FreeRTOS.h"
    #include "freertos/task.h"
    #include "driver/gpio.h"
    
    uint32_t led_staus = 0;
    
    void app_main(void)
    {
        //GPIO初始化
        gpio_reset_pin(GPIO_NUM_12);
        gpio_set_direction(GPIO_NUM_12, GPIO_MODE_OUTPUT);
        gpio_reset_pin(GPIO_NUM_13);
        gpio_set_direction(GPIO_NUM_13, GPIO_MODE_OUTPUT);
    
        for(;;)
        {
            //设置引脚输出电平
            gpio_set_level(GPIO_NUM_12, led_staus);
            gpio_set_level(GPIO_NUM_13, !led_staus);
            led_staus = !led_staus;
            vTaskDelay(1000 / portTICK_PERIOD_MS);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    编译烧写后即可看见LED闪烁。

    五、总结

      ESP-IDF对于熟悉FreeRTOS的人来说应该是比较简单的,除了底层驱动的API需要查询官方手册进行配置,上层的FreeRTOS API基本都可以通用。不过之前如果学习的是STM32CubeIDE中的FreeRTOS CMSIS封装层的话,可能还需要适应一下。笔者目前也刚学习玩FreeRTOS的内核组件,后续在STM32上学习了一些外设开发之后,也会同步学习使用ESP-IDF的驱动方式。

  • 相关阅读:
    决策树算法
    node实战——koa实现文件上传
    【STL】平衡二叉树
    如何做好测试?(二)单元测试(Unit Testing, UT)
    # 数据库开发-MySQL基础DDL-DML总结
    HTML5期末考核大作业 基于HTML+CSS+JavaScript沪上美食(9页)
    你真的知道Spring Security安全框架吗?
    《中国数字经济发展指数报告(2023年)》发布
    使用计算组自动设置列宽
    MySQL环境变量配置的教程
  • 原文地址:https://blog.csdn.net/weixin_45682654/article/details/132946284