Files
STM32F4-Base/Src
wandering1 0f0d002afc docs(ADC): 采样节拍设计说明只留现状,历史决策与台架记录移出
删除(已确定的决策与过程记录,无现状信息量)
- §2 方案选型(方案 A 推荐 / 方案 B 备选与结论)
- §9 变更记录整表(9 行"已实现 / 已验收 / 已落地 / 复核修正"叙事)
- §7.1、§10.3、§11.5 三张台架实测对照表 + 反向验证记录 + boot_log 证据行
- 用户决策与过程编号(Task #32 P1-5 方案 a、B1、P0-1/P0-2、v2.0/v2.2/v2.7/v2.8、
  "规划未预见""原规划写错了"更正叙事)
- §4 代码改造清单(改造已完成)与 §8 / §10.5 的后续规划口吻

保留并补齐现状
- 链路总览(新增 TIM3 同源 Mermaid)· 实现落点表 · TIM3 配置与"为什么是 TIM3"
  (F4 触发清单是硬约束)· ADC1 + DMA 四条硬约束与半区无竞态推导 · 上电自校准
  · TPAFE 侧契约与原子快照 · 就绪门与节拍缺失 fail-safe · 单周期时序
  · 心跳计数逐个判读(含相位伪影为何阈值取 2)· 性能与资源特征
  · 设计边界与已知代价(N-18 无同刻性、滞后一拍、TPAFE 未 DMA 化的前提未定、
  调频能力现状)· 设计铁律
- 468 -> 344 行

顺带修掉文档自相矛盾
- 原 §3 / §4 仍在教人配 TIM6(§11 已改 TIM3)-> 全文统一 TIM3
- 上位需求引用写成 继电保护功能复现规划.md §3.2,实际 L1-1 在 §3.1

连带引用同步(7 文件 8 处)
- App/algo/adc_input.c -> §8;App/task/adc_task.c -> §6;Src/main.c -> §3.3;
  Src/freertos.c -> §9 与 §10(顺带纠正已失效的"ADC 2 ms 忙等"表述,DMA 化后
  单拍取数已零忙等)
- 看门狗设计说明 §6 与 §9 / §4.4;ADC通道映射说明 §4 与 §6;
  继电保护功能复现规划 §3.2
- 其中 2 处活断链 doc-links --all 抓不到(整行含"已消""已实现"状态词被豁免),
  另写脚本按「文档名 + 章节号」全库扫出后修复

门禁
- doc-links --all(非 SDL2 问题 0,可判定 57% -> 58%)与 --sections-strict 通过
- no-mojibake / trailing-whitespace / end-of-file-fixer / id-check 通过;
  task-table / mem-numbers 一致;@build 0 错误 0 警告
- 改动文件均无 BOM、无 CR、U+FFFD = 0;CubeMX 文件的注释改动都落在 USER CODE 区
2026-10-21 11:39:52 +08:00
..
2026-07-19 13:09:06 +08:00

Src/ — CubeMX 生成的源文件

⚠️ 本目录文件由 STM32CubeMX 生成(.ioc 重生成会覆盖),不是自研代码。 但允许在 USER CODE BEGIN/END 标记区之间写自定义代码。

文件一览

文件 生成 作用
main.c CubeMX 程序入口:HAL_Init → SystemClock_Config → 外设初始化 → app_main_init → osKernelStart
freertos.c CubeMX FreeRTOS 任务创建(MX_FREERTOS_Init)+ 任务栈/优先级定义
gpio.c / dma.c / spi.c / i2c.c / usart.c CubeMX 各外设 MX_xxx_Init
stm32f4xx_hal_msp.c CubeMX HAL 外设底层初始化(时钟使能、NVIC、引脚复用)
stm32f4xx_hal_timebase_tim.c 自研覆盖 HAL 时基改用 TIM7(非 SysTick),tick = 1ms
stm32f4xx_it.c CubeMX 中断服务函数(ISR)
system_stm32f4xx.c CMSIS 系统时钟初始化(SystemInit)

⚠️ 修改约定(铁律)

  • 自定义代码只写 USER CODE BEGIN xxx / USER CODE END xxx 标记区之间—— 标记区外的内容在 CubeMX 重新生成时会被无条件覆盖丢失
  • 本目录被 pre-commit 的 C 代码规范检查排除(因是生成代码,风格不受控)
  • Drivers/BSP/ 才是纯手工代码区;应用逻辑放 App/

关键点

  • HAL 时基 = TIM7,不是 SysTick;FreeRTOS 用 SysTick 之外的方式,tick = 1ms
  • NVIC 4 位优先级分组;外设中断优先级 ≥ 5(0~4 预留给 FreeRTOS)
  • 时钟:HSE 8MHz → PLL M=4/N=168/P=2 → 168MHz

相关文档

  • 架构全景:docs/架构设计/项目架构总览.md
  • 启动顺序:docs/架构设计/项目启动顺序管理.md
  • 任务表(唯一事实源 = freertos.c):根 README.md