diff --git a/docs/产品需求/产品需求设计文档.md b/docs/产品需求/产品需求设计文档.md index 657df359..1d001860 100644 --- a/docs/产品需求/产品需求设计文档.md +++ b/docs/产品需求/产品需求设计文档.md @@ -2572,7 +2572,10 @@ docs/任务规划/UI补齐.md §5);原「当前执行 6 项」(记录 5 > > **一条物理前置 + 一条实现纪律**: > ① **台架串口线挪位**——现在的 CH340/`COM6` 接在 USART1 调试口上,日志迁到 RS-232 侧后 -> 必须改接到 CN1(或 U14),否则 `@test` 与 `serial-assistant` 全部抓不到日志,等于把台架弄瞎。 +> 必须改接到 CN1 的 RS232#1 端子(`CN1.10` 接适配器 TXD、`CN1.12` 接适配器 RXD、`CN1.7` 或 `CN1.8` 接 GND), +> 否则 `@test` 与 `serial-assistant` 全部抓不到日志,等于把台架弄瞎。这些端子是 **RS-232 电平**, +> 须用 USB 转 RS-232 适配器,现有的 TTL CH340 直连不了;接法与端子出处见 +> `docs/任务规划/屏板链路.md` §3 批 0。 > **这条要在第 16 条动代码之前完成。** > ② **RX 要真的读、ORE 要真的清**——PA10 一直是接线的(§5.16.2), > 但"RX 使能却不读 `DR`"本身就足以让 ORE 永久锁存。第 11 条实现时必须在 diff --git a/docs/任务规划/屏板链路.md b/docs/任务规划/屏板链路.md index 8724fd5e..01f8e82c 100644 --- a/docs/任务规划/屏板链路.md +++ b/docs/任务规划/屏板链路.md @@ -17,10 +17,11 @@ | # | 项 | 实测 / 出处 | 后果 | |---|---|---|---| | 1 | **日志口占着 USART1** | `console_log.c` 里 `huart1` 5 处;自愈函数直写 `USART1_IRQn` / `MX_USART1_UART_Init()` | 两者共用同一个 `USART1->DR`,同时用就是互相插字节 → **日志必须先迁到 RS-232 通道** | -| 2 | **台架串口线接在 USART1 上** | CH340 → `COM6`,`@test` / `serial-assistant` 都靠它抓日志 | 日志一迁,台架立刻瞎 → **先把线挪到 RS-232 侧(CN1)再动代码** | +| 2 | **台架串口线接在 USART1 上** | TTL 的 CH340 → `COM6`,`@test` / `serial-assistant` 都靠它抓日志 | 日志一迁,台架立刻瞎 → **先把线挪到 RS-232 侧(CN1)再动代码**;且这根 TTL 模块挪不过去,须换 **USB 转 RS-232 适配器**(见 §2 决策二) | **执行顺序因此是**:挪台架线 → 迁日志口 → 才开始写屏板链路。 -第一步是拧螺丝,第二步约 20 行代码(§3 批 0),第三步才是屏板链路的开发批次。 +第一步是**换一个 USB 转 RS-232 适配器 + 接三个端子**(纯硬件,不碰代码),第二步约 20 行代码(§3 批 0), +第三步才是屏板链路的开发批次。 --- @@ -97,13 +98,21 @@ | 端口 | 引脚 | V0.1 板上通道 | 重排后用途 | |---|---|---|---| | **USART1** | PA9 / PA10 | 调试口 + U5 直连 TTL(ST_TX0/RX0) | ✅ **屏板链路** | -| **USART2** | PD5 / PD6 | **RS232#3**(U10 隔离 → U13 TPT3232E → CN1) | ✅ **日志**(默认) | -| UART5 | PC12 / PD2 | **RS232#1**(U9 隔离 → U13 → CN1) | 备选日志口 | +| **UART5** | PC12 / PD2 | **RS232#1**(ST_TX1/ST_RX1 → U9 隔离 → U13 TPT3232E → CN1.10/CN1.12) | ✅ **日志**(2026-10-29 已定) | +| USART2 | PD5 / PD6 | **RS232#3**(ST_TX3/ST_RX3 → U10 隔离 → U13 → CN1.9/CN1.11;另有网口座 `U14` 同信号) | 备选日志口 | | USART3 | PB10 / PB11 | U5 直连 TTL(ST_TX2/RX2) | 空闲 | -**日志口选 USART2 还是 UART5**:两者都经隔离器 → `U13` TPT3232E → CN1,能力等价; -控制台是**只发不收、寄存器轮询**,DMA 也用不上,所以挑哪个只取决于**现场把 CH340 接到哪个端子**。 -默认写 **USART2(RS232#3)**;若实际接的是 RS232#1,就换成 `huart5`——**迁移时收口成一处宏,别散改**。 +**日志口已定为 UART5(RS232#1)**——2026-10-29 用户裁定,理由是**台架那根线落在哪个端子**,不是能力差异: +两条 RS232 通道都经隔离器 → `U13` TPT3232E → CN1,控制台又是**只发不收、寄存器轮询**,DMA 也用不上。 +选定的 `ST_TX1` / `ST_RX1` 就是 RS232#1 在 MCU 侧的网络名(PC12 / PD2,UART5)。 + +> ⚠ **RS232#1 没有 TTL 出口**:`ST_TX1` / `ST_RX1` 在网表里只连 `U9` 的 3 脚 / 2 脚与 MCU 两个脚, +> **既无连接器也无测试点**;唯一外部出口是 CN1 的 RS-232 端子。所以台架**必须用 USB 转 RS-232 适配器**, +> 现有的 TTL CH340 接不上去(接上去轻则不通信,重则打坏 `U13` 或适配器)。 +> 另:`U14` 是 RS232#3 的网口座(3 脚 `RS232_TX3` / 6 脚 `RS232_RX3`),**本通道用不上**——别把它当成备选端子。 + +**迁移时收口成一处端口宏,别散改**:`huart5` 现在是 `115200 8N1 / UART_MODE_TX_RX`(`Src/usart.c:74-81`), +业务代码里没人用,只有 `Src/stm32f4xx_it.c:565` 挂着 IRQ 入口。 > ⚠ **USART1 交接前必须确认两件事**:① 控制台已不再写 `USART1->DR`(否则两条流互相插字节, > 症状是"屏板偶尔花屏 + 日志偶尔乱码",很容易误判成 CRC 或时序问题); @@ -185,8 +194,8 @@ | 序 | 任务 | 改动点 | 判据 | |---|---|---|---| -| 0-1 | **台架串口线挪位** | 硬件:CH340 从 USART1 调试口改接 CN1 的 RS-232 端(或 U14) | `serial-assistant` 在 RS-232 侧能收到日志 | -| 0-2 | **日志口迁移(USART1 → RS-232)** | ① `console_log.c` 的 `huart1`、`USART1_IRQn`、`__HAL_RCC_USART1_CLK_*`、`MX_USART1_UART_Init()` 收口成**一处端口宏**,指向 `huart2`(RS232#3)或 `huart5`(RS232#1);② 该实例改 **`UART_MODE_TX`**(只发不收,把 RX 从机制上摘掉) | 日志在 RS-232 侧可读、内容与迁移前一致;连续 10 min 无 ORE 锁存、无 `[ERR]`;USART1 完全空出 | +| 0-1 | **台架串口线挪位** | 硬件:**换成 USB 转 RS-232 适配器**(TTL 的 CH340 直连不了),接 RS232#1 的三个端子——适配器 TXD → **CN1.10**(板子 `RS232_RX1`)、RXD → **CN1.12**(板子 `RS232_TX1`)、GND → **CN1.7 或 CN1.8**(`CGND`)。端子号出自 `docs/硬件平台/V0.1.tel`;`U14` 是 RS232#3 的网口座,本通道用不上 | `serial-assistant` 在 RS-232 侧能收到日志 | +| 0-2 | **日志口迁移(USART1 → RS-232)** | ① `console_log.c` 的 `huart1`、`USART1_IRQn`、`__HAL_RCC_USART1_CLK_*`、`MX_USART1_UART_Init()` 收口成**一处端口宏**,指向 **`huart5`(RS232#1,已定)**;② 该实例改 **`UART_MODE_TX`**(只发不收,把 RX 从机制上摘掉)——`huart5` 现为 `UART_MODE_TX_RX`,**改在 `.ioc` 里**(`Src/usart.c` 是 CubeMX 生成物,只写 USER CODE) | 日志在 RS-232 侧可读、内容与迁移前一致;连续 10 min 无 ORE 锁存、无 `[ERR]`;USART1 完全空出 | | 0-3 | **落定 USART1 到屏板的接线** | 按决策一:TTL 直连屏板 UART2 侧(PA2/PA3);把线束接法与验收方式写清楚 | 接法落纸;照此接线后屏板发来的 6 B 召唤帧能被收到 | > PA10 已接线(用户 2026-10-28 确认),屏板链路**不需要额外飞线**。 @@ -317,7 +326,7 @@ stub 提供 HAL)。屏板侧 CRC 有查表实现,**用同一张表做交叉 | 步 | 做什么 | 需要什么 | 停下也能交付什么 | |---|---|---|---| -| 0 | **腾位置**:CH340 挪到 RS-232 侧、日志迁走 | 改接串口线 | USART1 空出来,日志照旧能看(批 0) | +| 0 | **腾位置**:串口线挪到 RS-232 侧、日志迁走 | 改接串口线 + 一个 **USB 转 RS-232 适配器** | USART1 空出来,日志照旧能看(批 0) | | 1 | 协议层单测(`test/host/screenlink/`) | 无硬件 | CRC 与组帧的正确性,可回归 | | 2 | PC 串口助手**模拟屏板**:手发 6 B 召唤帧,看主机回的 4208 B | **USB 转 TTL 模块**接 USART1(PA9/PA10)+ 主机板 | 主机侧协议 100 % 可验证 | | 3 | 反向:PC 收主机帧,用脚本核对 4208 B / CRC / 显存内容 | 同上 | 帧内容正确性(与 `g_ui_fbuf` 逐字节比) | @@ -334,6 +343,7 @@ stub 提供 HAL)。屏板侧 CRC 有查表实现,**用同一张表做交叉 | 风险 | 触发条件 | 影响 | 回退/应对 | |---|---|---|---| | **日志迁移把台架弄瞎** | 先改代码、后挪串口线 | 什么都看不到,误以为固件挂了 | 顺序钉死:0-1 先挪线、0-2 再改代码;改完先跑一次 `@test` | +| **TTL 适配器直插 CN1** | 沿用那根 CH340 去接 RS-232 端子 | 不通信,且 RS-232 的 ±电平可能打坏 `U13` 或适配器 | 0-1 已写死「换 USB 转 RS-232 适配器」;RS232#1 无 TTL 出口,只能走电平转换后的 CN1 | | **控制台与屏板链路抢 `USART1->DR`** | 日志没迁干净就接屏板 | 屏板花屏 + 日志乱码,像 CRC / 时序错 | 0-2 的判据明确要求"USART1 完全空出" | | **一次噪声后链路永久静默** | 错误回调里不清 ORE | 屏板召唤再也收不到,症状与"协议不对"完全一样 | 1-3 判据含"拔插 TX 线制造噪声后自动恢复" | | **日志口又染上 ORE 锁存** | 新日志口照抄 `UART_MODE_TX_RX` | 控制台静默、看门狗误复位(老病复发) | 新日志口设 `UART_MODE_TX`;判据含"连续 10 min 无 ORE" |