搜索
bottom↓
回复: 0

《DNESP32S3使用指南-IDF版_V1.6》第六章 新建基础工程

[复制链接]

出0入234汤圆

发表于 3 天前 | 显示全部楼层 |阅读模式
本帖最后由 正点原子 于 2024-7-13 17:46 编辑

2.jpg
1)实验平台:正点原子ESP32S3开发板
2)购买链接:https://detail.tmall.com/item.htm?id=768499342659
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-347618-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子手把手教你学ESP32S3快速入门视频教程:https://www.bilibili.com/video/BV1sH4y1W7Tc
6)正点原子FPGA交流群:132780729
1.png
3.png

第六章 新建基础工程


       在前面的章节中,我们已经简要介绍了ESP32-S3的基础知识和ESP-IDF的基本概念,并详细阐述了VS Code IDE环境的搭建以及Espressif插件的安装流程。现在,基于这些前期准备,我们将在本章搭建一个ESP-IDF基础工程,以后的例程都是基于此基础例程为模版来编写的。
本章将分为如下几个小节:
       6.1 搭建基础工程
       6.2 基础工程的文件架构解析
       6.3 乐鑫工程的文件架构解析
       6.4 原子工程的文件架构解析
       6.5 基础工程配置

       6.1 搭建基础工程

       在VS Code中新建ESP-IDF基础工程的步骤如下:

       1,启动VS Code并打开命令面板
       按下“Ctrl+Shift+P”快捷键打开命令面板,并在搜索栏内输入“新建项目”,如下图所示:

第六章 新建基础工程346.png
图6.1.1 新建项目工程

       2,配置工程参数
       图6.1.1回车进入新建工程配置界面,如下图所示:

第六章 新建基础工程397.png
第六章 新建基础工程399.png
图6.1.2 新建工程界面(下图是作者配置的参数)

       3,选择模版工程
       配置参数填写完成后,点击上图中的“Choose Template”选项,将进入选择模版界面。在这个界面上,您会发现许多应用实例可供选择(这些示例可以在路径D:\ESP32\Espressif\frameworks\esp-idf-v5.1.2\examples下找到)。为了新建工程,您可以采用某个应用示例作为模版,例如,若以乐鑫Blink跑马灯实验为模版,那么新创建的工程将具备LED使用功能。下面作者以sample_project为模版新建工程(因为此工程是乐鑫官方提供的基本模板,所以我们使用此模板来新建工程),如下图所示:

第六章 新建基础工程702.png
图6.1.3 以blink模版新建工程

       点击“Create project using template sample_project”选项新建工程,点击完成后在此界面的右下角跳出以下信息,如下所示:

第六章 新建基础工程805.png
图6.1.4 是否覆盖内容

       我们点击“Yes”选项即可完成新建工程。此时VS Code的资源管理器区域内显示我们的新建工程,如下图所示:

第六章 新建基础工程876.png
图6.1.5 新建00_BASIC工程完成

       00_BASIC工程与乐鑫官方提供的sample_project示例是一样的内容和工程结构,读者不妨对比一下这两个工程。
       在下小节中,作者将讲述00_BASIC工程的文件作用。

       6.2 基础工程的文件架构解析

      
上图6.1.5中,.devcontainer 和 .vscode 文件夹在 VS Code 的使用场景中各自扮演着不同的角色。
       .devcontainer 文件夹通常与 VS Code 的 Remote - Containers 扩展一起使用,用于定义开发容器环境的配置。这个文件夹包含了用于创建和管理容器化开发环境的所有必需文件。
       .vscode 文件夹通常位于项目的根目录下,用于存放 VS Code 的项目级设置和扩展配置。这个文件夹中的文件不会影响其他用户或全局的 VS Code 设置,它们只针对当前项目有效在 .vscode 文件夹中,常见的文件包括:

       ①:settings.json。用于定义项目特定的 VS Code 设置(个性配置和工作环境配置)。

       ②:tasks.json。用于定义任务,这些任务可以在 VS Code 的终端中运行,或者与编辑器中的其他功能(如代码片段)结合使用。

       ③:launch.json。用于配置调试器,包括启动配置和断点等。

       ④:c_cpp_properties.json。这个文件用于定义 C 和 C++ 项目的编译器路径、包含路径、编译器定义以及其他与 IntelliSense 相关的设置。

       上述文件都是VSCode自动生成的,不需要人为去编写。但是在某种特殊情况下需要人为介入,如代码调试(需要修改launch.json)、编译错误(需要修改c_cpp_properties.json)和个性配置(需要修改settings.json)等。剩下的文件就是sample_project(00_BASIC)工程的文件结构,如下图所示:

第六章 新建基础工程1697.png
图6.2.1 00_BASIC工程的文件结构和说明

       乐鑫为开发者提供了最基础的项目工程,即sample_project。正点原子则以这一工程为模板去编写其他的应用示例。因此,关于这一基础工程文件的具体作用,读者可在第四章的4.4小节中详细了解。为避免重复,此处不再赘述。

       6.3 调试相关工具介绍

       在6.1小节中,作者已经在VS Code环境下新建一个00_BASIC工程,下面我们重点来讲解VS Code软件提供用户调试相关的工具有哪些,如下所示:

第六章 新建基础工程1925.png
图6.3.1 调试相关工具

       1,选择串口(插头):即连接开发板的下载串口号,VS会列出当前连接电脑的所有串口让你选择,这个会记录,再新打开VSCode不用重新选择,开发过程中尽量不要更换USB线的电脑插口,否则串口号会变。

       2,选择目标芯片:对应idf命令idf.py set-target xxxx。即你当前这个工程是要下载到什么芯片上面,如ESP32 S2,S3,C2,C3等等,工程要与芯片相匹配,这个选择是写入当前工程配置的,一般不用更改,工程下配置文件基本已经选择好的。

       3,选择当前工程目录(文件夹):也不用修改,一般打开工程时会默认操作都在这个工程目录下。

       4,工程配置菜单(齿轮):对应idf命令idf.py menuconifg,用来配置当前工程的一些设置,配置项非常多,建议使用到再修改。一般代码工程都是配置好的,且不用修改。

       5,清除工程(垃圾桶):清除工程编译文件,一般用于压缩拷贝工程文件时用到,清除后工程目录占用空间会占用非常小,KB级,编译后为百MB级,还有一些编译过程中奇奇怪怪的问题也可以先清除编译后再编译。

       6,编译工程(圆柱体):编译当前工程,只是编译,没有下载功能。

       7,选择下载模式(五角星):一般都是选择串口UART方式下载。

       8,下载(闪电):下载编译好的固件到设备芯片上,这里只是下载,没有编译功能,修改代码后要先编译再点这个下载,所做的修改才有效。

       9,串口监控(小电视):打开与设备连接的串口,打印设备串口信息。

       10,编译/下载/监控(一团火):最常用的一个,它将编译下载和打开串口监控做在了一起,点一次全部搞定。

       11,打开命令行:打开命令行窗口,且会定位在当前项目路径下,可以执行idf的一些命令。

       12,执行自定义任务:不使用。

       13,工程的错误与警告提示。

       以上是ESP-IDF插件提供的调试工具,一般我们只用到1、2、4、5、6和8即可完成程序开发。ESP32-S3有两种下载方式。首先是USB串口下载,这种方式主要用于代码下载,但无法用于代码调试。另一种则是JTAG(USB口)下载,它不仅能用于下载代码,还支持代码调试。接下来,作者将详细解释这两种下载方式。

       6.3.1 串口下载

       下面,作者以6.1小节新建工程(00_BASIC)为例,简单讲解一下工程的下载流程,如下流程所示。

       ①:使用USB线的Type-C接口连接DNESP32S3开发板的USB串口,并USB A口连接到电脑,使得电脑与开发板建立连接。

       ②:在设备管理器中,查看USB串口的端口号,并在VS Code软件左下角调试区域设置端口号(插头)。

       ③:点击“Set Espressif Device Target”选择目标芯片,这里我们选择ESP32-S3.

       ④:选择“select flash Method”下载方式(五角星),如UART或者JTAG

       ⑤:点击“Full Clean”擦除工程(垃圾桶)。

       ⑥:点击“Build Project”编译工程(圆柱形)。

       ⑦:编译完成后,点击“ESP-IDF: Flash Device”下载代码(闪电)。

       编译工程成功后,工程目录下出现build文件夹,这个文件夹是由ESP-IDF编译器生产的文件,如log、固件、map等下载和调试文件。如下图所示:

第六章 新建基础工程3295.png
图6.3.1.1 编译输出文件(部分截图)

       编译完成后,VSCode软件底部的Build Output窗口会输出编译信息,如下图所示:

第六章 新建基础工程3365.png
图6.3.1.2 编译00_BASIC工程

       由上图可以看到,当出现以上信息后便证明工程编译成功,这个过程可能会持续2~3分钟,快的话1分钟也是可以的(电脑配置越高,编译就越快),请您耐心等待。
       上图中也可以查到本次编译的许多信息,这里介绍终端界面下的几个重要信息:

       ①:Used static IRAM:为了与 ESP32-S3 目标兼容,保留了这些选项,当前读取为54146 bytes(.text size + .vectors size)

       ②:.text size:文本占用空间大小(53119bytes)

       ③:.vectors size:矢量大小(1027 bytes)

       ④:Used stat D/IRAM:这是内部 RAM 的总使用量,静态 DRAM .data + .bss 的总和,以及应用程序用于可执行代码的静态 IRAM(指令 RAM)。可用大小是运行时作为堆内存可用的 DRAM 的估计量(由于元数据开销和实现限制,以及 ESP-IDF 在启动期间完成的堆分配,启动时的实际可用堆将低于此值)。

       ⑤:.data size:是静态分配的 RAM,在启动时分配给非零值。这在运行时使用 RAM (DRAM),并且还使用二进制文件中的空间。

       ⑥:.bss size:是静态分配的 RAM,在启动时分配为零。这在运行时使用 RAM(DRAM),但不使用二进制文件中的任何空间。

       ⑦:Used Flash size:这表示项目在编译后将使用的Flash内存的大小,但不包括DRAM和IRAM的使用量。

       ⑧:.text:这部分用于表示.text的Flash大小。

       ⑨:.rodata:这部分用于表示.rodata的Flash大小。

       ⑩:Total image size:是二进制文件的预估总大小。

       编译成功后,点击图6.3.1闪电图标就可以把编译出来的可执行文件烧录至ESP32S3开发板上,如下图所示:

第六章 新建基础工程4175.png
图6.3.1.3 下载程序至开发板中

       6.3.2 JTAG下载与调试

       本小节的内容是参考乐鑫ESP-IDF编程指南的JTAG 调试章节。
       ESP32-S3内置JTAG电路,因此无需额外芯片即可实现调试功能。通过简单地将USB线连接到其D+/D-引脚,即可轻松完成下载与调试操作。利用JTAG接口,开发人员能够运用开源工具OpenOCD对ESP32-S3进行调试。OpenOCD专为嵌入式系统开发和调试设计,可连接到目标硬件的调试接口(如JTAG或SWD),支持调试、固件烧写等硬件相关任务。根据乐鑫官方资料,JTAG下载提供两种方式:一种为直接利用内置的JTAG电路进行调试;另一种则是借助乐鑫官方推出的ESP-PROG调试器,它集成了自动下载固件、串口通信以及JTAG在线调试等多项功能。此外,在VS Code中安装OpenOCD时,它会自动为我们配置好所需环境,使得我们可以直接使用内置的JTAG电路和VS Code中的OpenOCD来下载与调试ESP32-S3芯片,进一步简化了开发流程。

       1,前期准备
       JTAG下载与调试之前,我们必须修改launch.json和settings.json这两个文件。其中launch.json文件用来配置调试器。

       ①:进入乐鑫官方提供的VS Code调试配置文件launch.json网址。在该网址下,有详细的说明指导我们如何根据使用JATG调试器或使用VS Code进行调试,来相应地修改launch.json的内容。由于我们选择使用VS Code进行调试,因此launch.json的修改内容如下。

  1. <font size="4">{
  2.     "version": "0.2.0",
  3.     "configurations": [
  4.       {
  5.         "name": "GDB",
  6.         "type": "cppdbg",
  7.         "request": "launch",
  8.         "MIMode": "gdb",
  9.         "miDebuggerPath": "${command:espIdf.getXtensaGdb}",
  10.         "program": "${workspaceFolder}/build/${command:espIdf.getProjectName}.elf",
  11.         "windows": {
  12.           "program": "${workspaceFolder}\\build\\${command:espIdf.getProjectName}.elf"
  13.         },
  14.         "cwd": "${workspaceFolder}",
  15.         "environment": [{ "name": "PATH", "value": "${config:idf.customExtraPaths}" }],
  16.         "setupCommands": [
  17.           { "text": "target remote :3333" },
  18.           { "text": "set remote hardware-watchpoint-limit 2"},
  19.           { "text": "mon reset halt" },
  20.           { "text": "thb app_main" },
  21.           { "text": "flushregs" }
  22.         ],
  23.         "externalConsole": false,
  24.         "logging": {
  25.           "engineLogging": true
  26.         }
  27.       }
  28.     ]</font>
  29. }
复制代码

       ②:在settings.json文件下找到"idf.openOcdConfigs"配置选项,我们把该选项的内容修改为一下内容。

  1. "idf.openOcdConfigs": [
  2.     "interface/ftdi/esp32_devkitj_v1.cfg",
  3.     "target/esp32.cfg"
  4. ],
复制代码

       修改为:

  1. "idf.openOcdConfigs": [
  2.     "board/esp32s3-builtin.cfg",
  3. ],
复制代码

       到了这里,我们已经配置VS Code OpenOCD完成,下面作者来讲解使用JTAG下载与调试操作。

       ③:cpp_properties.json文件下添加以下红色内容,解决编译过程中总会出现某些文件无法找到头文件的错误信息提醒(有时会是警告)。

  1. {
  2.     "configurations": [
  3.         {
  4.             "name": "ESP-IDF",
  5.             "includePath": [
  6.                 "${config:idf.espIdfPath}/components/**",
  7.                 "${config:idf.espIdfPathWin}/components/**",
  8.                 "${config:idf.espAdfPath}/components/**",
  9.                 "${config:idf.espAdfPathWin}/components/**",
  10.                 "${config:idf.espAdfPathWin}/components/**",
  11.                 "${workspaceFolder}/**"
  12.             ],
  13.             "browse": {
  14.                 "path": [
  15.                     "${config:idf.espIdfPath}/components",
  16.                     "${config:idf.espIdfPathWin}/components",
  17.                     "${config:idf.espAdfPath}/components/**",
  18.                     "${config:idf.espAdfPathWin}/components/**",
  19.                     "${workspaceFolder}"
  20.                 ],
  21.                 "limitSymbolsToIncludedHeaders": false
  22.             },
  23. /* 解决 browse.path 中未找到包含文件 */
  24.             "configurationProvider": "ms-vscode.cmake-tools"  
  25.         }
  26.     ],
  27.     "version": 4
  28. }
复制代码

       2,JTAG下载程序
       JTAG下载程序流程如下:
       使用USB线的Type-C接口连接DNESP32S2开发板左下角的USB口,并USB A口连接到电脑,使得电脑与开发板建立连接。

       设置USB JTAG接口的端口号(电脑自动识别)。

       选择“select flash Method”下载方式(五角星),这里我们选择JTAG下载。

       点击“Full Clean”擦除工程(垃圾桶)。

       点击“Build Project”编译工程(圆柱形)。

       编译成功后,点击“Flash Device”下载程序至开发板中,此时,VS Code提示是否运行OpenOCD,如下图所示:

第六章 新建基础工程7501.png
图6.3.2.1 运行OpenOCD

       下载成功后,VS Code右下角提示如下信息。

第六章 新建基础工程7546.png
图6.3.2.2 提示下载成功

       3,JTAG调试
       JTAG调试非常简单,先把代码下载至开发板,然后点击“运行与调试”,如下图所示:

第六章 新建基础工程7614.png
图6.3.2.3 点击运行与调试

       打开运行与调试界面如下图所示:

第六章 新建基础工程7649.png
图6.3.2.4 点击运行调试

       此时,系统执行到我们刚刚定义的断电处,如下图所示:

第六章 新建基础工程7694.png
图6.3.2.5 调试效果

       在上图中,右上角提供了用于调试代码的选项。由于这些功能在学习MDK时都有所涉及并经常使用,因此作者在此不再过多介绍这些调试选项。

       4,调试方法
       下面,作者简单介绍一下VS Code调试方法,例如变量怎么加载至监视,反汇编如何打开等实用操作。
       变量监控:
       打开调试时,选择某个变量右键选择“添加到监视”,如下图所示:

第六章 新建基础工程7868.png
图6.3.2.6 变量添加到监视器中

       此时,运行与调试界面显示该变量的当前数值,如下图所示:

第六章 新建基础工程7917.png
图6.3.2.7 监视变量和监视CPU寄存器

       在图6.3.2.6中,我们可以打开“反汇编视图”,用户可以查看程序的反汇编指令,理解程序的执行流程,以及分析程序的结构和逻辑,如下图所示:

第六章 新建基础工程8012.png
图66.3.2.8 反汇视图查看函数地址

       除了上述的调试方法,大家还需亲自动手实践,才能真正理解VS Code的调试流程。请注意,在使用VS Code对ESP32进行调试时,可能会遇到一些问题。例如,如果调试失败,可能是因为需要先使用JTAG接口下载程序才能进行调试。另外,调试结束后,有时需要重新编译代码才能再次成功调试。最后,调试过程中可能会出现不稳定的情况,如自动断开,这可能是由于VS Code的OpenOCD与ESP32-S3芯片内置的JTAG连接不稳定所致。为了解决这些问题,建议使用乐鑫官方的JTAG调试器。

       6.4 原子工程的文件架构解析

       在讲解正点原子ESP32工程架构之前,我们先了解一下乐鑫ESP32工程的工程架构,如下所示:

第六章 新建基础工程8339.png
图6.4.1 乐鑫ESP32工程文件架构

       从上图可以清晰地看出,除了components文件夹外,该工程架构与我们在6.1小节中新建的架构是一致的。components文件夹主要用于存放第三方驱动库和开发者编写的驱动库。然而,如果我们采用类似于乐鑫ESP32的工程架构进行开发,这可能会导致我们的工程架构变得相当混乱。因此,正点原子采取了一个不同的做法,将开发者编写的驱动文件整理到components文件夹下的BSP文件夹中。此外,我们还简化了CMakeLists.txt文件的管理,通过保留一个CMakeLists.txt文件,就能够加载多个驱动库,从而提高了工程的整洁性和可维护性。
       下图是正点原子ESP32工程的架构。

第六章 新建基础工程8655.png
图6.4.2 正点原子ESP32文件架构

       从上图中我们可以清晰地观察到,正点原子将所有开发者编写的程序驱动都统一地放置在BSP文件夹下。为了对这些程序驱动实施高效的统一管理,它引入了一个CMakeLists.txt文件。这种做法的显著优势在于,当需要创建新的驱动文件时,我们无需像乐鑫ESP32工程那样,为每一个驱动代码都单独创建一个CMakeLists.txt文件。相反,我们只需使用一个CMakeLists.txt文件即可完成所有相关操作,极大地简化了整个开发流程。接下来,我们将深入探究我们提供的CMakeLists.txt文件,其代码内容如下:

       ①源文件路径,指本目录下的所有代码驱动
  1. set(src_dirs
  2.             IIC
  3.             LCD
  4.             LED
  5.             SPI
  6.             XL9555
  7.             KEY
  8.             24CXX
  9.             ADC
  10.             AP3216C
  11.             QMA6100P)
复制代码

       ②头文件路径,指本目录下的所有代码驱动
  1. set(include_dirs
  2.             IIC
  3.             LCD
  4.             LED
  5.             SPI
  6.             XL9555
  7.             KEY
  8.             24CXX
  9.             ADC
  10.             AP3216C
  11.             QMA6100P)
复制代码

       ③设置依赖库
  1. set(requires
  2.             driver
  3.             fatfs
  4.             esp_adc
  5.             esp32-camera
  6.             newlib
  7.             esp_timer)
复制代码

       ④注册组件到构建系统的函数
  1. idf_component_register(SRC_DIRS ${src_dirs} INCLUDE_DIRS
  2. ${include_dirs} REQUIRES ${requires})
复制代码

       ⑤设置特定组件编译选项的函数
  1. component_compile_options(-ffast-math -O3 -Wno-error=format=-Wno-format)
复制代码

       -ffast-math: 允许编译器进行某些可能减少数学运算精度的优化,以提高性能。
       -O3: 这是一个优化级别选项,指示编译器尽可能地进行高级优化以生成更高效的代码。
       -Wno-error=format: 这将编译器关于格式字符串不匹配的警告从错误降级为警告。
       -Wno-format: 这将完全禁用关于格式字符串的警告。

       在开发过程中,④和⑤是固定不变的设定。而①和②的确定则依赖于项目所需的驱动文件数量。如果当前目录下缺少某个特定的驱动文件(例如LED驱动文件),但在CMakeLists.txt文件中却指定了需要编译该LED驱动文件,那么在系统编译时将会遇到以下错误:

第六章 新建基础工程9984.png
图6.4.3 未发现LED驱动文件

       此时,需要我们添加LED驱动文件,并且清除编译工程文件才能再一次编译工程。
       ③表示驱动程序需要依赖的库,例如CAMERA驱动程序,它依赖的是esp32-camera这一个摄像头驱动库。下图是CMakeLists.txt未添加依赖库的错误提示。

第六章 新建基础工程10126.png
图6.4.4 未添加依赖库的提示错误(CAMERA驱动程序未添加依赖库)

       6.5 基础工程配置

       在第三章节中,我们得知正点原子是以ATK-MWS3S模组作为主控,该模组的设计参考了乐鑫的ESP32-S3-WOOD-1的N16R8型号,因此它与乐鑫产品可实现P2P兼容。然而,在6.1小节新建工程时,我们并未立刻适配这款模组的内部资源,例如时钟频率是否设定为240MHz、Flash配置是否为16MB,以及PSRAM的模式是否为OCT和8MB等。这些参数需要由开发者自行配置,否则我们的工程只能使用乐鑫的默认配置进行开发,这样模组便无法充分发挥其应有的性能。下面,作者将逐步引导读者进行基础工程的配置,确保其与正点原子发布的DNESP32S3开发板的主控模组内部资源相匹配。配置流程如下:

       1,使用VS Code打开6.1小节新建的工程,并点击左下角齿轮(ESP-IDF: SDK Configuration Editor (menuconfig))进去menuconfig菜单配置界面,如下图所示:

第六章 新建基础工程10578.png
图6.5.1 进入menuconfig配置界面

       关于menuconfig配置界面的具体内容,作者将在后续的章节中进行详细讲解。目前,我们的主要目标是配置与ATK-MWS3S模组相匹配的资源。
       2,在上图“Search parameter”搜索框下输入“Flash”进去flash配置界面,配置内容如下所示:

第六章 新建基础工程10734.png
图6.5.2 配置Flash资源

       上图中的①“Flash SPI mode”支持四种不同的 SPI flash 访问模式,它们分别为DIO、DOUT、QIO 和 QOUT。下面我们来看一下这几种模式到底有哪些区别,这些模式的对比如下表所示:

1.png
表6.5.1 四种SPI模式的对比

       从上表可知,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来确定的,这里我们选择16MB大小,是毫无争议的。

       3,在搜索框中输入“Partition Table”来设置分区表。分区表的主要功能是将flash划分为多个功能各异的区域,包括存储启动文件、代码区域和文件系统区域等子分区,以满足不同的应用需求。后续章节将详细解释分区表的作用和配置方法。下图是基础工程分区表配置参数。

第六章 新建基础工程11481.png
图6.5.3 配置分区表

       上图中,我们选择“Custom partition table CSV”自定义分区表,然后设置分区表的名称为partitions-16MiB.csv。稍后我们会设置分区表各个子分区的管理大小。

       4,在搜索框中输入“PSRAM”来设置PSRAM参数,配置参数如下图所示:

第六章 新建基础工程11631.png
图6.5.4 设置PSRAM参数

       上图的①选项是基于模组内部芯片的选择来确定的。为了正确配置,读者可以查阅《esp32-s3-wroom-1_wroom-1u_datasheet_cn》数据手册的第三页。在该页中,我们可以看到ESP32-S3-WROOM-1-N16R8模组所挂载的PSRAM使用的是Octal SPI模式。因此,在配置过程中,我们应该选择“Octal Mode PSRAM”这一选项。
       上图的②选项选择最该的速率即可,并且与Flash SPI速率一致。

       5,在搜索框中输入“CPU frequency”来设置CPU的时钟频率,如下图所示:

第六章 新建基础工程11912.png
图6.5.5 配置CPU主频

       6,在搜索框中输入“FreeRTOS”来配置系统节拍时钟(tick clock)的频率。默认情况下,“configTICK_RATE_HZ”的值为100,意味着节拍时钟的周期为10ms。因此,调用vTaskDelay(1000)将会导致延时10秒。为了提高定时精度和方便性,建议将该值设置为1000,这样节拍时钟的周期就变为1ms,从而使得vTaskDelay(1000)代表延时1秒。如下图所示:

第六章 新建基础工程12129.png
图6.5.6 配置系统节拍时钟(tick clock)的频率

       7,配置分区表各个子分区,我们按下“Ctrl+Shift+P”快捷键打开命令面板,并在搜索栏内输入“打开分区表编辑器”,按以下图配置各个分区的管理大小。

第六章 新建基础工程12239.png
图6.5.7 设置分区表

       先我们按下“Add New Row”选项添加子分区条目,然后设置条目的类型、偏移和大小,最后按下“Save”选项保存退出。
       至此,我们已经完成了工程配置,确保其与DNESP32S3开发板所搭载的ATK-MWS3S模组的内部资源相匹配。现在,我们可以利用这个工程在DNESP32S3开发板上进行开发工作。下面我们来看一下当前工程架构,如下图所示:

第六章 新建基础工程12428.png
图6.5.8 正点原子ESP32S3基础工程架构

       上图中的sdkconfig.old是之前的基础工程所使用的旧版系统配置文件,用于记录之前的配置信息。而当前的sdkconfig则是系统最新生成的系统配置文件,包含了最新的配置设置。此外,partitions-16MiB.csv是系统配置保存后自动生成的分区表文件,该文件可供用户查看,以便了解当前的分区配置情况。这些文件共同构成了ESP32开发环境的配置体系。
       接下来,作者在app_main函数中编写了代码,以获取DNESP32S3开发板上ATK-MWS3S模组的内部资源信息。这些信息包括时钟频率、flash大小以及PSRAM大小等。具体的代码实现如下所示:

  1. #include "freertos/FreeRTOS.h"
  2. #include "freertos/task.h"
  3. #include "nvs_flash.h"
  4. #include "esp_system.h"
  5. #include "esp_chip_info.h"
  6. #include "esp_psram.h"
  7. #include "esp_flash.h"

  8. /**
  9. * @brief       程序入口
  10. * @param       无
  11. * @retval      无
  12. */
  13. void app_main(void)
  14. {
  15.     esp_err_t ret;
  16.     uint32_t flash_size;
  17.     esp_chip_info_t chip_info;                                 /* 定义芯片信息结构体变量 */
  18.     ret = nvs_flash_init();                                          /* 初始化NVS */
  19. if (ret == ESP_ERR_NVS_NO_FREE_PAGES
  20. || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
  21.     {
  22.         ESP_ERROR_CHECK(nvs_flash_erase());
  23.         ret = nvs_flash_init();
  24.     }
  25.     esp_flash_get_size(NULL, &flash_size);                   /* 获取FLASH大小 */
  26.     esp_chip_info(&chip_info);
  27. printf("内核:cup数量%d\n",chip_info.cores);        /* 获取CPU内核数并显示 */
  28. /* 获取FLASH大小并显示 */
  29. printf("FLASH size:%ld MB flash\n",flash_size / (1024 * 1024));
  30. /* 获取PARAM大小并显示 */
  31.     printf("PSRAM size: %d bytes\n", esp_psram_get_size());         
  32.     while(1)
  33.     {
  34.         printf("Hello-ESP32\r\n");
  35.         vTaskDelay(1000);
  36.     }
  37. }
复制代码

       上述代码是获取DNESP32S3开发板上ATK-MWS3S模组的内部资源信息,并打印到监控器上。首先我们编译基础工程,然后下载至开发板中,最后打开监控器查看串口打印内容,如下图所示:

第六章 新建基础工程13832.png
图6.5.9 打印内部资源信息

       在以后的例程中,我们是以这个基础工程来延申扩展,所以本章节的内容非常重要,望读者好好理解。






阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-16 10:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表