ESP32-S3 入门学习笔记(三):VS Code + ESP IDF 环境搭建
开发板:正点原子ESP32S3
B站学习链接:link
1. VS Code环境搭建
首先,进入 VSCode 官方下载页面link,根据系统需求选择下载安装包。
下载完后,直接安装即可,如需中文,可在扩展商店的搜索区域输入“Chinese”安装中文插件。
2. 安装ESP-IDF插件
打开 VS Code 软件,然后按下快捷键“ Ctrl+Shift+X”进入应用商城,在搜索栏下搜索Espressif IDF 插件,点击安装即可:
至此 Espressif IDF 插件就算安装好了,接下来我们来看看插件的配置。
快捷键 F1 呼出命令栏,在弹如下提示框后,搜索“Configure ESP-IDF Extension”。
回车后, 进入配置 ESP-IDF 插件界面,如下图所示:
在上图中,点击“ADVANCED”进入高级配置界面,如下图所示:
Enter ESP-IDF Tools directory(IDF_TOOLS_PATH): 需要在系统默认路径后加上\tools,不然会出现“python.exe -m pip is not valid” 错误。
配置 ESP-IDF 插件完成后,点击上图“Configure Tools”选项执行配置操作,此时需要等待系统配置成功。配置 ESP-IDF 插件需要进行三个流程, 等待第一个流程配置完成,此时进入 ESP-IDF Tools 配置流程。
接着点击 “Download Tools”选项下载工具(需要网络加持),如下图所示:
下载成功后,系统进入第三个流程 Python 环境搭建,如下图所示:
三个流程完成后,系统提示如下信息,如下图所示:
接下来,将讲解插件默认的配置参数,如串口下载的波特率和下载方式,配置流程如下所示:
点击“设置”选项,进入配置插件界面, 然后找到“Flash Baud Rate”和“Flash Type”选项, 如下图所示:
到了这里,我们已经配置 ESP-IDF 插件完成。
3. 新建基础工程
- 打开VS Code,按住F1快捷键,输入新建项目。
- 设置相关信息,然后点击“Choose Template”继续。
- 选择ESP-IDF和sample_project,点击按钮继续。
- 新建基础工程完成。
基础工程文件架构解析
.devcontainer 文件夹通常与 VS Code 的 Remote - Containers 扩展一起使用,用于定义开发容器环境的配置。这个文件夹包含了用于创建和管理容器化开发环境的所有必需文件。.vscode 文件夹通常位于项目的根目录下,用于存放 VS Code 的项目级设置和扩展配置。这个文件夹中的文件不会影响其他用户或全局的 VS Code 设置,它们只针对当前项目有效在 .vscode 文件夹中,常见的文件包括:
①: settings.json。 用于定义项目特定的 VS Code 设置(个性配置和工作环境配置)。
②: launch.json。 用于配置调试器,包括启动配置和断点等。
③: c_cpp_properties.json。 这个文件用于定义 C 和 C++ 项目的编译器路径、包含路径、编译器定义以及其他与 IntelliSense 相关的设置。
上述文件都是 VSCode 自动生成的,不需要人为去编写。但是在某种特殊情况下需要人为介入,如代码调试(需要修改 launch.json)、 编译错误(需要修改 c_cpp_properties.json)和个性配置(需要修改 settings.json)等,剩下的文件就是工程的文件结构。
4. 基础工程配置
本章节根据正点原子ESP32S3开发板进行相关参数配置,如果使用其他开发板,需要自行参考开发板参数进行设置。
- 从主界面进入 menuconfig 菜单配置界面,如图所示:
- 在上图“Search parameter”搜索框下输入“Flash”进去 flash 配置界面,配置内容如下所示:
QIO 模式的速率为最快,所以我们把基础工程的 Flash SPI mode 设置为 QIO。
上图中的“Flash SPI speed”提供了 120、 80、 40和 20MHz的配置选项。在选择具体速度时,我们需要考虑 Flash 和 PSRAM 的 SPI 接口共享情况。为了优化模组性能,我们最好将 flash和 PSRAM的 SPI速率设置为一致,这样分时访问这两个存储设备时,就不必切换时钟频率了。鉴于 PSRAM 的 SPI 速率最高可设置为 80MHz,因此我们将 flash 的 SPI 速率也设置为 80MHz,以确保最佳性能。
上图的Flash size“”是根据模组挂载的 flash 来确定的,这里我们选择 16MB 大小,是毫无争议的 - 在搜索框中输入“Partition Table”来设置分区表。分区表的主要功能是将 flash划分为多个功能各异的区域,包括存储启动文件、代码区域和文件系统区域等子分区,以满足不同的应用需求。后续章节将详细解释分区表的作用和配置方法。 下图是基础工程分区表配置参数:
上图中,我们选择“Custom partition table CSV”自定义分区表,然后设置分区表的名称为partitions-16MiB.csv。稍后我们会设置分区表各个子分区的管理大小。 - 在搜索框中输入“PSRAM”来设置 PSRAM 参数,配置参数如下图所示:
上图的“Mode (QUAD/OCT) of SPI RAM chip in use”选项是基于模组内部芯片的选择来确定的。ESP32-S3-WROOM-1-N16R8 模组所挂载的 PSRAM使用的是 Octal SPI模式。因此,在配置过程中,我们应该选择“Octal Mode PSRAM”这一选项。
上图的“Set RAM clock speed”选项选择最该的速率即可,并且与 Flash SPI 速率一致。 - 在搜索框中输入“CPU frequency”来设置 CPU 的时钟频率,如下图所示:
- 在搜索框中输入“FreeRTOS”来配置系统节拍时钟(tick clock)的频率。默认情况下,“configTICK_RATE_HZ” 的 值 为 100, 意 味 着 节 拍 时 钟 的 周 期 为 10ms。 因 此 , 调 用vTaskDelay(1000)将会导致延时 10 秒。为了提高定时精度和方便性,建议将该值设置为 1000,这样节拍时钟的周期就变为 1ms,从而使得 vTaskDelay(1000)代表延时 1 秒。如下图所示:
- 配置分区表各个子分区,我们按下“Ctrl+Shift+P”快捷键打开命令面板,并在搜索栏内输入“打开分区表编辑器”,按以下图配置各个分区的管理大小。
至此,我们已经完成了工程配置,确保其与正点原子ESP32S3开发板所搭载的 ATK-MWS3S 模组的内部资源相匹配。 - 将main.c的文件替换为如下代码:
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "nvs_flash.h"
#include "esp_system.h"
#include "esp_chip_info.h"
#include "esp_psram.h"
#include "esp_flash.h"
/**
* @brief 程序入口
* @param 无
* @retval 无
*/
void app_main(void)
{
esp_err_t ret;
uint32_t flash_size;
esp_chip_info_t chip_info; /* 定义芯片信息结构体变量 */
ret = nvs_flash_init(); /* 初始化 NVS */
if (ret == ESP_ERR_NVS_NO_FREE_PAGES
|| ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
{
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
esp_flash_get_size(NULL, &flash_size); /* 获取 FLASH 大小 */
esp_chip_info(&chip_info);
printf("内核: cup 数量%d\n",chip_info.cores); /* 获取 CPU 内核数并显示 */
/* 获取 FLASH 大小并显示 */
printf("FLASH size:%ld MB flash\n",flash_size / (1024 * 1024));
/* 获取 PARAM 大小并显示 */
printf("PSRAM size: %d bytes\n", esp_psram_get_size());
while(1)
{
printf("Hello-ESP32\r\n");
vTaskDelay(1000);
}
}
上述代码是获取开发板上 ATK-MWS3S 模组的内部资源信息,并打印到监控器上。首先我们编译基础工程,然后下载至开发板中,最后打开监控器查看串口打印内容,如下图所示:
如果程序能够正常打印内容,说明基础工程配置成功。