ADC 通道映射表建档(V0.1 语义固化)+ .ioc 启用 ADC1 九通道

新增 docs/硬件平台/ADC通道映射说明.md:17 路语义↔网名↔通道号权威映射
语义:UA/UB/UC/UN=AIN1~4、IA/IB/IC/IN=AIN8~11、V_ZL2=温度,其余备用
勘误:PC4=ADC12_IN14(非 IN12);PB0=ADC12_IN8(V0.0 B5 定性有误)
勘误:PC5=ADC12_IN15;网名 ADC17 承载 UB,不是 V_ZL2
.ioc:PA0~PA7/PC4 → ADC1_IN0..7/IN14,Rank1~9 + 144 cycles + 软件触发
.ioc 键名与取值逐条比对 CubeMX 自带 DB(aditf2_v1_1_Cube)后写入
尚未 Generate Code:adc.c 与 HAL adc 驱动未入库,生成后需注册 uvprojx
This commit is contained in:
2026-10-09 17:17:32 +08:00
parent ed463716f6
commit 6f3891a6b9
8 changed files with 241 additions and 17 deletions
+1 -1
View File
@@ -206,7 +206,7 @@ docs/
| 位置 | 内容 |
|---|---|
| [`待处理内容.md`](待处理内容.md) | **统一待办登记簿**——审计缺陷(P-x)+ 台架/审计观察(N/S/T-x)+ 测试与架构专项(S1x/A-x)+ 任务排序(阶段 A/B/C/D)+ 诊断基线;只保留未闭环项,完成即删 |
| `硬件平台/` | 网表详细分析报告与语义图(V0.0 / V0.1) |
| `硬件平台/` | 网表详细分析报告与语义图(V0.0 / V0.1);**[`ADC通道映射说明.md`](硬件平台/ADC通道映射说明.md)——V0.1 十七路 ADC 语义/网名/通道号权威映射表(固件取数、UI 显示、自检注入以此为准)** |
| `芯片手册/` | 外部芯片数据手册转录(CH395F / GD5F2GQ5UE / SD2506 / TPAFE5160 / RTL8305NBI 等) |
| `images/` | 文档技术配图(`.svg` 产物,由 `tools/arch_diagram/`、`tools/refgraph/` 生成) |
@@ -447,7 +447,7 @@ sequenceDiagram
- **现状**:`tpafe5160_init()` 与 `tpafe5160_start_conv_irq()` 在启动序列调用一次;**全仓库无周期性 CONVST 重触发**;`data_ready`/`get_buf` 无消费者(`adc_task.c` 为空桩,且未在 `freertos.c` 创建)。
- **后果**:上电后仅采集 1 个样本,此后数据永久陈旧。
- **待确认(阻塞项 B0)**:① 采集是否持续 ② 采样率/通道 ③ 转发目标 ④ `APP_ADC_ENABLE` 语义。
- **实现约束**(见 §9):周期 CONVST 重触发 + `adc_task` 消费;**先修原子快照 API**(否则接入即撕裂);栈预算核算;V0.1 通道映射表重写(13/17 路变化,第 17 路用 `ADC_CHANNEL_12`)。
- **实现约束**(见 §9):周期 CONVST 重触发 + `adc_task` 消费;**先修原子快照 API**(否则接入即撕裂);栈预算核算;V0.1 通道映射已固化 → `docs/硬件平台/ADC通道映射说明.md`(13/17 路置换;语义 UA/UB/UC/UN、IA/IB/IC/IN、V_ZL2=温度,其余备用;网名 ADC17 = PC4 用 `ADC_CHANNEL_14`,**不是** `ADC_CHANNEL_12`)。
### 5.10 RS-485 采集(FR-RS485)⬜ 待实现
+2 -2
View File
@@ -69,8 +69,8 @@
| 序 | 任务 | 前置 | 说明 |
|---|---|---|---|
| **B0** | **产品定义确认**(阻塞项) | — | 需甲方明确:① 采集是否持续 ② 采样率/通道 ③ 转发目标(MODBUS RTU?上行 TCP?)④ `APP_ADC_ENABLE`/`APP_RS485_ENABLE` 语义。**B1/B2 的规模完全取决于此** |
| **B1** | **ADC 采集链路实现**(消化 P1-1、E-58) | B0 + **E-59 门禁** | 周期 CONVST 重触发 + `adc_task` 消费 `get_buf`;**先修 E-58**(原子快照 API,否则接入即撕裂);栈预算核算(两任务未入 `freertos.c` 栈表) |
| **B0** | **产品定义确认**(阻塞项) | — | 需甲方明确:① 采集是否持续 ② 采样率(**通道语义已于 2026-10-09 确认并固化 → `docs/硬件平台/ADC通道映射说明.md`**:UA/UB/UC/UN=`AIN1~4`、IA/IB/IC/IN=`AIN8~11`、V_ZL2=温度、其余 8 路备用;主板只做监视/辅助测量,计量在子板) ③ 转发目标(MODBUS RTU?上行 TCP?)④ `APP_ADC_ENABLE`/`APP_RS485_ENABLE` 语义。**B1/B2 的规模完全取决于此** |
| **B1** | **ADC 采集链路实现**(消化 P1-1、E-58) | B0 + **E-59 门禁** | 周期 CONVST 重触发 + `adc_task` 消费 `get_buf`;**先修 E-58**(原子快照 API,否则接入即撕裂);栈预算核算(两任务未入 `freertos.c` 栈表);**取数必须按 `docs/硬件平台/ADC通道映射说明.md`**(TPAFE `buf[2]=IA`/`buf[5]=UN`/`buf[6]=UA`;STM32 侧 9 路含 UB/UC/IB/IC/IN/温度,需先启用 `HAL_ADC_MODULE_ENABLED`,网名 ADC17=PC4 用 `ADC_CHANNEL_14`) |
| **B2** | **RS-485 采集链路实现**(消化 E-50、E-49) | B0 + **E-59 门禁** | 双缓冲 + 序号(防包撕裂)+ DE 收尾(超时路径等 TC)+ 协议状态机(`App/protocol/` 正是为此预留) |
| **B3** | **E-59 门禁固化入 `AGENTS.md`** | — | 把"接消费者前必须先修 E-36/E-44/E-45/E-58 + 栈预算"写成强制门禁,与"改栈前跑 `stack_report.py`"同级。**这是防止 B1/B2 带缺陷上线的关键** |
+143
View File
@@ -0,0 +1,143 @@
# V0.1 ADC 通道映射表(权威口径)
> **一句话结论**:V0.1 共 **17 路**模拟采样——**8 路进 TPAFE5160**(16 位、8 通道同步、±10 V 双极性)、**9 路进 STM32 内部 ADC**(12 位、顺序采样、0~3.3 V 单极性)。网名 `AINn`、板级网名 `ADCn`、转换器通道号**三套编号互不等价**(V0.1 有 13/17 路被置换),任何代码 / UI 显示 / 自检注入**必须以本表为准,不得假设 `AINn = ADCn`**。
>
> 语义分配由硬件于 **2026-10-09** 确认;网名与电阻对应关系取自 [`V0.1.tel`](V0.1.tel)(第 227~262 行),引脚号取自数据手册 LQFP144 引脚表([`../芯片手册/stm32f405rg.md`](../芯片手册/stm32f405rg.md))。
---
## 1. 语义分配(2026-10-09 硬件确认)
| 语义 | 网名 | 类别 | 说明 |
|---|---|---|---|
| **UA** | AIN1 | 电压 | A 相电压 |
| **UB** | AIN2 | 电压 | B 相电压 |
| **UC** | AIN3 | 电压 | C 相电压 |
| **UN** | AIN4 | 电压 | 零线(中性线)电压 |
| **IA** | AIN8 | 电流 | A 相电流 |
| **IB** | AIN9 | 电流 | B 相电流 |
| **IC** | AIN10 | 电流 | C 相电流 |
| **IN** | AIN11 | 电流 | 零线电流 |
| **温度** | V_ZL2 | 温度 | 温度检测模拟采样 |
| 备用 | AIN5 / AIN6 / AIN7 / AIN12 / AIN13 / AIN14 / AIN15 / V_ZL1 | — | **未使用**(悬空或不用),软件侧一律标 `RESERVED`,不参与采集与上报 |
**设计口径(重要)**:本产品的**电能计量在子板(计量模块)完成**,主板 ADC 只做**监视 / 辅助测量**。因此 8 路电气量被有意分到两片转换器上(UA/UN/IA 走 TPAFE,UB/UC/IB/IC/IN 走 STM32 12 位 ADC)——**这不是缺陷,是有意分配**,不要按"8 路电气量应全部走 TPAFE"去"修正"它。
---
## 2. 三套编号,别混
| 编号族 | 含义 | 出现位置 |
|---|---|---|
| `AINn`(n=1~15)、`V_ZL1/2` | **子板侧网名**:语义挂在这一层(UA/UB/…/温度) | 连接器 U5 各脚 → 串联电阻 |
| `ADCn`(n=1~17) | **主板 ADC 输入网名**:电阻另一侧、滤波电容、转换器输入脚 | 电阻 → 滤波器 → U3 / U17 |
| 转换器通道号 | 软件真正要用的编号:TPAFE `ch1~ch8`(= 驱动 `buf[0..7]`)/ STM32 `ADC_CHANNEL_x` | 固件、UI、自检 |
V0.1 相对 V0.0 把 `AINn ↔ ADCn` 的电阻对应关系置换了 13 路(见 [`V0.1_网表详细分析报告.md`](V0.1_网表详细分析报告.md) §6),所以**网名编号完全不能当通道号用**(例:`AIN1`(UA) 实际落在 TPAFE 第 7 通道)。
---
## 3. 完整映射表(17 路)
TPAFE5160(U3)通道脚:`AIN_1P`=49 / `AIN_2P`=51 / `AIN_3P`=53 / `AIN_4P`=55 / `AIN_5P`=57 / `AIN_6P`=59 / `AIN_7P`=61 / `AIN_8P`=63。
STM32(U17)为 LQFP144 脚号。
| 语义 | 网名 | U5 脚 | 串联电阻 | 板级网名 | 转换器 | 转换器脚 / MCU 脚 | **代码通道** | 状态 |
|---|---|---|---|---|---|---|---|---|
| **UA** | AIN1 | A3 | R31 | ADC7 | TPAFE5160 | U3.61 = `AIN_7P` | `buf[6]`(ch7) | 在用 |
| **UB** | AIN2 | B7 | R52 | ADC17 | STM32 ADC123 | U17.44 = **PC4** | `ADC_CHANNEL_14` | 在用 |
| **UC** | AIN3 | C14 | R20 | ADC12 | STM32 ADC123 | U17.37 = PA3 | `ADC_CHANNEL_3` | 在用 |
| **UN** | AIN4 | A4 | R28 | ADC6 | TPAFE5160 | U3.59 = `AIN_6P` | `buf[5]`(ch6) | 在用 |
| 备用 | AIN5 | B6 | R12 | ADC1 | TPAFE5160 | U3.49 = `AIN_1P` | `buf[0]`(ch1) | RESERVED |
| 备用 | AIN6 | C13 | R5 | ADC9 | STM32 ADC123 | U17.34 = PA0 | `ADC_CHANNEL_0` | RESERVED |
| 备用 | AIN7 | A5 | R23 | ADC4 | TPAFE5160 | U3.55 = `AIN_4P` | `buf[3]`(ch4) | RESERVED |
| **IA** | AIN8 | B5 | R19 | ADC3 | TPAFE5160 | U3.53 = `AIN_3P` | `buf[2]`(ch3) | 在用 |
| **IB** | AIN9 | A8 | R49 | ADC15 | STM32 ADC123 | U17.42 = PA6 | `ADC_CHANNEL_6` | 在用 |
| **IC** | AIN10 | C9 | R46 | ADC10 | STM32 ADC123 | U17.35 = PA1 | `ADC_CHANNEL_1` | 在用 |
| **IN** | AIN11 | C10 | R48 | ADC11 | STM32 ADC123 | U17.36 = PA2 | `ADC_CHANNEL_2` | 在用 |
| 备用 | AIN12 | B3 | R13 | ADC8 | TPAFE5160 | U3.63 = `AIN_8P` | `buf[7]`(ch8) | RESERVED |
| 备用 | AIN13 | A6 | R17 | ADC2 | TPAFE5160 | U3.51 = `AIN_2P` | `buf[1]`(ch2) | RESERVED |
| 备用 | AIN14 | C12 | R45 | ADC13 | STM32 ADC123 | U17.40 = PA4 | `ADC_CHANNEL_4` | RESERVED |
| 备用 | AIN15 | B4 | R26 | ADC5 | TPAFE5160 | U3.57 = `AIN_5P` | `buf[4]`(ch5) | RESERVED |
| 备用 | V_ZL1 | A7 | R51 | ADC16 | STM32 ADC123 | U17.43 = PA7 | `ADC_CHANNEL_7` | RESERVED |
| **温度** | V_ZL2 | C11 | R47 | ADC14 | STM32 ADC123 | U17.41 = PA5 | `ADC_CHANNEL_5` | 在用 |
**汇总**:TPAFE 8 路 = AIN5/13/**8**/7/15/**4**/**1**/12;STM32 9 路 = AIN6/**10**/**11**/3/14/**9**/**2**/V_ZL1/**V_ZL2**(粗体为在用通道)。
---
## 4. TPAFE 侧:读出顺序 → 驱动缓冲区下标
`tpafe5160_read_all()` / EXTI 自动读取按 RD 时序连续读 8 次,`FRSTDATA` 标记第一通道,故 **`buf[0..7]` = `ADC1..ADC8` 网名 = TPAFE `ch1..ch8`**:
| `buf[i]` | 板级网名 | TPAFE 通道 | 语义 |
|---|---|---|---|
| 0 | ADC1 | ch1 | RESERVED(AIN5) |
| 1 | ADC2 | ch2 | RESERVED(AIN13) |
| **2** | ADC3 | ch3 | **IA** |
| 3 | ADC4 | ch4 | RESERVED(AIN7) |
| 4 | ADC5 | ch5 | RESERVED(AIN15) |
| **5** | ADC6 | ch6 | **UN** |
| **6** | ADC7 | ch7 | **UA** |
| 7 | ADC8 | ch8 | RESERVED(AIN12) |
> 消费侧**必须经语义映射表取数**(`UA → buf[6]`),不要按"buf[0]=UA"这类直觉下标写代码。
---
## 5. STM32 侧:网名 → 引脚 → 代码通道宏
| 板级网名 | U17 脚 | 引脚 | **代码宏** | 语义 |
|---|---|---|---|---|
| ADC9 | 34 | PA0 | `ADC_CHANNEL_0` | RESERVED(AIN6) |
| ADC10 | 35 | PA1 | `ADC_CHANNEL_1` | **IC** |
| ADC11 | 36 | PA2 | `ADC_CHANNEL_2` | **IN** |
| ADC12 | 37 | PA3 | `ADC_CHANNEL_3` | **UC** |
| ADC13 | 40 | PA4 | `ADC_CHANNEL_4` | RESERVED(AIN14) |
| ADC14 | 41 | PA5 | `ADC_CHANNEL_5` | **温度(V_ZL2)** |
| ADC15 | 42 | PA6 | `ADC_CHANNEL_6` | **IB** |
| ADC16 | 43 | PA7 | `ADC_CHANNEL_7` | RESERVED(V_ZL1) |
| **ADC17** | **44** | **PC4** | **`ADC_CHANNEL_14`** | **UB** |
> ⚠️ **`ADC17` 网名 ≠ `ADC_CHANNEL_17`**。PC4 在 F407 上是 `ADC123_IN14`,代码必须写 `ADC_CHANNEL_14`;`ADC_CHANNEL_12` 是 **PC2(pin 30)**,写错就读到另一只脚。
**CubeMX 侧标签(2026-10-09 已写入 `STM32F407-Demo.ioc`,格式 `板级网名_语义`)**:`ADC9_RES` / `ADC10_IC` / `ADC11_IN` / `ADC12_UC` / `ADC13_RES` / `ADC14_TEMP` / `ADC15_IB` / `ADC16_RES` / `ADC17_UB`(9 脚信号已设为 `ADC1_IN0..IN7` + `ADC1_IN14`)。
**引脚可用性核查(2026-10-09)**:`STM32F407-Demo.ioc` 中 PA0~PA7、PC4 **此前均未分配**(PC5 = LED1,与 ADC 无关)→ 这 9 路做模拟输入无冲突,现已配给 ADC1。PA4/PA5 兼 `DAC_OUT1/2`,作模拟输入期间须保持 DAC 关闭(当前固件未启用 DAC ✓);PA4/PA5/PA6/PA7 的 SPI1 复用未使用(SPI1 走 PB3/PB4/PB5)✓。
---
## 6. 对既有文档的勘误(2026-10-09,依据 DS8626 引脚表)
1. **PC4 的通道号**:`docs/硬件平台/V0.1_网表详细分析报告.md` §4.6 / §9-3 / §11 与 `docs/硬件平台/V0.0_网表详细分析报告.md` B5 处写的 "PC4 = `ADC12_IN12`、代码用 `ADC_CHANNEL_12`" **有误**——DS8626 引脚表:PC4 = LQFP144 pin 44,附加功能 **`ADC12_IN14`**;`ADC_CHANNEL_12` 对应 **PC2(pin 30)**。正确写法:**`ADC_CHANNEL_14`**。
2. **"PB0 非 ADC 输入脚" 不成立**:PB0 = LQFP144 pin 46 = **`ADC12_IN8`**(PB1 = pin 47 = `ADC12_IN9`)。所以 V0.0 把 `ADC17` 接 pin 46(PB0)**电气上是有效通道**,并非"死通道"。V0.1 改到 pin 44(PC4)的**实际收益是解除与 LED2(PB0)的复用**,不是"救活无效通道"——V0.0 报告 B5 的定性需按此理解。
---
## 7. 实现注意事项(当前固件现状,2026-10-09)
| 项 | 现状 | 影响 |
|---|---|---|
| STM32 ADC 外设 | **`.ioc` 已配 ADC1(9 通道 / Rank 1~9 / 采样 144 cycles / 软件触发 / Scan=ENABLE),但尚未生成代码**:`Inc/stm32f4xx_hal_conf.h` 的 `HAL_ADC_MODULE_ENABLED` 仍是注释,`Src/adc.c` 与 HAL adc 驱动(`stm32f4xx_hal_adc.c/_ex.c`)不在仓库(HAL 为裁剪子集) | 运行时仍采不到;须在 CubeMX 6.17.0 + FW_F4 V1.28.3 里 Generate Code,再把新文件注册进 `MDK-ARM/*.uvprojx` 并 `@build` |
| ADC 时钟(生成后注意) | CubeMX 对 F4 固定生成 `ADC_CLOCK_SYNC_PCLK_DIV2` → ADCCLK = APB2/2 = **42 MHz**,超 DS 表 67 的 36 MHz 上限 | 代码侧改 `__HAL_RCC_ADC_CONFIG(RCC_ADCPCLK2_DIV4)`(21 MHz,放 `USER CODE` 区或 `MX_ADC1_Init()` 之后);按 144+12 cycles 算 ≈ 7.4 µs/通道、9 通道一轮 ≈ 67 µs |
| `adc_task` | **空桩**:`App/task/adc_task.c` 只 `osDelay(1000)`,且任务未在 `Src/freertos.c` 创建 | 无消费者,数据路径死(登记簿 P1-1) |
| TPAFE 采样触发 | `tpafe5160_start_conv_irq()` 仅在 `app_main_init` 调一次,**无周期 CONVST 重触发** | 只采到一帧,无连续波形 |
| 前端偏置 | 每路 1k 串联 + 1k 到 `*_GND` + 滤波 C,**无中点偏置** | STM32 侧只能测 **0~3.3 V 单极性**,交流量负半周被削顶;主板侧只做监视可接受,若要算 RMS/功率需硬件补偏置或明确算法口径 |
| TPAFE 量程 | 默认 ±5 V(RANGE 接 GND),16 位二进制补码,LSB ≈ 152.59 µV | 用 `tpafe5160_to_voltage()` 换算 |
| 双缓冲撕裂 | 审计项 **E-58**(`docs/问题记录/错误码传播审计.md`):`get_buf` 换缓冲 + 任务抢占 → 8 通道可能失去同一性 | 实现消费者时必须处理(一次帧内原子取用) |
---
## 8. 逐通道验证方法(上板自检口径)
1. **TPAFE 侧**:对目标 `AIN` 注入 1 V DC → 观察对应 `buf[i]` 变化(UA→`buf[6]`、UN→`buf[5]`、IA→`buf[2]`),同时 U3.14 `BUSY` 有脉冲;**语义与下标不符即映射错**。
2. **STM32 侧**:对目标引脚(如 PC4=UB)注入 0.5 V → 读 `ADC_CHANNEL_14` 应变化;若不变而相邻通道变化 → 通道宏写错(见 §5 警告)。
3. **备用通道**:RESERVED 路不接入任何语义,UI 与上报里不得出现;若实测有读数漂移,只记录不消费。
---
## 9. 变更记录
| 日期 | 内容 |
|---|---|
| 2026-10-09 | 建档:固化 V0.1 语义分配(UA/UB/UC/UN、IA/IB/IC/IN、V_ZL2=温度、其余备用)与 17 路端到端映射;确立"主板只做监视/辅助测量、计量在子板"口径;勘误 PC4 通道号(IN12→IN14)与 PB0 定性(=IN8) |
@@ -5,7 +5,7 @@
> **2026-09-20 数据手册复核(DS8626,stm32f405rg.md)更正声明**:
> 1. 原文"封装引脚编号与数据手册图记忆不符"的判定**撤销**——网表脚号 = 数据手册 LQFP144 脚号(逐脚吻合,见附录 C-C1/C2);§3.3-3 实物抽查 3 脚由手册证据关闭;
> 2. **新核出 B4**:SWD 的 SWCLK 误接 U17.104 = **PA12**(无 JTAG 功能)→ **V0.0 实板 SWD 不通**(实测证实:V0.0 实板无法调试,飞线至 PA14 后调通);同因 SDCKE 误占 109 = PA14(两线脚位互换)。V0.1 已修复;
> 3. **新核出 B5**:ADC17 输入(V_ZL2)接 U17.46 = **PB0(非 ADC 输入脚**,F407 ADC 输入仅 PA0~7/PC0~7)→ 该通道电气上死(潜伏,代码未读);V0.1 改 44 = PC4 = IN12 修复;
> 3. **新核出 B5**:ADC17 输入(V_ZL2)接 U17.46 = **PB0** → 当时判为"非 ADC 输入脚、通道电气上死"(**2026-10-09 二次勘误:PB0 = `ADC12_IN8`,确为 ADC 输入脚**,该通道电气上有效,实际问题是与 LED 复用 + 代码未读);V0.1 改 44 = PC4 = **`ADC12_IN14`**(代码用 `ADC_CHANNEL_14`,原文写 IN12/`ADC_CHANNEL_12` 有误);
> 4. 5 处文字表述更正(INT=PE5 非 PA0、EXTKI=PE2/3/4 非 PC13/14/15、存储"SD 卡"实为 SPI NAND、B3②"SPI 流量干扰"不成立、"USART5"应为 UART5),详见**附录 C**。
>
> **文档结构**:§1 结论速览 → §2 总体架构 → §3 问题清单 → §4 逐芯片详解 → §5 改进方向 → §6 最优先三件事 → 附录 A 勘误记录 / 附录 B 手册清单。
@@ -59,7 +59,7 @@
| B2 | 3.3V 主轨 SOT-223 LDO 余量 + 板级无独立 5V 输入 | V0.1:主轨改 buck + 5V 排针 |
| B3 | U18 桥:11 个悬空 GPIO → 子板输出线电平不定;另有 2 条"SPI1"名义线(实为悬空线,2026-09-20 更正)→ 子板 EXTKO1/2 | **① 代码配置 13 个 GPIO(无需改板)** ② ~~V0.1 改线~~(更正后无需,附录 C-C6) |
| **B4** | **SWD 的 SWCLK 误接 U17.104 = PA12**(PA12 无 JTAG 功能,SWD 仅认 PA13/PA14)→ **V0.0 实板 SWD 不通**(实测:实板无法调试,飞线至 PA14 后调通);同因 SDCKE 误占 109 = PA14(两线脚位互换) | **V0.1 已修复**:SWCLK→109 = PA14、SDCKE→28 = PC2 |
| **B5** | **ADC17 输入(V_ZL2)接 U17.46 = PB0**——PB0 非 ADC 输入脚(F407 ADC 输入仅 PA0~PA7/PC0~PC7)→ 该通道电气上死(潜伏:代码当时未读此通道) | **V0.1 已修复**:→44 = PC4 = ADC12_IN12(代码实现该通道时用 `ADC_CHANNEL_12`) |
| **B5** | **ADC17 输入(V_ZL2)接 U17.46 = PB0**——原判"PB0 非 ADC 输入脚 → 通道电气上死"**已于 2026-10-09 勘误**:PB0 = `ADC12_IN8` 是有效 ADC 脚;实际问题 = 与 LED 复用 + 代码未读(潜伏) | **V0.1 已改**:→44 = PC4 = `ADC12_IN14`(代码实现该通道时用 `ADC_CHANNEL_14`;原文写 IN12 / `ADC_CHANNEL_12` 有误) |
### 1.4 BOM/网表清理(2 项,详情 §3.2)
@@ -135,7 +135,7 @@ flowchart LR
| B2 | 3.3V 主轨 SOT-223 LDO;板级无独立 5V 输入 | 峰值电流/热余量存疑;单独调试必须依赖子板线缆 | 主轨改 buck(顺带并掉 G3.3V 双轨偏移);加 5V 调试排针 + TVS |
| B3 | U18 桥(AIP74LVC16245,strapping 锁定 A→B 恒使能):A 侧 11 个 GPIO(H16/V15/J3/F3/R16/K3/DQM0/WAIT1/DQM1/RAS/SDCKE)未配置悬空 → 子板 LED×4/RELAY_STO/HT×5/EXTKO3 电平不定;另 2 条"SPI1"名义线(U17.77/78 = PD8/PD9,**2026-09-20 更正:无 SPI1 AF、代码未配置,实为悬空线**)→ 子板 EXTKO1/2 | 子板输出态(含继电器)随机 | ① 代码显式配置 **13 个** GPIO 为安全默认电平(LED 灭/继电器断/告警静默,**无需改硬件**)② ~~V0.1 改线~~(2026-09-20 更正:该 2 线无 SPI1 AF 且无驱动源,"SPI 流量干扰"不成立,无需改线) |
| **B4** | SWD 的 SWCLK 接 U17.104 = **PA12**(无 JTAG 功能;SWD 仅认 PA13/PA14)→ 实板 SWD 不通(**实测证实:V0.0 实板无法调试,飞线至 PA14 后调通**);同因 SDCKE 占 109 = PA14(脚位互换,见 §4.6) | V0.0 板 SWD 烧录/调试不可用(飞线绕过);ST-LINK 常规 2 线流程失效 | **V0.1 已修复**:SWCLK→109 = PA14(JTCK-SWCLK)、SDCKE→28 = PC2 |
| **B5** | ADC17 输入(V_ZL2)接 U17.46 = **PB0**——非 ADC 输入脚(F407 ADC 输入仅 PA0~PA7、PC0~PC7) | 第 17 路模拟输入电气上无效(潜伏:代码未读该通道,开机标记照样 PASS——典型"静默死亡") | **V0.1 已修复**:→44 = PC4 = ADC12_IN12(代码实现时用 `ADC_CHANNEL_12`) |
| **B5** | ADC17 输入(V_ZL2)接 U17.46 = **PB0**——原判"非 ADC 输入脚"**已于 2026-10-09 勘误**:PB0 = `ADC12_IN8` 是有效 ADC 脚 | 第 17 路当时未被代码读取(开机标记照样 PASS——典型"静默死亡"),且与 LED 复用 | **V0.1 已改**:→44 = PC4 = `ADC12_IN14`(代码实现时用 `ADC_CHANNEL_14`;原文写 IN12 / `ADC_CHANNEL_12` 有误) |
### 3.2 BOM/网表清理(2 项,V0.1)
@@ -322,7 +322,7 @@ flowchart LR
| VDDA | C77/C78(L6 后) | 模拟电源 | ✓ |
| TPAFE 参考 | C37(REFCAPA/B 短接), C39(REFIN), C41/42(REGCAP) | 内部基准 | ✓ 完整 |
| RS232 泵电容 | C68-C71(0603) | TPT3232E 电荷泵(C1:1-3、C2:4-5、V+:2→GND、V-:6→GND) | C1/C2/V- 与手册一致;V+ 储能接 GND(手册典型电路接 VCC,稳态等价);值网表未标,实板对照手册 Table 1 核 |
| ADC 输入前端 | 15×(1k 串联 + 1k 到 AIN_nGND + 滤波 C) | 源阻抗匹配(手册推荐做法,非分压)✓;**2026-09-20 数据手册复核新增**:STM32 侧 9 路中 ADC9~16 → PA0~PA7(IN0~IN7)✓,**ADC17(V_ZL2)→ U17.46 = PB0,非 ADC 输入脚(F407 ADC 输入仅 PA0~7/PC0~7)→ 该通道电气上无效(B5,潜伏缺陷);V0.1 改 44 = PC4 = IN12 修复** | ⚠ **B5** |
| ADC 输入前端 | 15×(1k 串联 + 1k 到 AIN_nGND + 滤波 C) | 源阻抗匹配(手册推荐做法,非分压)✓;**2026-09-20 数据手册复核新增**:STM32 侧 9 路中 ADC9~16 → PA0~PA7(IN0~IN7)✓,**ADC17(V_ZL2)→ U17.46 = PB0 = `ADC12_IN8`**(**2026-10-09 勘误:PB0 确为 ADC 输入脚,原判"电气上无效"不成立**——实际问题是与 LED 复用 + 代码未读,B5 属潜伏);V0.1 改 44 = PC4 = **`ADC12_IN14`** | ⚠ **B5** |
| 上拉/下拉 | R40(NRST), R29(REFSEL), R43(GD_CS), R35(DE/RE), R22(PAR/SER), R6(DIS_EEE), R24(FIRSTDATA), R4(TXD 下拉), R44/50/53(KEY1-3), R36/37/39/54-58(strapping/LED) | strapping + 默认态 | ✓ |
| 4.7k×5 | R24(U3 FRSTDATA 上拉) + R38/R41(U18.1/24=1DIR/2DIR 上拉 3.3V) + R39/R42(U18.48/25=1OE/2OE 下拉 GND) | ADC 首数据线默认态 + 桥片模式锁定(A→B 单向、恒使能) | ✓ 已按手册功能表核实 |
| LED 限流 | R1/7/8(470Ω), R59-R64(1k), R33 | 指示 LED | ✓ |
@@ -432,7 +432,7 @@ flowchart LR
| C-6 | §1.3/§2.2/§3.1/§4.1/§4.6/§5.3 | "SPI1 MISO/MOSI(U17.77/78,活动信号,与 NAND 共用)→ 子板 EXTKO1/2 受 SPI 流量干扰;V0.1 需改线" | 77/78 = **PD8/PD9,无 SPI1 的 AF**(SPI1_MOSI/MISO 仅 PA7/PB5/PC12,PB5 已用于 NAND SPI1),代码从未配置 → 实为**未配置悬空线**,"SPI 流量干扰"不成立;无需改线,并入 B3 代码侧 13 线安全电平 | DS8626 Table 9 + .ioc |
| C-7 | §4.1 | "VDDA(pin32/33 经 L6)" | 精确化:32 = **VREF+**、33 = VDDA(均经 L6 → 3.3V,VREF+=VDDA 为标准接法 ✓);31 = VSSA → AGND ✓;6 = VBAT、143 = PDR_ON → 3.3V(片内 LDO 开启 ✓);71/106 = VCAP1/VCAP2 → C94/C79 → GND(**值未标注,手册要求 1~4.7µF 低 ESR,待核**) | DS8626 Table 7 + 网表 |
| C-8 | 新增 **B4** | ——(初版未发现) | **SWD 的 SWCLK 接 104 = PA12(无 JTAG 功能)→ V0.0 实板 SWD 不通**(实测:实板无法调试,飞线至 PA14 调通);同因 SDCKE 占 109 = PA14(两线脚位互换);V0.1 已修复(SWCLK→109 = PA14、SDCKE→28 = PC2) | DS8626 Table 7/9 + 用户实测 |
| C-9 | 新增 **B5** | ——(初版未发现) | **ADC17(V_ZL2)接 46 = PB0,非 ADC 输入脚**(F407 ADC 输入仅 PA0~7/PC0~7)→ 该通道电气上死(潜伏,代码未读);V0.1 改 44 = PC4 = ADC12_IN12 修复(代码实现用 `ADC_CHANNEL_12`) | DS8626(ADC 通道表见 RM0090)+ 网表 |
| C-9 | 新增 **B5** | ——(初版未发现) | **ADC17(V_ZL2)接 46 = PB0**;**2026-10-09 二次勘误**:PB0 = `ADC12_IN8` 确为 ADC 输入脚,"该通道电气上死"不成立(实际 = 与 LED 复用 + 代码未读,仍属潜伏);V0.1 改 44 = PC4 = **`ADC12_IN14`**(代码实现用 `ADC_CHANNEL_14`;原写 IN12 / `ADC_CHANNEL_12` 有误) | DS8626 引脚表(附加功能列)+ 网表 |
| C-10 | §2.2 | "RS485(USART5→U11…)" | F407 无 USART5 外设;V0.0 的 RS485#4 实挂 **UART5**(PC12 = UART5_TX / PD2 = UART5_RX,AF8)✓;完整外设对应:RS232#1 = USART2(PD5/6)、RS232#3 = UART4(PC10/11)、RS485#4 = UART5(PC12/PD2)、调试 = USART1(PA9/10)、U5 直连 = USART1+USART3(PB10/11) | DS8626 Table 9 + .ioc |
> 配套文档:V0.1 侧的完整逐脚核对见 `V0.1_网表详细分析报告.md` §11(含 V0.1 换脚 30 网的全部 AF/GPIO/ADC/SWD 判定与 V7~V9 新增关注项)。
@@ -2,7 +2,7 @@
> **一句话结论**:V0.1 与 V0.0 **架构完全一致**(19 颗芯片料号、电源树、隔离串口段、以太网链路、存储/RTC 全部原封未动);本次改版 = **裁剪(删 LCD/按键/TVS)+ 大面积 U17 引脚重排 + ADC 前端通道对应关系置换 + 调试口改型(H2→CN2 XH-3A)**。V0.0 待办中仅 **A1(D1/D2 去焊盘)落实**,B1/B2/B3②/A2 均未处理;**网表未新增任何设计缺陷类型**,但引脚重排使 **固件 BSP 必须整体重映射**,且 **AIN↔ADC 通道置换(17 路中 13 路变了)必须同步软件通道表**,否则采到的量全部对错通道。
>
> **数据手册逐脚核对结论(§11,依据 `docs/芯片手册/stm32f405rg.md`,DS8626 Rev 12)**:① 网表脚号 = 数据手册 LQFP144 脚号(**V0.0 报告"编号与数据手册不符"的结论系作者记忆偏差,予以推翻**,V0.0 §3.3-3 的实物抽查项由手册证据直接关闭);② V0.1 全部 30 个换脚网络经手册 AF/GPIO/ADC/SWD 核对**电气上全部成立**,未发现"不可能连接";③ V0.1 **修复了 V0.0 的 2 处真实设计缺陷**:SWCLK(V0.0 接 104=PA12,非 JTAG 脚 → **V0.0 实板 SWD 不通**,实测飞线至 PA14 调通 → V0.1 改 109=PA14)与 ADC17(V0.0 接 46=PB0,非 ADC 输入脚,该通道电气上死 → V0.1 改 44=PC4=ADC12_IN12);④ 新核出 3 项关注点(V7 VCAP 电容值未标注 / V8 子板 LED 3 线落在 PC13/14/15 的 3mA 限 / V9 V0.1 主板 SDIO 固定引脚组全部被占用)。
> **数据手册逐脚核对结论(§11,依据 `docs/芯片手册/stm32f405rg.md`,DS8626 Rev 12)**:① 网表脚号 = 数据手册 LQFP144 脚号(**V0.0 报告"编号与数据手册不符"的结论系作者记忆偏差,予以推翻**,V0.0 §3.3-3 的实物抽查项由手册证据直接关闭);② V0.1 全部 30 个换脚网络经手册 AF/GPIO/ADC/SWD 核对**电气上全部成立**,未发现"不可能连接";③ V0.1 处理了 V0.0 的 2 处引脚问题(**2026-10-09 勘误:其中 ADC17 一处定性有误,只有 SWCLK 是真实设计缺陷**,见 §4.6 勘误段):SWCLK(V0.0 接 104=PA12,非 JTAG 脚 → **V0.0 实板 SWD 不通**,实测飞线至 PA14 调通 → V0.1 改 109=PA14)与 ADC17(V0.0 接 46=PB0 → V0.1 改 44=PC4;PB0 实为 `ADC12_IN8` 并非无效脚,此改版的实际收益是**解除与 LED2 的复用**,PC4 的正确通道号是 **`ADC12_IN14`**);④ 新核出 3 项关注点(V7 VCAP 电容值未标注 / V8 子板 LED 3 线落在 PC13/14/15 的 3mA 限 / V9 V0.1 主板 SDIO 固定引脚组全部被占用)。
>
> **本文只写差异**。凡本文未提及的器件、网络、电路,均与 V0.0 完全一致,结论直接沿用 `V0.0_网表详细分析报告.md`(下称"V0.0 报告")。
@@ -160,10 +160,16 @@ B3 性质不变(仍为 A 侧输入悬空驱动子板输出的浮空风险,
| 网络 | V0.0 脚(引脚名) | V0.1 脚(引脚名) | 数据手册核对 |
|---|---|---|---|
| SWCLK | 104 = **PA12**(AF:USART1_RTS/CAN1_TX/OTG_FS_DP,**无 JTAG 功能**) | **109 = PA14 = JTCK-SWCLK ✓** | **V0.0 设计缺陷(B4),V0.1 修复**。实测证实:V0.0 实板 SWD 不通(网表与 PCB 一致,SWCLK 真的接在 PA12 上)——用户飞线至 PA14 后方可调试;V0.1 已更正 |
| ADC17 | 46 = **PB0**(**非 ADC 输入脚**:F407 的 ADC 输入仅 PA0~PA7/PC0~PC7) | **44 = PC4 = ADC12_IN12 ✓** | **V0.0 的"ADC17"通道电气上无效**(PB0 作模拟输入无意义,代码当时也未读此通道,属潜伏缺陷);V0.1 改接 PC4,成为真实 ADC 通道——**代码实现该通道时必须用 `ADC_CHANNEL_12`** |
| ADC17 | 46 = **PB0**(= `ADC12_IN8`,**2026-10-09 勘误:PB0 确为 ADC 输入脚**,见本节末勘误段) | **44 = PC4 = `ADC12_IN14` ✓** | **(原判"V0.0 的 ADC17 通道电气上无效"已于 2026-10-09 勘误:PB0 = `ADC12_IN8` 是有效 ADC 脚,实际问题是与 LED2 复用、代码未读)**;V0.1 改接 PC4——**代码实现该通道必须用 `ADC_CHANNEL_14`**(`ADC_CHANNEL_12` = PC2 / pin 30,写错即读到另一只脚) |
(SWDIO 仍 U17.105 = PA13 = JTMS-SWDIO ✓ 不变;46(PB0) 被 LED2 网络接管、44(PC4) 原为 LED1 网络。V0.0 报告"引脚编号与数据手册不符"的判断不适用于这两脚——编号体系本身与手册一致,V0.0 错在把 SWCLK 画到了 104。)
> **2026-10-09 勘误(依据 DS8626 引脚表逐脚复核,见 §11 引脚核对表)**:
> ① **PC4 = LQFP144 pin 44 = `ADC12_IN14`**,并非本报告早期写的 `ADC12_IN12`(`ADC_CHANNEL_12` 对应 **PC2 = pin 30**)——代码须用 **`ADC_CHANNEL_14`**;
> ② **PB0 = pin 46 = `ADC12_IN8`**(PB1 = pin 47 = `ADC12_IN9`),故 V0.0 把 ADC17 接 pin 46 **电气上是有效通道**,"PB0 非 ADC 输入脚 / 该通道电气上死"的定性**不成立**——V0.1 改到 PC4 的**实际收益是解除与 LED2(PB0)的复用**,不是救活死通道;
> ③ PC5 = `ADC12_IN15`(不是 `ADC12_IN13`;IN13 = PC3)。
> 语义分配(UA/UB/UC/UN、IA/IB/IC/IN、V_ZL2=温度)与 17 路端到端映射已固化到 [`docs/硬件平台/ADC通道映射说明.md`](ADC通道映射说明.md)。
## 5. LED 对应关系变化(6 网,网名不变)
V0.0 报告 §2.2/§4.7 的 6 路 MCU 控制 LED(实板位号 LED5~LED10,阴极经 R59~R64 1k→3.3V,该侧接法不变):
@@ -207,7 +213,7 @@ V0.0 报告 §2.2/§4.7 的 6 路 MCU 控制 LED(实板位号 LED5~LED10,阴
1. **TPAFE 8 路 ↔ STM32 ADC 9 路的"归属"也变了**:V0.1 中 TPAFE(U3)采 U5 的 B6/A6/B5/A5/B4/A4/A3/B3,STM32 ADC 采 C13/C9/C10/C14/C12/C11/A8/B7——两族通道数(8+9)不变,成员重分。
2. 网名 AINn 与 ADCn 编号**不再一一对应**(如 AIN1→ADC7),任何按"AINn=ADCn"假设的代码/文档/测试都会静默采错通道——这正是 V0.0 §1.6 警示的"静默死亡"型风险,务必以本表建立映射。
3. 置换疑似按 U5 连接器物理位置重排走线(TPAFE 8 路恰为 B6→B3 降序),**请与硬件确认是否有意**;确认后固件通道映射表、UI 通道显示、自检逐通道注入验证(V0.0 §5.1-6)按新表执行。
3. 置换疑似按 U5 连接器物理位置重排走线(TPAFE 8 路恰为 B6→B3 降序)——**2026-10-09 已与硬件确认:有意设计**(电能计量在子板完成,主板 ADC 只做监视/辅助测量,故 8 路电气量分到 TPAFE 与 STM32 两侧)。语义分配(UA/UB/UC/UN、IA/IB/IC/IN、V_ZL2=温度检测,其余 8 路备用)与 17 路端到端映射已固化为 [`docs/硬件平台/ADC通道映射说明.md`](ADC通道映射说明.md);固件通道映射表、UI 通道显示、自检逐通道注入验证(V0.0 §5.1-6)按该表执行。
## 7. 电源/地网络成员变化(拓扑不变)
@@ -236,7 +242,7 @@ VDD50、5V、C3.3V、CGND、AVDDL(成员同,仅 C3 封装变)、STM_VDDA
1. **TPAFE 控制组 7 线迁移**(.ioc 重新生成 + main.h):PD1→PC6(FRSTDATA)、PD3→PC8(RD)、PD4→PC9(CONVST)、PD7→PC7(BUSY)、PF13/14/15→PA12/PA11/PA8(OS0/OS1/OS2)——数据手册核对 7 脚均为合法 GPIO ✓(§4.1/§11.3)。**已完成并台架验证(2026-09-21)**:CubeMX 重生成 .ioc/main.h,驱动为宏驱动、逻辑零改动(仅注释同步),烧录后 `ADC init: OK` / 无 BUSY 超时,TCP 7003/8888 两轮探测通过。
2. **UART 实例确认**:代码已是 V0.1 组合(RS485#4=UART4 PC10/PC11、RS232#1=UART5 PC12/PD2、RS232#3=USART2 PD5/PD6),AF 均与手册相符 ✓;上板逐口回环验证即可。
3. **ADC 通道映射表重写**(§6):含 TPAFE/STM32 两族通道归属重分、通道→UI 显示名、自检注入用例逐通道实测;STM32 侧 9 路中 8 路仍在 PA0~PA7(IN0~IN7),**第 17 路(V_ZL2)实现时改用 `ADC_CHANNEL_12`(PC4)**——当前代码未启用 STM32 ADC(`HAL_ADC_MODULE_ENABLED` 注释状态),属实现时的注意事项。
3. **ADC 通道映射表重写**(§6):**已落地** → [`docs/硬件平台/ADC通道映射说明.md`](ADC通道映射说明.md)(语义 UA/UB/UC/UN、IA/IB/IC/IN、V_ZL2=温度检测,其余 8 路备用;含 TPAFE `buf[0..7]` 下标映射、STM32 通道宏、自检注入口径)。STM32 侧 9 路中 8 路在 PA0~PA7(IN0~IN7),**网名 ADC17(pin 44 = PC4)实现时用 `ADC_CHANNEL_14`**——原文写的 `ADC_CHANNEL_12` 与"第 17 路 = V_ZL2"均已勘误:V0.1 中 **ADC17 网名承载 AIN2 = UB**,**V_ZL2 走 ADC14 = PA5 = `ADC12_IN5`**。当前代码未启用 STM32 ADC(`HAL_ADC_MODULE_ENABLED` 注释状态),属实现时的注意事项。
4. **裁剪**:删除/停用 LCD(H1 8080)与 KEY1~8 相关代码(若有);面板按键功能如仍需要,需另立需求(V0.1 已无板上按键,仅 SW1 复位保留)。
5. **13 条悬空 GPIO 线配置安全默认电平**(B3①):U18 桥 11 线(PE6/PC13/PC14/PC15/PF0/PF1/PF4/PF5/PF6/PC2/PC3,LED 灭/继电器断/告警静默)+ SPI 镜像 2 线(PF1/PF2);其中 3 线在 PC13/14/15,**只能灌流 ≤3mA**(V8)。
6. **EXTKI×3 读取(如启用)必须配在 PE2/PE3/PE4(脚 1/2/3)**——V0.0 报告 §5.2 写的"PC13/14/15"是引脚搞错(那三脚在 V0.1 已被 V15/J3/F3 占用,见 §11.2);硬件通路(U18 A 侧→PE2/3/4)V0.1 未变。
@@ -288,7 +294,7 @@ VDD50、5V、C3.3V、CGND、AVDDL(成员同,仅 C3 封装变)、STM_VDDA
| §4.6 | "ST_IN_E4/C3/D4→pin 3/2/1 = PC15/PC14/PC13(标准 LQFP-144 编号…)" | pin 1/2/3 = **PE2/PE3/PE4**(即 ST_IN_D4/C3/E4);EXTKI 三线实际在 PE2/PE3/PE4(V0.1 未变);**V0.0 报告 §5.2"启用 PC13/14/15 读 EXTKI"是引脚搞错**——V0.1 中 PC13/14/15 已被 V15/J3/F3 子板 LED 线占用 |
| §3.3-3 / §4.1 | "封装引脚编号…与常见数据手册图记忆不符→判定网表正确,待实物抽查" | 与数据手册一致(§11.1);抽查项由手册证据关闭 |
| §4.1 / §5.3 | SWCLK = U17.104 | pin 104 = **PA12(无 JTAG 功能,AF 为 USART1_RTS/CAN1_TX/OTG_DP)**;实测证实 **V0.0 实板 SWD 不通**(用户飞线至 PA14=109 后方可调试)→ **V0.0 真实设计缺陷(B4)**,V0.1 已更正 |
| §4.7 / §1.6 | "ADC17→U17.46" 列为正常通道 | pin 46 = **PB0,非 ADC 输入脚**(F407 ADC 输入仅 PA0~PA7、PC0~PC7)→ V0.0 的"ADC17"(V_ZL2)通道**电气上无效**(潜伏缺陷,代码当时未读该通道);V0.1 改接 44 = PC4 = ADC12_IN12,缺陷修复 |
| §4.7 / §1.6 | "ADC17→U17.46" 列为正常通道 | pin 46 = **PB0 = `ADC12_IN8`**(**2026-10-09 勘误:PB0 确为 ADC 输入脚**,原判"非 ADC 输入脚 / 电气上无效"不成立)→ V0.0 的"ADC17"(V_ZL2)通道电气上有效,只是与 LED 复用冲突、代码未读;V0.1 改接 44 = PC4 = **`ADC12_IN14`**(代码用 `ADC_CHANNEL_14`) |
另:V0.0 报告 §2.2 存储项"GD5F2GQ5UE + SD 卡(FatFs)"表述有误——两版网表均无 SDIO 引脚,代码 FatFs 卷在 **SPI NAND** 上(`App/cfg/cfg_file_store_mcu.c` 头部:"NAND 上 FatFS 文件 /config.ini(卷根)"),主板本无 SD 卡/SDIO。
@@ -308,8 +314,8 @@ VDD50、5V、C3.3V、CGND、AVDDL(成员同,仅 C3 封装变)、STM_VDDA
| TP_OS2 | 100 (PA8) | GPIO | (SDIO_D6/MCO1 同脚) | ✓ |
| TP_OS1 | 103 (PA11) | GPIO | (OTG_FS_DM 同脚,未用) | ✓ |
| TP_OS0 | 104 (PA12) | GPIO | (OTG_FS_DP 同脚,未用) | ✓ |
| ADC17 | 44 (PC4) | ADC 输入 | **ADC12_IN12** | ✓(V0.0 死通道修复;代码实现用 `ADC_CHANNEL_12`) |
| LED1 | 45 (PC5) | GPIO | (ADC12_IN13 同脚,作 GPIO 无碍) | ✓ |
| ADC17 | 44 (PC4) | ADC 输入 | **ADC12_IN14** | ✓(代码实现用 `ADC_CHANNEL_14`;`ADC_CHANNEL_12` = PC2/pin 30,勿混——见 §4.6 勘误) |
| LED1 | 45 (PC5) | GPIO | (ADC12_IN15 同脚,作 GPIO 无碍) | ✓ |
| LED2/3/4 | 46/47/48 (PB0/PB1/PB2) | GPIO | PB2=PB2/BOOT1,F407 普通 GPIO | ✓ |
| LED5/6 | 49/50 (PF11/PF12) | GPIO | FT I/O | ✓ |
| H16 | 5 (PE6) | GPIO | FT I/O | ✓ |
@@ -342,7 +348,7 @@ VDD50、5V、C3.3V、CGND、AVDDL(成员同,仅 C3 封装变)、STM_VDDA
1. **V0.1 的 U17 连接经数据手册核对全部电气成立**(AF/GPIO/ADC/SWD/电源/BOOT0 逐项无误),未发现"不可能连接";
2. V0.1 **修复了 V0.0 的 2 处真实设计缺陷**(B4:SWCLK 104→109——V0.0 实板 SWD 不通,实测飞线调通;B5:ADC17 46→44)——除接口裁剪外,这是本次改版最有实质的硬件收益;
3. 新核出 3 项关注点:**V7**(VCAP 电容值未标注)、**V8**(PC13/14/15 的 3mA 驱动限制 vs 子板 LED)、**V9**(V0.1 主板 SDIO 能力被完全占用——当前无碍,架构约束备案);
4. 代码侧同步项收敛为 4 条:TPAFE 控制 7 线迁移(§9-1)、13 条悬空 GPIO 安全电平(§9-5)、第 17 路 ADC 用 `ADC_CHANNEL_12`(§9-3)、EXTKI 读 PE2/3/4 而非 PC13/14/15(§9-6);
4. 代码侧同步项收敛为 4 条:TPAFE 控制 7 线迁移(§9-1)、13 条悬空 GPIO 安全电平(§9-5)、网名 ADC17(PC4)用 `ADC_CHANNEL_14`(§9-3,原写 `ADC_CHANNEL_12` 已勘误)、EXTKI 读 PE2/3/4 而非 PC13/14/15(§9-6);
5. V0.0 报告"引脚编号与数据手册不符"结论**撤销**,实物抽查项关闭,5 处文字表述追溯更正(§11.2)。
## 附录 A:比对方法