ESP32-S3 嵌入式开发学习知识图谱

2518 字
13 分钟
ESP32-S3 嵌入式开发学习知识图谱

ESP32-S3 嵌入式开发学习知识图谱#

本文档汇总本系列所有博文的章节结构、知识点关联和推荐阅读顺序。 每一篇笔记对应一个可运行的 ESP-IDF 工程,附带真实源码路径。


一、总体学习路线#

┌─────────────────────────────────────────────┐
│ ESP32-S3 嵌入式开发学习路线 │
└─────────────────────────────────────────────┘
┌───────────────┬───────────────┼───────────────┬───────────────┐
▼ ▼ ▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 基础原理 │ │ GPIO外设 │ │ 中断定时 │ │ 通信协议 │ │ 无线+RTOS│
│ (6篇) │ │ (5篇) │ │ (6篇) │ │ (7篇) │ │ (6篇) │
└──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘

二、知识图谱总览#

ESP32-S3 嵌入式知识体系
├── 1. 基础原理 ─────────────────────────────────────────────────
│ ├── ESP-IDF 环境与 hello_world → 00_hello_world.md
│ │ └── CMake 构建体系、组件化开发、menuconfig
│ │
│ ├── Wi-Fi 通信原理 → 01_wifi原理.md
│ │ ├── 频段(2.4G/5G)、信道(1/6/11)
│ │ ├── IEEE 802.11 标准(b/g/n/ac/ax)
│ │ ├── 网络拓扑(星型/Mesh)
│ │ ├── 路由器、IP 地址、子网掩码、DHCP
│ │ ├── C/S 模型、端口号
│ │ └── lwIP 协议栈(四层封装)
│ │
│ ├── ESP32-S3 启动流程 → 02_启动原理_NVS_SPIFFS.md
│ │ ├── ROM → bootloader → app 多级引导
│ │ ├── 对比 Windows BIOS 启动
│ │ └── vTaskStartScheduler 的启动时机
│ │
│ ├── NVS(非易失键值存储) → 同 02_启动原理_NVS_SPIFFS.md
│ │ ├── 键值对数据库 vs 文件系统
│ │ ├── 磨损均衡、命名空间
│ │ └── Wi-Fi/BLE 为什么依赖 NVS
│ │
│ ├── SPIFFS(Flash 文件系统) → 同 02_启动原理_NVS_SPIFFS.md
│ │ ├── 类 POSIX 文件 API(fopen/fread)
│ │ ├── 与 FAT 的对比
│ │ └── VFS 注册机制
│ │
│ └── FreeRTOS 数据类型与可移植性 → 02_启动原理_NVS_SPIFFS.md
│ ├── BaseType_t / TickType_t / TaskHandle_t
│ └── v / x / pd 命名约定
├── 2. GPIO 与基础外设 ──────────────────────────────────────────
│ ├── LED 闪烁 → 01_LED闪烁.md
│ │ ├── gpio_config_t 结构体
│ │ ├── 位掩码(1ULL << gpio_num)
│ │ └── 组件化封装(LED_init / gpio_toggle)
│ │
│ ├── 流水灯 → 02_流水灯.md
│ │ ├── 多 GPIO 位掩码配置
│ │ └── 移位操作实现流水效果
│ │
│ ├── 蜂鸣器 → 03_蜂鸣器.md
│ │ ├── GPIO 输出复用
│ │ └── 有源/无源蜂鸣器区别
│ │
│ ├── 按键输入 → 04_按键输入.md
│ │ ├── GPIO_MODE_INPUT + 上拉
│ │ ├── 软件消抖(延时法)
│ │ └── 轮询 vs 中断两种检测方式
│ │
│ └── 多任务初探 → 05_多任务初探.md
│ ├── 无 RTOS 的协作式"多任务"
│ └── 与 FreeRTOS 的过渡对比
├── 3. 中断与定时器 ─────────────────────────────────────────────
│ ├── 外部中断 EXTI → 01_外部中断.md
│ │ ├── gpio_install_isr_service()
│ │ ├── gpio_isr_handler_add()
│ │ ├── ISR 中不能阻塞、不能 printf
│ │ └── 中断服务与任务通信
│ │
│ ├── LCD 显示屏 → 02_LCD显示.md
│ │ ├── SPI LCD 驱动框架
│ │ ├── 字库(lcdfont.h)
│ │ └── 绘图函数封装
│ │
│ ├── GP 通用定时器 → 03_GP定时器.md
│ │ ├── gptimer_handle_t
│ │ ├── 定时器回调(ISR 上下文)
│ │ └── 单次 / 周期模式
│ │
│ ├── ESP 高精度定时器 → 04_ESP定时器.md
│ │ ├── esp_timer_create()
│ │ ├── 软件定时器(非硬件)
│ │ └── 与 GPTimer 的对比与选择
│ │
│ ├── PWM 输出 → 05_PWM与舵机.md
│ │ ├── LEDC 控制器
│ │ ├── 占空比与分辨率
│ │ └── ledc_timer_config / ledc_channel_config
│ │
│ └── PWM 舵机控制 → 05_PWM与舵机.md
│ ├── 舵机角度→脉宽映射
│ └── 50Hz / 0.5ms~2.5ms 控制信号
├── 4. 模拟外设 ─────────────────────────────────────────────────
│ ├── 低速 ADC → 01_低速ADC.md
│ │ ├── adc_oneshot 单次采样
│ │ └── adc_cali 校准
│ │
│ └── 连续 ADC → 02_连续ADC.md
│ ├── adc_continuous 连续模式 + DMA
│ └── 数据缓冲与回调处理
├── 5. 通信协议 ─────────────────────────────────────────────────
│ ├── UART 串口通信 → 01_UART.md
│ │ ├── uart_param_config
│ │ ├── 中断接收 / 事件队列
│ │ └── 波特率、数据位、校验
│ │
│ ├── I2C 总线 → 02_IIC.md
│ │ ├── i2c_master_bus_handle_t
│ │ ├── 设备地址、读写时序
│ │ └── 开漏 + 上拉的硬件要求
│ │
│ ├── SPI LCD 驱动 → 03_SPI_LCD.md
│ │ ├── SPI 主机模式配置
│ │ ├── CS/DC/RST/BLK 引脚
│ │ └── 命令/数据切换
│ │
│ ├── SPI SD 卡读写(SPITF) → 04_SPITF_SD卡.md
│ │ ├── SDSPI_HOST_DEFAULT()
│ │ ├── esp_vfs_fat_sdspi_mount()
│ │ ├── VFS 路径注册 → fopen/fprintf
│ │ └── mount_config 参数详解
│ │
│ ├── Camera 摄像头 → 05_Camera.md
│ │ ├── SCCB(类 I2C)配置
│ │ ├── DVP 并行接口
│ │ └── 像素格式与帧缓冲
│ │
│ └── SPIFFS Flash 文件系统 → 01_SPIFFS.md
│ ├── esp_vfs_spiffs_register()
│ ├── 分区表配置(partitions_user.csv)
│ ├── 磨损均衡
│ └── VFS 统一接口:fopen/fread/fwrite
├── 6. 无线通信 ─────────────────────────────────────────────────
│ ├── Wi-Fi STA 模式 → 01_WiFi_STA.md
│ │ ├── nvs_flash_init → esp_netif → esp_wifi
│ │ ├── 事件驱动:WIFI_EVENT + IP_EVENT
│ │ ├── WIFI_EVENT_STA_START / CONNECTED / DISCONNECTED
│ │ └── IP_EVENT_STA_GOT_IP(真正联网成功标志)
│ │
│ ├── Wi-Fi AP 模式 → 02_WiFi_AP.md
│ │ ├── esp_netif_create_default_wifi_ap()
│ │ ├── SSID / 密码 / authmode / max_connection
│ │ ├── WIFI_EVENT_AP_STACONNECTED / STADISCONNECTED
│ │ └── 与 STA 模式的逐项对比
│ │
│ ├── NTP 网络校时 → 03_NTP校时.md
│ │ ├── SNTP 同步(sntp_setoperatingmode)
│ │ ├── 时区设置(TZ 环境变量 / setenv)
│ │ ├── localtime() 时间分解
│ │ └── STA连通→校时→LCD刷新 调用链
│ │
│ └── BLE 蓝牙低功耗 → 04_BLE.md
│ ├── NimBLE 协议栈初始化
│ ├── GAP:广播 / 扫描
│ ├── GATT:Service → Characteristic
│ ├── Write / Read / Notify
│ └── 手机 APP → 特征值 → 控制硬件
├── 7. FreeRTOS 实时操作系统 ────────────────────────────────────
│ ├── 多任务创建与删除 → 01_多任务创建与删除.md
│ │ ├── xTaskCreatePinnedToCore 七参数
│ │ ├── vTaskDelete + 句柄置 NULL
│ │ ├── 同优先级时间片轮转
│ │ ├── vTaskDelay 的三大作用:让出 CPU / 喂狗 / tick-Hz
│ │ └── FreeRTOS 数据类型表(BaseType_t 等)
│ │
│ └── 任务挂起与恢复 → 02_任务挂起与恢复.md
│ ├── vTaskSuspend / vTaskResume
│ ├── Suspended vs Blocked vs Deleted
│ ├── 五态任务模型完整图
│ └── app_main() 返回 vs while(1) 死循环
└── 附录
├── CMake 组件注册模板(components/CMakeLists.txt)
├── 分区表模板(partitions_user.csv)
└── ESP-IDF 常用 menuconfig 选项

三、推荐阅读顺序#

循序路径(新手)#

00_hello_world ──► 01_LED闪烁 ──► 02_流水灯 ──► 03_蜂鸣器
04_按键输入
┌──────────────┼──────────────┐
▼ ▼ ▼
06_外部中断 05_多任务初探 03_GP定时器
│ │ │
▼ ▼ ▼
02_LCD显示 01_多任务创建 04_ESP定时器
│ (FreeRTOS) │
▼ │ ▼
┌─────┴─────┐ │ 05_PWM与舵机
│ │ │ │
▼ ▼ ▼ ▼
03_SPI_LCD 10_PWM 02_挂起恢复 02_连续ADC
│ │
▼ │
04_SPITF_SD卡 │
│ │
▼ │
01_SPIFFS │
│ │
└────────┬───────────┘
01_WiFi_STA ──► 02_WiFi_AP
03_NTP校时
04_BLE

独立阅读(有基础)#

各模块内部相对独立,可以按需跳读:

模块前置依赖可以独立切入
基础原理✓ 任意顺序
GPIO 外设01_LEDGPIO 相关可串读
中断定时器04_按键输入 + 07_LCDDisplay中断概念需先理解
模拟外设✓ 独立阅读
通信协议GPIO 基础I2C → SPI → Camera 建议串读
无线通信基础原理 + GPIOSTA → AP → NTP 建议串读
FreeRTOS基础原理 + GPIO两篇建议顺序读

四、知识点交叉索引#

纵向依赖(前→后)#

前置知识点出现章节被后续哪些章节使用
gpio_config_t / 位掩码01_LED流水灯、蜂鸣器、按键、中断、LCD、…(几乎所有章节)
vTaskDelay()01_LEDFreeRTOS 全部、Wi-Fi 全部、BLE、NTP
按键消抖04_按键输入外部中断、FreeRTOS 挂起恢复
SPI 协议03_SPI_LCDSPITF SD 卡、Camera
fopen/fprintf (VFS)04_SPITF_SD卡SPIFFS
nvs_flash_init()01_WiFi_STAAP、NTP、BLE
Wi-Fi 事件模型01_WiFi_STAAP、NTP 校时
xTaskCreatePinnedToCoreFreeRTOS 多任务挂起恢复、Wi-Fi 各章、BLE、NTP

横向对比(同类知识放一起看)#

对比主题涉及章节
轮询 vs 中断04_按键输入 vs 01_外部中断
GP 定时器 vs ESP 定时器03_GP定时器 vs 04_ESP定时器
低速 ADC vs 连续 ADC01_低速ADC vs 02_连续ADC
SPI LCD vs SPI SD 卡03_SPI_LCD vs 04_SPITF_SD卡
SPITF (SD卡) vs SPIFFS (Flash)04_SPITF_SD卡 vs 01_SPIFFS
NVS vs SPIFFS02_启动原理_NVS_SPIFFS
STA vs AP01_WiFi_STA vs 02_WiFi_AP
FreeRTOS Delete vs Suspend01_多任务创建与删除 vs 02_任务挂起与恢复
FreeRTOS 启动 vs Windows BIOS02_启动原理_NVS_SPIFFS

五、源码工程 → 博文映射#

源码目录(工程路径)对应博文
00_hello_world01_基础原理/00_hello_world.md
0-1_under_Loop_stu/notes.md01_基础原理/02_启动原理_NVS_SPIFFS.md
0-1_under_Loop_stu/wifi_notes.md01_基础原理/01_wifi原理.md
01_LED02_GPIO与基础外设/01_LED闪烁.md
02_FlowingLED02_GPIO与基础外设/02_流水灯.md
03_Beep02_GPIO与基础外设/03_蜂鸣器.md
04_Key_board02_GPIO与基础外设/04_按键输入.md
05_multitask02_GPIO与基础外设/05_多任务初探.md
06_Exti03_中断与定时器/01_外部中断.md
07_LCDDisplay03_中断与定时器/02_LCD显示.md
08_GPTimer03_中断与定时器/03_GP定时器.md
09_ESPTimer03_中断与定时器/04_ESP定时器.md
10_PWM + 11_PWMServoMotor03_中断与定时器/05_PWM与舵机.md
12_ADCContinuous04_模拟外设/02_连续ADC.md
13_ADC04_模拟外设/01_低速ADC.md
15_UART05_通信协议/01_UART.md
16_IIC05_通信协议/02_IIC.md
17_SPILCD05_通信协议/03_SPI_LCD.md
18_SPITF05_通信协议/04_SPITF_SD卡.md
19_Camera05_通信协议/05_Camera.md
20_SPIFFS06_存储/01_SPIFFS.md
21_WIFI_STA07_无线通信/01_WiFi_STA.md
22_WIFI_AP07_无线通信/02_WiFi_AP.md
23_NTCTime07_无线通信/03_NTP校时.md
24_BLE07_无线通信/04_BLE.md
FREERTOS/1_MultiTask08_FreeRTOS/01_多任务创建与删除.md
FREERTOS/2_SuspendTask08_FreeRTOS/02_任务挂起与恢复.md

六、博文统一排版规范#

每篇博文按以下结构组织:

  1. 标题# 章节名 — 一句话描述
  2. API 速查表:本章涉及的 API 一览
  3. 目录:可点击跳转的命名锚点目录
  4. 概述:本章解决了什么问题,和前后章节的关系
  5. 原理讲解:硬件原理 / 协议原理 / 软件架构(保留原笔记的 ASCII 图、表格、代码块)
  6. 代码详解:按源文件路径逐段拆解,引用真实行号
  7. 调用链路图:ASCII 图展示函数调用关系
  8. 对比分析:如有相关章节,做横向对比表
  9. Tips:本章需要特别注意的细节、个人踩坑记录、设计决策思考
  10. 小结:核心收获一句话总结

本知识图谱跟随工程更新持续维护。最后更新:2026-07-14

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

ESP32-S3 嵌入式开发学习知识图谱
https://mjzy.tech/posts/embedded/esp32-s3/00-knowledge-map/
作者
ENKIDU
发布于
2026-08-04
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
ENKIDU
深度学习 & 计算机底层原理 | 用代码理解世界
低语
天之锁永系天与地,而这里系着文字与记忆。欢迎来到乌鲁克的数字荒原。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
49
分类
6
标签
45
总字数
180,771
运行时长
0
最后活动
0 天前
站点信息
构建平台
Vercel
文章许可
CC BY-NC-SA 4.0

文章目录