From 50c75eb5160ee50ab0cf1b4b9a581ec93fdaf9e7 Mon Sep 17 00:00:00 2001 From: Wanderingss <1624155937@qq.com> Date: Thu, 29 Oct 2026 18:14:44 +0800 Subject: [PATCH] =?UTF-8?q?docs(=E5=B1=8F=E6=9D=BF):=20=E6=89=B9=200=20?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E5=8F=A3=E5=AE=9A=E4=B8=BA=20RS232#1?= =?UTF-8?q?=EF=BC=88UART5=EF=BC=89=EF=BC=8C=E8=90=BD=E5=AE=9A=20CN1=20?= =?UTF-8?q?=E7=AB=AF=E5=AD=90=E4=B8=8E=E9=80=82=E9=85=8D=E5=99=A8=E8=A6=81?= =?UTF-8?q?=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2026-10-29 用户裁定:台架线走 ST_TX1 / ST_RX1 这一对,即 RS232#1, 对应 UART5(PC12 / PD2)。此前文档把默认日志口写成 USART2(RS232#3), 与这次裁定不符,一并改掉。 网表核对(docs/硬件平台/V0.1.tel 逐段可查): PC12 -ST_TX1- U9.3 -> U9.6 -TX1- U13.11 -> U13.14 -RS232_TX1- CN1.12 PD2 -ST_RX1- U9.2 <- U9.7 -RX1- U13.12 <- U13.13 -RS232_RX1- CN1.10 由此落定三件事: 1. 台架端子:适配器 TXD 接 CN1.10、RXD 接 CN1.12、GND 接 CN1.7 或 CN1.8(CGND)。方向是交叉的——CN1.10 是板子的接收端。 2. RS232#1 没有 TTL 出口:ST_TX1 / ST_RX1 在网表里只连 U9 的 3 脚 / 2 脚与 MCU 两个脚,既无连接器也无测试点。唯一外部出口是 CN1 的 RS-232 端子,所以必须换 USB 转 RS-232 适配器;现有那根 TTL CH340 直连不了,接上去轻则不通信、重则打坏 U13 或适配器。 3. U14 是 RS232#3 的网口座(3 脚 RS232_TX3 / 6 脚 RS232_RX3),本通道 用不上。原文「改接 CN1(或 U14)」会把接线引到错误的通道上,删掉。 0-2 的目标端口随之从 huart2 收窄为 huart5(不再二选一)。huart5 现为 115200 8N1 / UART_MODE_TX_RX,业务代码无人使用,仅 Src/stm32f4xx_it.c:565 挂着 IRQ 入口;改 UART_MODE_TX 要在 .ioc 里做,Src/usart.c 是生成物。 改动面:屏板链路.md(决策二表、批 0 的 0-1 / 0-2、台架步骤 0、风险表各 一条)与产品需求设计文档.md 的 §9.13 物理前置段(原文同样写着「或 U14」)。 --- docs/产品需求/产品需求设计文档.md | 5 ++++- docs/任务规划/屏板链路.md | 30 ++++++++++++++++++++---------- 2 files changed, 24 insertions(+), 11 deletions(-) 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" |