For agentic workers: REQUIRED SUB-SKILL: 使用
subagent-driven-development或executing-plans逐任务执行。复选框- [ ]标记跟踪进度。
目标:将尚硅谷 STM32 全套 4 份 DOCX 笔记 + 配套源码转换为 21 篇结构化 Markdown 笔记,存入 X-Knowledge-Base/raw/Joplin/嵌入式+Linux/STM32学习笔记/
处理方法:每批次:pandoc 转 MD → 按章节拆篇 → 逐篇扩写(参考手册引用 + 原理图引用 + 网络资料补充)→ 从源码复制代码 + 逐行注释 → 图片 API 验证 → git 提交
参考资料:
docs/如何将他人文档整理为LLM-Wiki笔记.mddocs/superpowers/specs/2026-07-15-stm32-silicon-valley-ingest-design.mdX-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 — 追加变更日志每篇笔记的处理步骤一致,以下为每篇的标准操作流程:
来源 DOCX:上部-基础篇/01_笔记/01_尚硅谷嵌入式技术之STM32单片机(基础篇)1.0.2.docx
代码目录:上部-基础篇/03_代码/stm32/
参考手册:上部-基础篇/02_资料/02_stm32官方资料/1-STM32F10x-中文参考手册_最新.pdf
原理图:上部-基础篇/02_资料/05_原理图/STM32-F103ZET6开发板.pdf
[ ] 步骤 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 行,确认章节结构和图片引用
来源章节:基础篇 DOCX 第1~3章(STM32概述 + Keil安装 + 最小系统)
[ ] 步骤 1.2.1:读取相关章节内容 从 pandoc 输出的 MD 中读取 STM32概述、ARM Cortex-M3、命名规则、Keil安装、最小系统等章节
[ ] 步骤 1.2.2:读取参考资料
stm32/01_led_register 的工程结构[ ] 步骤 1.2.3:处理本章图片
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(器件概览)
## 开发板简介
### 开发板实物图

### 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 接线
写入 X-Knowledge-Base/raw/Joplin/嵌入式+Linux/STM32学习笔记/01-STM32概述与开发环境搭建.md
来源章节:基础篇 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 内容要点:
*(uint32_t *)(0x40010800 + 0x0C))GPIOA->ODR)GPIOA->ODR |= GPIO_ODR_ODR0)01_led_register/User/main.c 复制[ ] 步骤 1.3.5:写入文件
来源章节:基础篇 第6章(LED流水灯)
代码项目:stm32/02_led_flow_register、stm32/03_led_flow_pro_register、stm32/04_led_flow_pro_hal
[ ] 步骤 1.4.1:读取源码
02_led_flow_register/User/main.c03_led_flow_pro_register/User/main.c03_led_flow_pro_register/Hardware/LED/led.c、led.h03_led_flow_pro_register/User/Delay.h、Delay.c04_led_flow_pro_hal/User/main.c04_led_flow_pro_hal/Hardware/LED/led.c、led.h[ ] 步骤 1.4.2:撰写笔记 03 内容要点:
位运算注释示例:
GPIOA->ODR &= ~GPIO_ODR_ODR0; // &=~ 按位与+取反: 保留其他位不变, 只将ODR0位清0 → PA0输出低电平
[ ] 步骤 1.4.3:写入文件
来源章节:基础篇 第7章(按键 + 中断)
代码项目:stm32/05_key_led_register、stm32/06_key_led_hal
[ ] 步骤 1.5.1:读取源码
05_key_led_register/User/main.c + Hardware/KEY/key.c + Hardware/LED/led.c06_key_led_hal/User/main.c[ ] 步骤 1.5.2:撰写笔记 04 内容要点:
[ ] 步骤 1.5.3:写入文件
来源章节:基础篇 第5章后半部分(RCC时钟树) 代码项目:无需特定项目(系统初始化代码)
[ ] 步骤 1.6.1:读取参考资料
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:写入文件
来源章节:基础篇 第8章(USART通信)
代码项目:stm32/07_usart_register ~ stm32/12_usart_printf_hal
[ ] 步骤 1.7.1:读取源码
07_usart_register/User/main.c + Hardware/USART/usart.c08_usart_iterrupt_register/User/main.c11_usart_printf_register/User/main.c12_usart_printf_hal/User/main.c[ ] 步骤 1.7.2:撰写笔记 06 内容要点:
Baud = fCK / (16 × USARTDIV)[ ] 步骤 1.7.3:写入文件
[ ] 步骤 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)"
来源 DOCX:上部-基础篇/01_笔记/02_尚硅谷嵌入式技术之STM32单片机(进阶篇)1.0.1.docx
代码目录:上部-基础篇/03_代码/stm32/(项目 13~42)
[ ] 步骤 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"
代码项目:stm32/13_i2c_software_register、stm32/14_i2c_hardware_register、stm32/15_i2c_hardware_hal
代码项目:stm32/16_led_twinkle_systick_register ~ stm32/19_led_twinkle_tim_hal
Time = (LOAD+1) / (AHB/8)Tout = (ARR+1) × (PSC+1) / Tclk代码项目:stm32/20_led_breathe_register ~ stm32/27_pwm_n_cycle_hal
代码项目:stm32/28_dma_mem2mem_register ~ stm32/31_dma_mem2uart_hal
代码项目:stm32/32_adc_single_register ~ stm32/35_adc_double_hal
代码项目:stm32/36_spi_software_register ~ stm32/42_lcd_hal
[ ] 步骤 2.8.3:git 提交
git add .
git commit -m "ingest: 尚硅谷STM32 进阶篇笔记导入(07~12)"
来源 DOCX:下部-高级篇/2-笔记/1.笔记/03_尚硅谷嵌入式技术之STM32单片机(高级篇)2.0.1.docx
代码目录:下部-高级篇/3-代码/stm32/(项目 01~25)
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"
代码项目:stm32/01_can_test_register ~ stm32/04_can_rx_hal
代码项目:stm32/05_ethernet_test_register ~ stm32/09_ethernet_webserver_register
代码项目:stm32/10_wifi_test_hal、stm32/11_wifi_tcp_server_hal
代码项目:stm32/12_ble_server_hal
代码项目:stm32/13_lora_node_hal、stm32/14_lora_gateway_hal
[ ] 步骤 3.7.3:git 提交
git add .
git commit -m "ingest: 尚硅谷STM32 高级篇笔记导入(13~17)"
来源 DOCX:下部-高级篇/2-笔记/1.笔记/04_尚硅谷嵌入式技术之STM32单片机(扩展篇)1.0.0.docx
代码目录:下部-高级篇/3-代码/stm32/(项目 15~28)
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"
代码项目:stm32/15_lowpower_sleep_register ~ stm32/20_lowpower_standby_hal
代码项目:stm32/21_bkp_test_register ~ stm32/26_rtc_calendar_hal
代码项目:stm32/27_iwdg_test_register、stm32/28_iwdg_test_hal
Tout = (RL+1) × 4 × 2^PR / 40KHz来源章节:扩展篇 DOCX 附录
[ ] 步骤 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 无对应代码),仍需要: