2026-07-15-stm32-ingest.md 31 KB

尚硅谷 STM32 笔记导入实现计划

For agentic workers: REQUIRED SUB-SKILL: 使用 subagent-driven-developmentexecuting-plans 逐任务执行。复选框 - [ ] 标记跟踪进度。

目标:将尚硅谷 STM32 全套 4 份 DOCX 笔记 + 配套源码转换为 21 篇结构化 Markdown 笔记,存入 X-Knowledge-Base/raw/Joplin/嵌入式+Linux/STM32学习笔记/

处理方法:每批次:pandoc 转 MD → 按章节拆篇 → 逐篇扩写(参考手册引用 + 原理图引用 + 网络资料补充)→ 从源码复制代码 + 逐行注释 → 图片 API 验证 → git 提交

参考资料

  • docs/如何将他人文档整理为LLM-Wiki笔记.md
  • docs/superpowers/specs/2026-07-15-stm32-silicon-valley-ingest-design.md
  • X-Knowledge-Base/raw/Joplin/嵌入式+Linux/FreeRTOS学习笔记/01-*.md(自由格式参考)

图片 API:使用视觉模型逐张验证图片内容,仅保留寄存器位域图/框图/时序图/原理图

最终提交:全部 4 批次完成后,统一次提交 ingest: 尚硅谷STM32全套笔记导入


文件产出清单

目标目录:X-Knowledge-Base/raw/Joplin/嵌入式+Linux/STM32学习笔记/

编号 文件名 来源 DOCX 代码项目
01 01-STM32概述与开发环境搭建.md 基础篇
02 02-GPIO寄存器详解与三步进化法.md 基础篇
03 03-GPIO输出:LED控制.md 基础篇 stm32_base/01~04
04 04-GPIO输入与NVIC中断系统.md 基础篇 stm32_base/05~06
05 05-系统时钟RCC详解.md 基础篇
06 06-串口USART通信.md 基础篇 stm32_base/07~12
07 07-I2C通信与EEPROM 24C02.md 进阶篇 stm32_base/13~15
08 08-SysTick与通用定时器TIM.md 进阶篇 stm32_base/16~19
09 09-TIM高级应用:PWM与输入捕获.md 进阶篇 stm32_base/20~27
10 10-DMA数据传输.md 进阶篇 stm32_base/28~31
11 11-ADC模数转换.md 进阶篇 stm32_base/32~35
12 12-SPI通信与FSMC总线.md 进阶篇 stm32_base/36~42
13 13-CAN通信协议与bxCAN外设.md 高级篇 stm32/01~04
14 14-以太网通信与W5500.md 高级篇 stm32/05~09
15 15-WiFi通信与ESP32-C3.md 高级篇 stm32/10~11
16 16-BLE低功耗蓝牙.md 高级篇 stm32/12
17 17-LoRa远距离通信.md 高级篇 stm32/13~14
18 18-电源管理与低功耗模式.md 扩展篇 stm32/15~20
19 19-BKP备份寄存器与RTC实时时钟.md 扩展篇 stm32/21~26
20 20-看门狗IWDG与WWDG.md 扩展篇 stm32/27~28
21 21-附录:HAL库架构与Keil MDK深入.md 扩展篇

附加产出

  • X-Knowledge-Base/raw/Joplin/嵌入式+Linux/STM32学习笔记/assets/ — 精选图片
  • wiki/source-stm32-*.md — 资料摘要页
  • wiki/index.md — 更新全局索引
  • wiki/log.md — 追加变更日志

各批次通用步骤模板

每篇笔记的处理步骤一致,以下为每篇的标准操作流程:

  1. 读取 pandoc 转换后的 MD 中对应章节内容
  2. 读取对应源码项目文件(main.c, driver.h, driver.c)
  3. 处理该章节图片:用视觉 API 验证 → 重命名 → 复制到 assets/
  4. 撰写笔记
    • 从原 DOCX 保留原意,但补充参考手册页码/原理图引用/网络资料
    • 代码块直接从源文件复制,标注文件路径,每行位操作加注释
    • 寄存器+HAL 双版
    • 添加核心函数速查表 + 常见问题
  5. 写入目标路径
  6. 追加 log 信息

批次 1:基础篇(笔记 01~06)

来源 DOCX上部-基础篇/01_笔记/01_尚硅谷嵌入式技术之STM32单片机(基础篇)1.0.2.docx 代码目录上部-基础篇/03_代码/stm32/ 参考手册上部-基础篇/02_资料/02_stm32官方资料/1-STM32F10x-中文参考手册_最新.pdf 原理图上部-基础篇/02_资料/05_原理图/STM32-F103ZET6开发板.pdf

任务 1.1:准备阶段 — 转换基础篇 DOCX

  • [ ] 步骤 1.1.1:pandoc 转换 + 提取图片

    pandoc "上部-基础篇/01_笔记/01_尚硅谷嵌入式技术之STM32单片机(基础篇)1.0.2.docx" -t markdown --wrap=none --extract-media="C:\Users\Administrator\AppData\Local\Temp\opencode\stm32_basic_media" -o "C:\Users\Administrator\AppData\Local\Temp\opencode\stm32_basic.md"
    
  • [ ] 步骤 1.1.2:阅读转换结果概览 读取 stm32_basic.md 前 500 行,确认章节结构和图片引用

任务 1.2:笔记 01 — STM32概述与开发环境搭建

来源章节:基础篇 DOCX 第1~3章(STM32概述 + Keil安装 + 最小系统)

  • [ ] 步骤 1.2.1:读取相关章节内容 从 pandoc 输出的 MD 中读取 STM32概述、ARM Cortex-M3、命名规则、Keil安装、最小系统等章节

  • [ ] 步骤 1.2.2:读取参考资料

    • STM32F103ZET6 数据手册 §1~3(命名规则、引脚定义)
    • 原理图 PDF 最小系统部分(电源/时钟/复位/下载调试电路)
    • Cortex-M3 权威指南(内核架构)
    • 代码项目 stm32/01_led_register 的工程结构
  • [ ] 步骤 1.2.3:处理本章图片

    • 定位本章节涉及的图片(image1~image33)
    • 视觉 API 逐张验证内容
    • 筛选保留:最小系统框图、命名规则图、开发板实物图
    • 删除:IDE 安装界面截图(image12~image23)
    • 重命名图片到 assets/
  • [ ] 步骤 1.2.4:撰写笔记 01

    ---
    tags: [source-summary]
    type: source
    source: "尚硅谷嵌入式技术之STM32单片机(基础篇)V1.0.2 — 第1~3章"
    author: "尚硅谷研究院"
    date: 2026-07-15
    created: 2026-07-15
    ---
    
    # STM32概述与开发环境搭建
    
    > **用生活理解**:如果把STM32比作一台微型电脑——ARM内核就像电脑的CPU,而Keil MDK就像Visual Studio,开发板就是一台迷你主机。
    
    ## STM32概述
    
    ### 关于ARM内核
    - ARM = Advanced RISC Machines
    - Cortex-M3 内核特性:32位RISC、3级流水线、Thumb-2指令集、NVIC中断控制器
    - 参考:Cortex-M3 权威指南 第2章
    
    ### 什么是STM32
    - ST = STMicroelectronics(意法半导体)
    - M = Microcontroller(微控制器)
    - 32 = 32位处理器
    - 基于 ARM Cortex-M 内核的32位MCU
    
    ### STM32应用场景
    - 工业自动化、电机控制、物联网终端、消费电子、医疗设备
    
    ### STM32系列MCU命名规则
    - STM32 F 103 Z E T 6 含义逐段解析
    - 参考:STM32F103xCDE 数据手册 §1(器件概览)
    
    ## 开发板简介
    
    ### 开发板实物图
    
    ![开发板资源图](assets/xxx.png)
    
    ### STM32F103ZET6 最小系统
    
    最小系统 = STM32芯片 + 电源 + 时钟 + 复位 + 下载调试
    
    **电源电路**:
    - 双路供电:USB Type-C (5V) → AMS1117 → 3.3V
    - ST-Link 直接提供 3.3V
    - 参考:原理图第1页(电源部分)
    
    **时钟电路**:
    - 外部8MHz晶振(HSE) + 32.768KHz晶振(LSE)
    - 原理图第2页
    
    **复位电路**:
    - NRST 引脚 + 按键 + RC电路
    - 原理图第3页
    
    **下载调试电路**:
    - SWD接口(SWDIO/SWCLK)+ ST-Link
    - 参考:原理图第3页
    
    ## STM32开发方式
    
    三种开发方式对比:
    | 方式 | 特点 |
    |------|------|
    | **寄存器** | 直接操作内存地址,代码最小、最深理解硬件 |
    | **标准库** | 官方封装寄存器操作,函数名规范 |
    | **HAL库** | CubeMX图形化配置,移植性好,代码量大 |
    
    ## 开发工具
    
    ### Keil MDK
    - 下载 → 安装 → 离线芯片支持包 → 注册
    - 芯片包选型:STM32F103ZET6 → Keil.STM32F1xx_DFP
    
    ### 项目文件结构
    

Project/ ├── Start/ # 启动文件 startup_stm32f10x_hd.s ├── User/ # main.c + 用户代码 ├── Hardware/ # 外设驱动(LED/KEY等) ├── Library/ # 标准库文件 ├── System/ # system_stm32f1xx.c └── Objects/ # 编译输出


### 启动文件选择
| 文件 | 适用芯片 |
|------|---------|
| startup_stm32f10x_ld.s | 16~32KB Flash |
| startup_stm32f10x_md.s | 64~128KB Flash |
| startup_stm32f10x_hd.s | 256~512KB Flash |

STM32F103ZET6 = 512KB Flash → 选 **hd**

## 烧录方法
- ST-Link SWD 方式(4线:SWDIO/SWCLK/VCC/GND)

## 核心函数速查

(环境搭建篇无代码 API,但列出常用概念)

## 常见问题与避坑
- 芯片支持包在线安装太慢 → 离线下载安装
- Keil MDK 需注册 → 使用注册机
- 下载失败 → 检查 ST-Link 驱动、SWD 接线
  • 步骤 1.2.5:写入文件

写入 X-Knowledge-Base/raw/Joplin/嵌入式+Linux/STM32学习笔记/01-STM32概述与开发环境搭建.md

任务 1.3:笔记 02 — GPIO寄存器详解与三步进化法

来源章节:基础篇 DOCX 第4~5章(点亮LED + GPIO详解) 代码项目stm32/01_led_register

  • [ ] 步骤 1.3.1:读取 DOCX 相关章节 + 源码 读取:GPIO 8种模式、7个寄存器、三步进化法 读取源码:stm32/01_led_register/User/main.c

  • [ ] 步骤 1.3.2:网络补充 搜索补充:GPIO 内部结构框图(P-MOS/N-MOS/施密特触发器)、输出速度与EMI关系

  • [ ] 步骤 1.3.3:处理图片 GPIO 寄存器位域图、内部结构框图保留;IDE截图删除

  • [ ] 步骤 1.3.4:撰写笔记 02 内容要点:

    • GPIO 内部结构框图 + 逐部件分析
    • 8种工作模式表格(推挽/开漏/浮空/上拉/下拉/模拟/复用推挽/复用开漏)
    • 关键寄存器表格: | 寄存器 | 地址偏移 | 功能 | | CRL | 0x00 | 低8位端口配置(MODE + CNF) | | CRH | 0x04 | 高8位端口配置 | | IDR | 0x08 | 输入数据寄存器 | | ODR | 0x0C | 输出数据寄存器 | | BSRR | 0x10 | 位设置/清除寄存器 | | BRR | 0x14 | 位清除寄存器 | | LCKR | 0x18 | 锁定寄存器 |
    • "三步进化法"完整演示:
    • 步骤1:裸地址操作(*(uint32_t *)(0x40010800 + 0x0C)
    • 步骤2:结构体宏定义(GPIOA->ODR
    • 步骤3:位宏定义(GPIOA->ODR |= GPIO_ODR_ODR0
    • 代码从 01_led_register/User/main.c 复制
    • 原生代码包含注释"改进1/改进2/改进3",保留并扩展
    • 参考手册 §8 寄存器位域
    • 原理图 LED 电路
  • [ ] 步骤 1.3.5:写入文件

任务 1.4:笔记 03 — GPIO输出:LED控制

来源章节:基础篇 第6章(LED流水灯) 代码项目stm32/02_led_flow_registerstm32/03_led_flow_pro_registerstm32/04_led_flow_pro_hal

  • [ ] 步骤 1.4.1:读取源码

    • 02_led_flow_register/User/main.c
    • 03_led_flow_pro_register/User/main.c
    • 03_led_flow_pro_register/Hardware/LED/led.cled.h
    • 03_led_flow_pro_register/User/Delay.hDelay.c
    • 04_led_flow_pro_hal/User/main.c
    • 04_led_flow_pro_hal/Hardware/LED/led.cled.h
  • [ ] 步骤 1.4.2:撰写笔记 03 内容要点:

    • LED 电路原理(低电平点亮、限流电阻计算)
    • 寄存器版:流水灯三种实现(移位法/查表法/状态机法)
    • 模块化封装:Driver_LED.h + Driver_LED.c
    • Delay 模块:软件延时 vs SysTick 硬件定时差异
    • HAL 版:CubeMX 配置 + HAL_GPIO_WritePin
    • 代码复制:从源文件复制完整 main.c/led.c/led.h,每行注释
    • 位运算注释示例:

      GPIOA->ODR &= ~GPIO_ODR_ODR0;   // &=~ 按位与+取反: 保留其他位不变, 只将ODR0位清0 → PA0输出低电平
      
  • [ ] 步骤 1.4.3:写入文件

任务 1.5:笔记 04 — GPIO输入与NVIC中断系统

来源章节:基础篇 第7章(按键 + 中断) 代码项目stm32/05_key_led_registerstm32/06_key_led_hal

  • [ ] 步骤 1.5.1:读取源码

    • 05_key_led_register/User/main.c + Hardware/KEY/key.c + Hardware/LED/led.c
    • 06_key_led_hal/User/main.c
  • [ ] 步骤 1.5.2:撰写笔记 04 内容要点:

    • 机械按键消抖(硬件RC消抖 / 软件延时10~15ms消抖)
    • 原理图 KEY 电路(PF10 上拉输入)
    • EXTI 外部中断配置流程(GPIO配置→中断线选择→触发条件→NVIC使能→中断服务函数)
    • NVIC 优先级分组(4种组别:NVIC_PriorityGroup_0~4)
    • 中断优先级 = 抢占优先级 + 子优先级
    • 寄存器版代码 + HAL 版代码,分别展示
    • 参考手册 §9 EXTI 寄存器、§8 NVIC 寄存器
  • [ ] 步骤 1.5.3:写入文件

任务 1.6:笔记 05 — 系统时钟RCC详解

来源章节:基础篇 第5章后半部分(RCC时钟树) 代码项目:无需特定项目(系统初始化代码)

  • [ ] 步骤 1.6.1:读取参考资料

    • 参考手册 §7 RCC 寄存器
    • 启动文件中的 SystemInit 调用
    • system_stm32f1xx.c 中的 SystemInit() 源码
    • 原理图晶振电路
  • [ ] 步骤 1.6.2:网络补充 搜索补充:STM32F103 时钟树完整框图、PLL 配置限制

  • [ ] 步骤 1.6.3:撰写笔记 05 内容要点:

    • 时钟树逐级分析:

      HSE(8MHz) → PLL(x9) → SYSCLK(72MHz) → AHB(72MHz) → APB1(36MHz) → APB2(72MHz)
      
    • 5个时钟源详解:HSI/HSE/PLL/LSI/LSE

    • SystemInit() 源码逐行解析(参考手册 §7.2 时钟配置)

    • HAL 版 SystemClock_Config() 对照分析

    • RCC 关键寄存器:CR(时钟控制)/CFGR(时钟配置)/BDCR/CIR

    • 修改主频注意事项(Flash 等待周期需同步调整)

  • [ ] 步骤 1.6.4:写入文件

任务 1.7:笔记 06 — 串口USART通信

来源章节:基础篇 第8章(USART通信) 代码项目stm32/07_usart_register ~ stm32/12_usart_printf_hal

  • [ ] 步骤 1.7.1:读取源码

    • 07_usart_register/User/main.c + Hardware/USART/usart.c
    • 08_usart_iterrupt_register/User/main.c
    • 11_usart_printf_register/User/main.c
    • 12_usart_printf_hal/User/main.c
  • [ ] 步骤 1.7.2:撰写笔记 06 内容要点:

    • 异步串行通信协议帧格式(起始位+数据位+校验位+停止位)
    • 单工/半双工/全双工区别
    • 同步/异步区别
    • 波特率计算公式:Baud = fCK / (16 × USARTDIV)
    • USART 功能框图分析
    • 寄存器版:轮询方式收发 + 中断方式收发
    • printf 重定向原理(Keil 微库 + fputc 重写)
    • HAL 库版:CubeMX 配置 + HAL_UART_Transmit/Receive
    • 参考手册 §18 USART 寄存器(SR/DR/BRR/CR1~CR3)
  • [ ] 步骤 1.7.3:写入文件

任务 1.8:提交批次 1

  • [ ] 步骤 1.8.1:更新 wiki/source-stm32-basic.md

  • [ ] 步骤 1.8.2:追加 wiki/log.md

  • [ ] 步骤 1.8.3:git 提交

    git add .
    git commit -m "ingest: 尚硅谷STM32 基础篇笔记导入(01~06)"
    

批次 2:进阶篇(笔记 07~12)

来源 DOCX上部-基础篇/01_笔记/02_尚硅谷嵌入式技术之STM32单片机(进阶篇)1.0.1.docx 代码目录上部-基础篇/03_代码/stm32/(项目 13~42)

任务 2.1:转换进阶篇 DOCX

  • [ ] 步骤 2.1.1:pandoc 转换

    pandoc "上部-基础篇/01_笔记/02_尚硅谷嵌入式技术之STM32单片机(进阶篇)1.0.1.docx" -t markdown --wrap=none --extract-media="C:\Users\Administrator\AppData\Local\Temp\opencode\stm32_medium_media" -o "C:\Users\Administrator\AppData\Local\Temp\opencode\stm32_medium.md"
    

任务 2.2:笔记 07 — I2C通信与EEPROM 24C02

代码项目stm32/13_i2c_software_registerstm32/14_i2c_hardware_registerstm32/15_i2c_hardware_hal

  • 步骤 2.2.1:读取 DOCX 章节 + 源码
  • 步骤 2.2.2:撰写笔记 07 内容要点:
    • I2C 协议时序逐段分析(起始条件S、从机地址+R/W、应答ACK/非应答NACK、数据字节、停止条件P)
    • 软件模拟 I2C:GPIO 位操作模拟 SCL/SDA 时序
    • 硬件 I2C:状态寄存器分析(SR1/SR2 事件标志)
    • 24C02 EEPROM:页写(最多8字节)、页写限制(跨页自动回卷)、随机读/顺序读
    • 参考手册 §16 I2C 寄存器(CR1/CR2/OAR1/DR/SR1/SR2/TRISE)
    • 代码双版复刻
  • 步骤 2.2.3:写入文件

任务 2.3:笔记 08 — SysTick与通用定时器TIM

代码项目stm32/16_led_twinkle_systick_register ~ stm32/19_led_twinkle_tim_hal

  • 步骤 2.3.1:读取源码
  • 步骤 2.3.2:撰写笔记 08 内容要点:
    • SysTick 寄存器详解:CTRL(第0位ENABLE/第1位TICKINT/第2位CLKSOURCE)、LOAD、VAL、CALIB
    • SysTick 定时时间计算:Time = (LOAD+1) / (AHB/8)
    • TIM 时基单元结构框图:PSC 预分频器 → CNT 计数器 → ARR 自动重装载 → 更新事件(UEV)
    • 溢出时间公式:Tout = (ARR+1) × (PSC+1) / Tclk
    • TIM 与 SysTick 对比(精度/功能/用途)
    • 代码双版
  • 步骤 2.3.3:写入文件

任务 2.4:笔记 09 — TIM高级应用:PWM与输入捕获

代码项目stm32/20_led_breathe_register ~ stm32/27_pwm_n_cycle_hal

  • 步骤 2.4.1:读取源码
  • 步骤 2.4.2:撰写笔记 09 内容要点:
    • PWM 频率 = Tclk / (PSC+1) / (ARR+1);占空比 = CCR / (ARR+1)
    • 呼吸灯原理:逐渐改变 CCR 值 → 改变占空比 → LED 亮度渐变
    • 占空比/周期独立控制(ARR 固定改 CCR vs 两者都变)
    • PWM 模式1 vs 模式2:向上计数时 CNT<CCR 输出有效电平
    • 输入捕获:测量外部信号频率/脉宽
    • TIM_CCMR/TIM_CCER/TIM_CNT/TIM_DIER 寄存器详解
  • 步骤 2.4.3:写入文件

任务 2.5:笔记 10 — DMA数据传输

代码项目stm32/28_dma_mem2mem_register ~ stm32/31_dma_mem2uart_hal

  • 步骤 2.5.1:读取源码
  • 步骤 2.5.2:撰写笔记 10 内容要点:
    • DMA 框图:5个总线矩阵 + 仲裁器 + DMA1(7通道)/DMA2(5通道)
    • 传输流程:外设请求→CPU 让出总线→DMA 传输→完成中断
    • 存储器到存储器(M2M):Flash → SRAM 复制
    • 存储器到外设(M2P):SRAM → USART DR 寄存器(自动发送)
    • DMA 通道映射表: | 通道 | 外设请求 | | TIM1_CH1 | ADC1 | | SPI1_RX/TX | USART1_TX | | ... |
    • 关键寄存器:CCR/CNDTR/CPAR/CMAR
    • 增量模式 vs 固定模式
  • 步骤 2.5.3:写入文件

任务 2.6:笔记 11 — ADC模数转换

代码项目stm32/32_adc_single_register ~ stm32/35_adc_double_hal

  • 步骤 2.6.1:读取源码
  • 步骤 2.6.2:撰写笔记 11 内容要点:
    • SAR ADC 工作原理(逐次逼近:二分法比较)
    • STM32F103ZET6: 3个ADC(ADC1/2/3),12位精度,18个通道
    • 采样时间 = 采样周期 × ADC 时钟周期;采样周期可编程(1.5~239.5 个周期)
    • 转换时间 = 采样时间 + 12.5 个周期(12位精度)
    • 规则组(最多16通道)vs 注入组(最多4通道)
    • 单次转换 / 连续转换 / 扫描模式
    • 定时器触发 ADC + DMA 传输
    • 参考手册 §11 ADC 寄存器(SR/CR1/CR2/SMPR1~2/SQR1~3/DR)
  • 步骤 2.6.3:写入文件

任务 2.7:笔记 12 — SPI通信与FSMC总线

代码项目stm32/36_spi_software_register ~ stm32/42_lcd_hal

  • 步骤 2.7.1:读取源码
  • 步骤 2.7.2:撰写笔记 12 内容要点:
    • SPI 四种模式(CPOL/CPHA 组合)时序图
    • 3线/4线 SPI(NSS 片选管理)
    • 软件模拟 SPI(GPIO 位操作)vs 硬件 SPI(寄存器配置)
    • W25Q64 Flash:读(03h)/写(02h)/擦除(D8h/D7h)/状态寄存器(05h) 指令集
    • FSMC 地址映射:Bank1(0x60000000~0x6FFFFFFF) → NOR/PSRAM/SRAM/LCD
    • FSMC 时序参数配置(地址建立时间/数据保持时间)
    • 参考手册 §23 SPI + §19 FSMC
  • 步骤 2.7.3:写入文件

任务 2.8:提交批次 2

  • 步骤 2.8.1:更新 wiki/source-stm32-medium.md
  • 步骤 2.8.2:追加 wiki/log.md
  • [ ] 步骤 2.8.3:git 提交

    git add .
    git commit -m "ingest: 尚硅谷STM32 进阶篇笔记导入(07~12)"
    

批次 3:高级篇(笔记 13~17)

来源 DOCX下部-高级篇/2-笔记/1.笔记/03_尚硅谷嵌入式技术之STM32单片机(高级篇)2.0.1.docx 代码目录下部-高级篇/3-代码/stm32/(项目 01~25)

任务 3.1:转换高级篇 DOCX

pandoc "下部-高级篇/2-笔记/1.笔记/03_尚硅谷嵌入式技术之STM32单片机(高级篇)2.0.1.docx" -t markdown --wrap=none --extract-media="C:\Users\Administrator\AppData\Local\Temp\opencode\stm32_advanced_media" -o "C:\Users\Administrator\AppData\Local\Temp\opencode\stm32_advanced.md"

任务 3.2:笔记 13 — CAN通信协议与bxCAN外设

代码项目stm32/01_can_test_register ~ stm32/04_can_rx_hal

  • 步骤 3.2.1:读取 DOCX + 源码
  • 步骤 3.2.2:网络补充 CAN 2.0A vs 2.0B 标准补充、CAN FD 后续发展
  • 步骤 3.2.3:撰写笔记 13 内容要点:
    • CAN 协议基础:车用总线、多主从仲裁、广播式通信
    • CAN 数据帧逐位分析:帧起始(SOF) 1位 → 仲裁段(11/29位ID+RTR) → 控制段(IDE+res+r0+DLC) → 数据段(0~8字节) → CRC段(15位CRC+界定符) → ACK段(2位) → 帧结束(EOF 7位)
    • 位时序 & 同步(同步段/传播段/相位缓冲段1/2)
    • bxCAN 外设:3个发送邮箱 + 2个3级深度FIFO + 14个过滤器组
    • 三种工作模式:初始化/正常/睡眠
    • 三种测试模式:静默/环回/环回静默
    • 过滤器配置:列表模式(精确匹配)vs 掩码模式(模糊匹配)
    • 寄存器版:双机通信(一收一发)
    • HAL 版:CubeMX 配置 + HAL_CAN_Start/HAL_CAN_AddTxMessage
    • 参考手册 §22 bxCAN 寄存器
  • 步骤 3.2.4:写入文件

任务 3.3:笔记 14 — 以太网通信与W5500

代码项目stm32/05_ethernet_test_register ~ stm32/09_ethernet_webserver_register

  • 步骤 3.3.1:读取源码
  • 步骤 3.3.2:撰写笔记 14 内容要点:
    • OSI 7层模型 vs TCP-IP 4层模型
    • 以太网 vs 互联网概念区分
    • W5500 芯片:全硬件 TCP/IP 协议栈,SPI 接口,8个独立 Socket
    • W5500 内部架构:SPI口 → 寄存器管理 → 内核 → MAC/PHY → 以太网口
    • 可变长数据帧模式(VDM) vs 固定长数据帧模式(FDM)
    • 官方库移植步骤:wizchip_conf.h → SPI 读写注册函数 → socket API
    • 实验:Ping 通测试 → TCP Server → TCP Client → UDP → WebServer
    • 参考:W5500 数据手册
  • 步骤 3.3.3:写入文件

任务 3.4:笔记 15 — WiFi通信与ESP32-C3

代码项目stm32/10_wifi_test_halstm32/11_wifi_tcp_server_hal

  • 步骤 3.4.1:读取源码
  • 步骤 3.4.2:撰写笔记 15 内容要点:
    • ESP32-C3 规格:RISC-V 32位、2.4GHz WiFi + BLE 5.0
    • AT 指令模式:通过串口发送 AT 指令控制
    • 常用 AT 指令表:AT+CWMODE(Station/AP/Station+AP)、AT+CWJAP(连接WiFi)、AT+CIPSTART(建立TCP)、AT+CIPMODE(透传)、AT+CIPSEND(发送数据)
    • 实验1:AT 指令交互测试
    • 实验2:TCP 通信(AT+CIPSTART 建立连接 → 数据收发)
    • 透传模式 vs 非透传模式
  • 步骤 3.4.3:写入文件

任务 3.5:笔记 16 — BLE低功耗蓝牙

代码项目stm32/12_ble_server_hal

  • 步骤 3.5.1:读取源码
  • 步骤 3.5.2:撰写笔记 16 内容要点:
    • BLE vs 经典蓝牙(功耗/吞吐量/应用场景)
    • BLE 协议栈架构:Physical → Link Layer → HCI → L2CAP → SMP → ATT → GATT → GAP
    • GAP 角色:Broadcaster/Observer/Peripheral/Central
    • GATT 角色:Server/Client,Service → Characteristic → Descriptor 层级
    • BLE 通信流程:广播 → 扫描 → 连接 → 数据收发 → 断开
    • STM32 + BLE 模块(AT 指令控制)
  • 步骤 3.5.3:写入文件

任务 3.6:笔记 17 — LoRa远距离通信

代码项目stm32/13_lora_node_halstm32/14_lora_gateway_hal

  • 步骤 3.6.1:读取源码
  • 步骤 3.6.2:撰写笔记 17 内容要点:
    • LPWAN 技术阵营对比(LoRa vs NB-IoT vs Sigfox)
    • LoRa 扩频技术:SF(扩频因子)、BW(带宽)、CR(编码率) 三参数决定速率/灵敏度
    • CAD(信道活动检测):低功耗监听模式
    • 星型组网拓扑:节点 ↔ 网关 ↔ 服务器
    • AT 指令配置:频率/功率/扩频因子/数据速率
    • 节点 → 网关 数据发送 + 接收确认
  • 步骤 3.6.3:写入文件

任务 3.7:提交批次 3

  • 步骤 3.7.1:更新 wiki/source-stm32-advanced.md
  • 步骤 3.7.2:追加 wiki/log.md
  • [ ] 步骤 3.7.3:git 提交

    git add .
    git commit -m "ingest: 尚硅谷STM32 高级篇笔记导入(13~17)"
    

批次 4:扩展篇(笔记 18~21)

来源 DOCX下部-高级篇/2-笔记/1.笔记/04_尚硅谷嵌入式技术之STM32单片机(扩展篇)1.0.0.docx 代码目录下部-高级篇/3-代码/stm32/(项目 15~28)

任务 4.1:转换扩展篇 DOCX

pandoc "下部-高级篇/2-笔记/1.笔记/04_尚硅谷嵌入式技术之STM32单片机(扩展篇)1.0.0.docx" -t markdown --wrap=none --extract-media="C:\Users\Administrator\AppData\Local\Temp\opencode\stm32_extension_media" -o "C:\Users\Administrator\AppData\Local\Temp\opencode\stm32_extension.md"

任务 4.2:笔记 18 — 电源管理与低功耗模式

代码项目stm32/15_lowpower_sleep_register ~ stm32/20_lowpower_standby_hal

  • 步骤 4.2.1:读取 DOCX + 源码
  • 步骤 4.2.2:撰写笔记 18 内容要点:
    • 电源框图逐区域分析:Vdda(模拟) → Vdd(数字) → 1.8V(内核) → Vbat(备份)
    • 电压调节器三种模式:运转/停止(低功耗)/待机(关闭)
    • 上电复位(POR) vs 掉电复位(PDR):阈值电压及迟滞
    • PVD 可编程电压检测器:PLS[2:0] 选择阈值 → 电压低于阈值产生中断
    • 三种低功耗模式对比: | 模式 | 唤醒源 | 功耗 | 恢复时间 | | 睡眠 | 任意中断/事件 | ~mA | 几μs | | 停止 | 任意EXTI | ~μA | 几μs | | 待机 | RTC/WKUP/NRST | ~nA | 几ms |
    • 睡眠模式:SLEEP-NOW vs SLEEP-ON-EXIT
    • 停止模式:调压器配置(正常工作 vs 低功耗)
    • 待机模式:SRAM/寄存器全部丢失,仅备份域保留
    • 低功耗设计建议(时钟门控/外设禁用)
    • 参考手册 §5 PWR 寄存器
  • 步骤 4.2.3:写入文件

任务 4.3:笔记 19 — BKP备份寄存器与RTC实时时钟

代码项目stm32/21_bkp_test_register ~ stm32/26_rtc_calendar_hal

  • 步骤 4.3.1:读取源码
  • 步骤 4.3.2:撰写笔记 19 内容要点:
    • 备份域电路:Vbat 引脚供电 → RTC + LSE + BKP 寄存器 在 Vdd 断电后继续工作
    • BKP:42 个 16 位备份寄存器 + 防侵入功能(TAMPER)
    • BKP 访问使能:PWR_CR.DBP = 1 后允许读写
    • RTC 三时钟源选择:LSE(32.768KHz) / LSI(~40KHz) / HSE(8MHz 分频)
    • RTC 预分频器:异步分频(7位) + 同步分频(15位) → 精确的 1Hz
    • RTC 闹钟:RTC_ALR 与 RTC_CNT 比较匹配 → 中断
    • Unix 时间戳:1970-01-01 起秒数
    • 日历实验:初始化 → 读取 → 显示 年月日时分秒
    • 参考手册 §6 BKP + §17 RTC
  • 步骤 4.3.3:写入文件

任务 4.4:笔记 20 — 看门狗IWDG与WWDG

代码项目stm32/27_iwdg_test_registerstm32/28_iwdg_test_hal

  • 步骤 4.4.1:读取源码
  • 步骤 4.4.2:撰写笔记 20 内容要点:
    • IWDG 独立看门狗:LSI(~40KHz) 时钟源,完全独立
    • IWDG 超时时间计算:Tout = (RL+1) × 4 × 2^PR / 40KHz
    • IWDG 预分频系数-超时速查表: | PR[2:0] | 分频系数 | 最大超时(RL=0xFFF) | | 000 | 4 | ~0.82s | | 011 | 32 | ~6.55s | | 111 | 256 | ~52.43s |
    • WWDG 窗口看门狗:APB1 时钟,有窗口限制(必须在窗口内喂狗)
    • WWDG 窗口机制:CNT>T[6:0] 时喂狗 → 复位;CNT 减到 0x3F → 复位
    • WWDG 早期唤醒中断(EWI):在 CNT=0x40 时产生中断,可提前处理
    • 两者对比(独立 vs 窗口)和应用场景选择
    • 参考手册 §14 IWDG + §15 WWDG
  • 步骤 4.4.3:写入文件

任务 4.5:笔记 21 — 附录:HAL库架构与Keil MDK深入

来源章节:扩展篇 DOCX 附录

  • 步骤 4.5.1:读取 DOCX 附录章节
  • 步骤 4.5.2:撰写笔记 21 内容要点:
    • HAL 库驱动框架:三层模式(轮询 Polling / 中断 IT / DMA)
    • HAL 库关键宏:UNUSED()、IS_XXX() 参数校验
    • HAL 库初始化流程:HAL_Init() → SystemClock_Config() → MX_GPIO_Init() → MX_USART1_UART_Init()
    • HAL_StatusTypeDef 返回状态
    • Keil MDK 编译四阶段:
    • 编译(armcc/armasm):源文件 → .o 目标文件
    • 链接(armlink):多个 .o + 库 → .axf(.elf)
    • 格式转换(fromelf):.elf → .bin/.hex
    • 下载:烧录到 Flash/ROM
    • 程序在存储器中的分布: | 段 | 含义 | 存储位置 | | Code | 程序代码 | Flash | | RO-data | 只读数据(const) | Flash | | RW-data | 已初始化全局变量 | Flash 初值 + RAM 运行 | | ZI-data | 零初始化全局变量 | RAM |
    • 编译输出信息解读(Code/RO/RW/ZI 大小含义)
  • 步骤 4.5.3:写入文件

任务 4.6:提交批次 4

  • 步骤 4.6.1:更新 wiki/source-stm32-extension.md
  • 步骤 4.6.2:追加 wiki/log.md
  • [ ] 步骤 4.6.3:git 提交

    git add .
    git commit -m "ingest: 尚硅谷STM32 扩展篇笔记导入(18~21)"
    

最终阶段:完成全部提交

  • [ ] 步骤 5.1:更新 wiki/index.md 添加 STM32 章节到索引页,包含全部 21 篇笔记的链接:

    
    ## STM32 嵌入式开发(尚硅谷)
    
    > 来源:[[source-stm32-basic|尚硅谷 STM32 基础篇]] · [[source-stm32-medium|进阶篇]] · [[source-stm32-advanced|高级篇]] · [[source-stm32-extension|扩展篇]]
    
    原始笔记(含 4 种代码 + 通俗解释):
    `raw/Joplin/嵌入式+Linux/STM32学习笔记/`
    
    Wiki 页面:
    - [[stm32-gpio|GPIO 与寄存器操作]]
    - [[stm32-timer|定时器与 PWM]]
    - [[stm32-communication|通信外设串口/I2C/SPI/FSMC]]
    - [[stm32-advanced-comm|物联网通信 CAN/ETH/WiFi/BLE/LoRa]]
    - [[stm32-power|低功耗与电源管理]]
    
  • [ ] 步骤 5.2:更新 wiki/log.md 追加最终日志

    ## 2026-07-15
    
    - `ingest`: 导入尚硅谷 STM32 全套 4 份教程笔记
    
    原始资料归档:
    - `raw/Joplin/嵌入式+Linux/STM32学习笔记/01~21` 共 21 篇笔记
    - `raw/Joplin/嵌入式+Linux/STM32学习笔记/assets/` 精选图片
    
    新建 Wiki 页面:
    - `wiki/source-stm32-basic.md`
    - `wiki/source-stm32-medium.md`
    - `wiki/source-stm32-advanced.md`
    - `wiki/source-stm32-extension.md`
    - `wiki/stm32-gpio.md`
    - `wiki/stm32-timer.md`
    - `wiki/stm32-communication.md`
    - `wiki/stm32-advanced-comm.md`
    - `wiki/stm32-power.md`
    
    更新 `wiki/index.md`、`wiki/log.md`
    
  • [ ] 步骤 5.3:最终全部提交

    git add .
    git commit -m "ingest: 尚硅谷STM32全套笔记导入完成(含基础篇/进阶篇/高级篇/扩展篇 共21篇笔记 + wiki更新)"
    

执行顺序说明

整个项目按 4 批次 + 1 次最终提交 执行,每批次内部按笔记编号顺序串行处理。

每篇笔记的撰写是核心耗时点,遵循模板规格(FreeRTOS 风格的 frontmatter + 原 DOCX 章节结构 + 源码直接复制 + 注释扩展)。

即使某些笔记纯知识型(如 01/05/21 无对应代码),仍需要:

  • 参考手册页码引用
  • 原理图分析
  • 网络知识补充
  • 图片处理