This commit is contained in:
zhoujie 2026-03-14 23:29:19 +08:00
parent 8e779dce30
commit a87625df90
4 changed files with 566 additions and 20 deletions

View File

@ -0,0 +1,548 @@
# CH32V307 TCPClient 模式配置与功能说明
## 目录
1. [系统架构概述](#1-系统架构概述)
2. [运行模式说明](#2-运行模式说明)
3. [宏开关配置总表](#3-宏开关配置总表)
4. [测试模式详解](#4-测试模式详解)
5. [正常模式详解](#5-正常模式详解)
6. [网络与服务器配置](#6-网络与服务器配置)
7. [配置下发流程](#7-配置下发流程)
8. [RTOS 任务架构](#8-rtos-任务架构)
9. [切换模式操作指南](#9-切换模式操作指南)
10. [常见配置场景](#10-常见配置场景)
11. [已知注意事项](#11-已知注意事项)
---
## 1. 系统架构概述
本系统基于 CH32V307WCU6 (RISC-V) 微控制器,运行 FreeRTOS 实时操作系统,通过 WCHNET TCP/IP 协议栈与上位机通信。系统支持两种运行模式:**测试模式**(软件生成模拟热成像数据)和**正常模式**(通过 DVP 接口采集 Mini212G2 红外传感器真实数据)。
### 硬件资源
| 资源 | 配置 |
|------|------|
| MCU | CH32V307WCU6 (RISC-V, 144MHz) |
| FLASH | 128KB |
| SRAM | 192KB (Option Bytes [7:5]=110) |
| 传感器 | Mini212G2 (256×192, Y16 原始温度) |
| 网络 | 10M 以太网 (WCHNET) |
| 串口波特率 | 921600 |
### 软件组件
| 组件 | 说明 |
|------|------|
| FreeRTOS v202112.00 | 实时操作系统Heap=16KB |
| WCHNET | 万瑞 TCP/IP 协议栈 |
| QDX 协议栈 | 自定义 TLV 二进制通信协议 |
| 预处理模块 | 滑窗 ROI 搜索 + 温度统计 |
---
## 2. 运行模式说明
### 两种模式对比
| 对比项 | 测试模式 (`TEST_PATTERN_MODE=1`) | 正常模式 (`TEST_PATTERN_MODE=0`) |
|--------|------|------|
| **数据来源** | 软件生成模拟热图 (~10 FPS) | Mini212G2 传感器 DVP/DMA 采集 |
| **硬件依赖** | 仅需网口,无需传感器 | 需连接 Mini212G2 + DVP 线缆 |
| **初始化** | 跳过 `Mini212G2_Init()``DVP_Init()` | 执行传感器初始化 + DVP 配置 |
| **帧生成** | `task_test_pattern_entry` 任务周期填充 | DVP 行中断逐行 DMA 搬运 |
| **心跳显示** | `[HB] N tick=X TEST_MODE frm=Y` | `[HB] N tick=X dvp_frm=Y row_irq=Z` |
| **默认配置** | 自动加载测试配置64×64, 80°C 阈值) | 等待服务器下发,默认 1×1 |
| **适用场景** | 软件调试、协议验证、无硬件开发 | 生产环境、实际传感器采集 |
---
## 3. 宏开关配置总表
所有宏定义位于 `prj/TCPClient/User/main.c` 文件头部。
### 3.1 主模式开关
| 宏名 | 文件位置 | 当前值 | 说明 |
|------|---------|--------|------|
| `TEST_PATTERN_MODE` | main.c:18 | **1** | **主开关**1=测试模式0=正常模式 |
### 3.2 功能子开关
| 宏名 | 当前值 | 控制功能 | 依赖条件 |
|------|--------|---------|---------|
| `TEST_ENABLE_HEARTBEAT` | **1** | 周期心跳调试打印2秒间隔 | 无 |
| `TEST_ENABLE_TRIGGER` | **0** | 内部触发 + 连拍上传 | 需配合阈值配置 |
| `TEST_ENABLE_NG_GPIO` | **0** | PA8 NG GPIO 脉冲输出 | 需硬件连接 |
| `TEST_ENABLE_TEMP_REQ` | **1** | 服务器按需帧请求响应 | 需服务器发送请求 |
| `TEST_ENABLE_TCP_SEND` | **1** | TCP 数据通道发送 | 需网络连接 |
### 3.3 其他编译期常量
| 宏名 | 值 | 说明 |
|------|-----|------|
| `KEEPALIVE_ENABLE` | 1 | TCP KeepAlive 保持20s 探测) |
| `DEFAULT_BURST_COUNT` | 3 | 默认连拍帧数 |
| `DEFAULT_BURST_INTERVAL_MS` | 200 | 默认连拍帧间隔 (ms) |
| `MAX_TCP_PAYLOAD_SIZE` | 10240 | TCP 发送缓冲区大小 (字节) |
| `TEST_FPS_DELAY_MS` | 100 | 测试模式帧间隔 (~10 FPS) |
| `TEST_1D_POINTS` | 30 | 1D 模式采样点数 |
### 3.4 传感器相关宏 (dvp.h)
| 宏名 | 值 | 说明 |
|------|-----|------|
| `SENSOR_WIDTH` | 256 | 传感器像素宽度 |
| `SENSOR_HEIGHT` | 192 | 传感器像素高度 |
| `BYTES_PER_LINE` | 512 | 每行字节数 (256×2) |
### 3.5 传感器通信宏 (mini212g2.h)
> 当前模组已通过 USB 预配置MCU UART 配置功能已用 `#if 0` 关闭。
> **USART2 (PA2/PA3) 引脚已被占用,不可用于传感器通信。**
| 宏名 | 当前值 | 说明 |
|------|--------|------|
| `SENSOR_USE_USART3` | 0 | 启用后必须为 1USART2 不可用) |
| `SENSOR_UART_ENABLE` | **0 (已禁用)** | MCU UART 配置已禁用,传感器通过 USB 预配置 |
| `SENSOR_UART_BAUD` | 115200 | 传感器 UART 波特率(未使用) |
---
## 4. 测试模式详解
### 4.1 启用方式
```c
#define TEST_PATTERN_MODE 1
```
编译烧录即可,**无需连接任何传感器硬件**,仅需以太网连接。
### 4.2 测试图案
系统自动循环生成 4 种测试图案256×192 Y16 格式):
| 图案 | 持续帧数 | 温度范围 | 是否触发 | 用途 |
|------|---------|---------|---------|------|
| **对角渐变** | 20 帧 | 25.0°C → 45.0°C | 否 | 基线测试 |
| **中心热点** | 5 帧 | 背景 28~32°C, 中心 90.0°C | 是 (>80°C) | 触发测试 |
| **均匀温场** | 10 帧 | 35.0°C | 否 | 无触发验证 |
| **棋盘格** | 5 帧 | 28.0°C / 85.0°C 交替 | 是 (>80°C) | ROI 搜索测试 |
总周期40 帧 ≈ 4 秒循环一次。
### 4.3 默认配置参数
测试模式启动时自动加载以下配置(无需服务器下发即可工作):
```
TargetWidth = 64 # 预处理输出宽度
TargetHeight = 64 # 预处理输出高度
TriggerRoiX = 0 # 触发检测区域起点 X
TriggerRoiY = 0 # 触发检测区域起点 Y
TriggerRoiW = 256 # 触发检测区域宽度(全幅)
TriggerRoiH = 192 # 触发检测区域高度(全幅)
TriggerCondition = 1 # 触发条件1=最大温度
TriggerTemperatureThreshold = 800 # 80.0°C (0.1°C/LSB)
TriggerBurstCount = 3 # 连拍帧数
TriggerInternalIntervalMs = 200 # 连拍间隔 (ms)
NGioDelay = 200 # NG 脉冲宽度 (ms)
```
> **注意**:如果服务器连接后下发了 Config2D将覆盖上述默认配置。
### 4.4 测试模式数据流
```
task_test_pattern_entry (优先级 4, 100ms 周期)
│ 生成 256×192 Y16 测试图案
│ 写入 FrameBuffer[]
│ 设置 Frame_Ready_Flag=1
task_business_entry (优先级 5)
├── 检查 g_temp_req_pending (服务器请求)
│ ├── is2D=1 → Preprocess_Execute() → 滑窗搜索 → 发送 2D 帧
│ └── is2D=0 → send_1d_frame_from_raw() → 采样中心行 → 发送 1D 帧
└── 检查 Frame_Ready_Flag (仅 TRIGGER 启用时)
└── Preprocess_CheckInternalTrigger2D()
└── 触发 → 连拍发送
```
### 4.5 启动串口输出示例
```
TCPClient Test
SystemClk:144000000
=== Feature Switches ===
PATTERN=1 TRIGGER=0 NG_GPIO=0 TEMP_REQ=1 TCP_SEND=1 HB=1
UserByte: c0
=== TEST PATTERN MODE === No sensor/DVP hardware needed
net version:1c
WCHNET_LibInit Success
Test default config loaded: trigger thresh=800 ROI=full burst=3
[HB] 0 tick=1010 TEST_MODE frm=9
[HB] 1 tick=3010 TEST_MODE frm=29
```
---
## 5. 正常模式详解
### 5.1 启用方式
```c
#define TEST_PATTERN_MODE 0
```
需要:
1. Mini212G2 传感器正确连接 DVP 接口
2. 传感器已通过 USB 或 UART 预配置为 CMOS/DVP Y16 输出
### 5.2 硬件连接
#### DVP 引脚定义
| 功能 | GPIO | 说明 |
|------|------|------|
| DATA[0] | PA4 | 数据线 bit0 |
| DATA[1] | PA5 | 数据线 bit1 |
| DATA[2] | PA6 | 数据线 bit2 |
| DATA[3] | PA9 | 数据线 bit3 |
| DATA[4] | PA10 | 数据线 bit4 |
| DATA[5] | PB3 | 数据线 bit5 |
| DATA[6] | PB8 | 数据线 bit6 |
| DATA[7] | PB9 | 数据线 bit7 |
| HSYNC | PC8 | 行同步 |
| VSYNC | PC9 | 场同步(高有效) |
| PCLK | PC11 | 像素时钟(上升沿采样) |
#### 传感器 UART仅 USART3 可用)
> ⚠ USART2 (PA2/PA3) 引脚已被占用,不可用于传感器通信。
| 配置 | USART3 |
|------|--------|
| TX | PB10 |
| RX | PB11 |
| 波特率 | 115200 |
> 注意:启用 USART3 传感器通信会占用 printf 调试端口,需通过 JTAG 调试。
### 5.3 传感器配置选项
修改 `mini212g2.h`
```c
// 当前状态MCU UART 配置已禁用(#if 0
// 模组已通过 USB 预配置,无需 MCU 配置
// 如需重新启用 MCU UART 配置,将 mini212g2.h 中的 #if 0 改为 #if 1
// 仅可使用 USART3 (PB10/PB11)USART2 引脚已被占用
// ⚠ 启用后 printf 串口不可用,需通过 JTAG 调试
```
### 5.4 正常模式数据流
```
DVP 硬件中断 (DVP_IRQHandler)
├── STR_FRM 中断 → 帧开始line_idx=0
└── ROW_DONE 中断 → 行完成DMA 乒乓切换
│ 设置 Line_Ready_Flag=1
task_business_entry (优先级 5)
│ DVP_Task()
│ ├── 复制 DMA 行缓冲 → FrameBuffer[line_idx]
│ └── 最后一行 → Frame_Ready_Flag=1
├── 检查 g_temp_req_pending (服务器请求)
│ ├── is2D=1 → Preprocess_Execute() → 发送
│ └── is2D=0 → 1D 采样 → 发送
└── 检查 Frame_Ready_Flag (TRIGGER 启用时)
└── Preprocess_CheckInternalTrigger2D()
```
### 5.5 正常模式注意事项
- **无默认预处理参数**:正常模式不加载测试默认配置,`Preprocess_Init()` 仅设置 `TargetWidth=1, TargetHeight=1`。必须等服务器下发 Config2D 后才能获取正确的目标尺寸。
- **传感器初始化检查**:可通过 JTAG 查看 `sensor_init_ok` / `sensor_init_fail` 变量确认初始化结果。
- **帧率取决于传感器**Mini212G2 在 DVP 模式下的帧率由传感器内部配置决定,不通过软件控制。
### 5.6 启动串口输出示例(预期)
```
TCPClient Test
SystemClk:144000000
=== Feature Switches ===
PATTERN=0 TRIGGER=0 NG_GPIO=0 TEMP_REQ=1 TCP_SEND=1 HB=1
UserByte: c0
[DVP] Init done CR0=0x2C CR1=0x04 ROW=1 COL=512
[DVP] DMA_BUF0=0x200XXXXX DMA_BUF1=0x200XXXXX
net version:1c
WCHNET_LibInit Success
[HB] 0 tick=1010 dvp_frm=0 row_irq=0
```
---
## 6. 网络与服务器配置
### 6.1 MCU 网络参数
定义位置:`main.c`
| 参数 | 值 | 说明 |
|------|-----|------|
| IP 地址 | 192.168.7.10 | MCU 静态 IP |
| 网关 | 192.168.7.1 | 默认网关 |
| 子网掩码 | 255.255.255.0 | C 类子网 |
| MAC 地址 | 由芯片自动获取 | 硬件 MAC |
### 6.2 服务器连接参数
定义位置:`qdx_tcp_logic.c`
| 参数 | 值 | 说明 |
|------|-----|------|
| `SERVER_IP` | "192.168.7.50" | 服务器 IP |
| `CONTROL_PORT` | 5511 | 控制通道端口 |
| `DATA_PORT` | 5512 | 数据通道端口 |
> **修改方法**:直接编辑 `qdx_tcp_logic.c` 中的常量值,重新编译。
### 6.3 TCP KeepAlive
```c
#define KEEPALIVE_ENABLE 1 // main.c
// 探测配置: 20s 空闲后每 15s 探测一次,最多 9 次
```
---
## 7. 配置下发流程
### 7.1 TLV 配置类型
| TLV Type | 名称 | 说明 |
|----------|------|------|
| 0x20 | TYPE_CONFIG_COMMON | 通用配置(模式、严格标记等) |
| 0x22 | TYPE_CONFIG_2D | 2D 配置(目标尺寸、触发、连拍等) |
| 0x23 | TYPE_CONFIG_1D | 1D 配置 |
### 7.2 Config2D 关键字段
| 字段 | 偏移 | 类型 | 说明 |
|------|------|------|------|
| Width | 4 | u16 LE | 设备/传感器分辨率宽度(仅标记,不影响预处理) |
| Height | 6 | u16 LE | 设备/传感器分辨率高度(仅标记,不影响预处理) |
| **TargetWidth** | **23** | **u16 LE** | **预处理输出宽度(直接控制帧大小)** |
| **TargetHeight** | **25** | **u16 LE** | **预处理输出高度(直接控制帧大小)** |
| Fps | 8 | u16 LE | 帧率 |
| TriggerCondition | 27 | u8 | 0=平均, 1=最大 |
| TriggerTemperatureThreshold | 28 | u16 LE | 触发温度阈值 (0.1°C/LSB) |
| TriggerBurstCount | 30 | u8 | 连拍帧数 |
| TriggerInternalIntervalMs | 31 | u16 LE | 连拍帧间隔 (ms) |
| TriggerRoiX/Y/W/H | 33-40 | u16 LE ×4 | 触发检测 ROI 区域 |
> **重要**Width/Height 与 TargetWidth/TargetHeight 是两组不同的字段!
> - `Width/Height`:设备分辨率标记(偏移 4-7**不影响预处理**
> - `TargetWidth/TargetHeight`:预处理实际输出尺寸(偏移 23-26**直接决定帧数据大小**
### 7.3 缓冲区容量约束
```
MAX_TCP_PAYLOAD_SIZE = 10240 字节
HeadOffset = 64 字节(协议头预留)
可用像素空间 = 10240 - 64 = 10176 字节
最大像素数 = 10176 / 2 = 5088 像素
推荐安全目标尺寸:
64 × 64 = 4096 像素 = 8192 字节 ✓ (< 10176)
71 × 71 = 5041 像素 = 10082 字节 ✓ (< 10176)
72 × 72 = 5184 像素 = 10368 字节 ✗ (> 10176会触发降尺寸)
```
### 7.4 自动降尺寸保护
当服务器下发的 TargetWidth × TargetHeight × 2 超过可用缓冲区时MCU 会自动等比减半目标尺寸直到适合:
```
示例:服务器设 TargetWidth=185, TargetHeight=70
185 × 70 × 2 = 25,900 > 10,176 → 减半
93 × 35 × 2 = 6,510 < 10,176 使用 93×35
日志输出PP: target clamped 185x70 -> 93x35 (buf=10176)
```
### 7.5 配置传递链
```
服务器 TCP 下发 TLV
→ qdx_tcp_logic.c: parse_and_dispatch_tlv()
→ 反序列化 → cached_cfg2d / cached_cfg1d / cached_common
→ OnConfigUpdate() 回调
→ Preprocess_Settings_Change() 互斥锁更新
→ 下次 Preprocess_Execute() 使用新配置
```
---
## 8. RTOS 任务架构
| 任务名 | 优先级 | 栈 (words) | 条件 | 功能 |
|--------|--------|-----------|------|------|
| `wchnet` | 6 (最高) | 512 | 始终创建 | WCHNET 协议栈轮询 |
| `business` | 5 | 512 | `TEST_ENABLE_TCP_SEND=1` | DVP/预处理/发送主循环 |
| `testpat` | 4 | 256 | `TEST_PATTERN_MODE=1` | 测试图案生成 |
| `hb` | 3 (最低) | 256 | `TEST_ENABLE_HEARTBEAT=1` | 心跳调试打印 |
| TcpLogic 内部 | - | - | 始终创建 | 管理线程 (连接/心跳) |
> 测试模式创建 4 个任务,正常模式创建 3 个(无 testpat
---
## 9. 切换模式操作指南
### 9.1 从测试模式 → 正常模式
1. **修改宏**:打开 `prj/TCPClient/User/main.c`,将:
```c
#define TEST_PATTERN_MODE 1
```
改为:
```c
#define TEST_PATTERN_MODE 0
```
2. **检查传感器配置**:当前模组已通过 USB 预配置,`mini212g2.h` 中 UART 配置已用 `#if 0` 关闭,无需修改。如需重新启用,将 `#if 0` 改为 `#if 1`
3. **检查功能开关**:根据需要启用/禁用各子功能:
```c
#define TEST_ENABLE_TRIGGER 1 // 启用内部触发
#define TEST_ENABLE_NG_GPIO 1 // 启用 NG 输出(需接 PA8
```
4. **编译烧录**:使用 MRS IDE 编译并烧录。
### 9.2 从正常模式 → 测试模式
1. **修改宏**`TEST_PATTERN_MODE` 改为 `1`
2. **无需断开传感器**:测试模式跳过所有硬件初始化,传感器接线不影响
3. **编译烧录**
### 9.3 功能开关独立配置
各功能子开关在两种模式下均可独立启用/禁用,无互相依赖:
| 开关组合 | 行为 |
|---------|------|
| PATTERN=1, TRIGGER=1 | 测试模式 + 内部触发连拍(测试热点图案会触发) |
| PATTERN=1, TRIGGER=0, TEMP_REQ=1 | 测试模式 + 服务器按需请求(当前配置) |
| PATTERN=0, TRIGGER=1, TEMP_REQ=1 | 正常模式 + 自动触发 + 服务器请求(完整功能) |
| PATTERN=0, TRIGGER=0, TEMP_REQ=1 | 正常模式 + 仅服务器请求(最简运行) |
| TCP_SEND=0 | 禁用 business 任务,系统仅运行网络协议但不处理/发送帧 |
---
## 10. 常见配置场景
### 场景 A纯软件协议调试无硬件
```c
#define TEST_PATTERN_MODE 1
#define TEST_ENABLE_HEARTBEAT 1
#define TEST_ENABLE_TRIGGER 0
#define TEST_ENABLE_NG_GPIO 0
#define TEST_ENABLE_TEMP_REQ 1
#define TEST_ENABLE_TCP_SEND 1
```
**适用**:验证 TLV 协议、握手流程、Config 下发、帧分片发送等。
### 场景 B测试内部触发 + 连拍
```c
#define TEST_PATTERN_MODE 1
#define TEST_ENABLE_TRIGGER 1 // ← 打开
#define TEST_ENABLE_NG_GPIO 0
#define TEST_ENABLE_TEMP_REQ 1
#define TEST_ENABLE_TCP_SEND 1
```
**适用**:验证 80°C 触发阈值、3 帧连拍、连拍间隔。热点和棋盘格图案会触发。
### 场景 C正常模式完整功能
```c
#define TEST_PATTERN_MODE 0
#define TEST_ENABLE_TRIGGER 1
#define TEST_ENABLE_NG_GPIO 1 // ← PA8 接报警
#define TEST_ENABLE_TEMP_REQ 1
#define TEST_ENABLE_TCP_SEND 1
```
**适用**:生产运行,传感器实时采集 + 自动触发 + NG 报警 + 服务器请求。
### 场景 D正常模式最小功能验证
```c
#define TEST_PATTERN_MODE 0
#define TEST_ENABLE_TRIGGER 0
#define TEST_ENABLE_NG_GPIO 0
#define TEST_ENABLE_TEMP_REQ 1 // 仅响应服务器请求
#define TEST_ENABLE_TCP_SEND 1
```
**适用**:验证传感器数据采集 + 网络发送,无自动触发逻辑干扰。
### 场景 E网络连接诊断
```c
#define TEST_PATTERN_MODE 1
#define TEST_ENABLE_HEARTBEAT 1
#define TEST_ENABLE_TRIGGER 0
#define TEST_ENABLE_NG_GPIO 0
#define TEST_ENABLE_TEMP_REQ 0 // 关闭帧请求
#define TEST_ENABLE_TCP_SEND 0 // 关闭 business 任务
```
**适用**:仅测试 TCP 连接/断开/重连,不涉及数据帧处理。心跳打印确认系统活跃。
---
## 11. 已知注意事项
### 11.1 温度单位
系统统一使用 **0.1°C/LSB**
- 温度值 350 = 35.0°C
- 温度值 900 = 90.0°C
- `TEMP_RAW(deg_c) = (uint16_t)(deg_c * 10)`
### 11.2 TriggerTemperatureThreshold 值
温度阈值使用 0.1°C/LSB 单位,与系统所有温度值一致。当前测试默认 `TriggerTemperatureThreshold = 800`80.0°C测试热点图案 90.0°C值 900可正常触发。
### 11.3 服务器 Config2D 字段区分
- **Width / Height**(偏移 4-7设备分辨率标识如 256×192不影响 MCU 预处理
- **TargetWidth / TargetHeight**(偏移 23-26预处理输出目标尺寸**必须正确设置**
如果服务器只设了 Width/Height=64×64 而未设 TargetWidth/TargetHeightMCU 仍会使用超大目标尺寸(或上次缓存值),导致 `PP fail ret=-3` 或触发自动降尺寸。
### 11.4 正常模式默认目标尺寸
正常模式启动时 `TargetWidth=1, TargetHeight=1`(最小默认),必须等服务器下发 Config2D 后才会更新为正确值。测试模式自动加载 64×64。
### 11.5 IP 与端口硬编码
当前网络参数IP、端口为编译期常量更改需修改源码并重新编译
- MCU IP`main.c``IPAddr[]`
- 服务器 IP`qdx_tcp_logic.c``SERVER_IP`
- 端口号:`qdx_tcp_logic.c``CONTROL_PORT` / `DATA_PORT`
### 11.6 printf 限制
使用 newlib-nano仅支持 `%d, %x, %s` 格式。所有 `uint32_t` 变量必须强制转换 `(int)` 后打印,否则可能 HardFault。不支持 `%u, %lu, %f`

View File

@ -7,7 +7,7 @@
#define SENSOR_TOTAL_LINES (SENSOR_HEIGHT + 1) // +1 参数行 #define SENSOR_TOTAL_LINES (SENSOR_HEIGHT + 1) // +1 参数行
#define BYTES_PER_LINE (SENSOR_WIDTH * 2) // 每行512字节 #define BYTES_PER_LINE (SENSOR_WIDTH * 2) // 每行512字节
#define ALARM_TEMP_RAW 8000 // 80.00¡æ (raw/100) #define ALARM_TEMP_RAW 800 // 80.0¡æ (raw/10)
extern volatile uint8_t Line_Ready_Flag; extern volatile uint8_t Line_Ready_Flag;
extern volatile uint8_t *Ready_Line_Ptr; extern volatile uint8_t *Ready_Line_Ptr;

View File

@ -3,23 +3,21 @@
#include "ch32v30x.h" #include "ch32v30x.h"
/* ---- Temporary debug wiring option ---- /* ---- Sensor UART configuration ----
* Set to 1 to use USART3 (PB10=TX PB11=RX) for sensor communication. * USB MCU UART
* This steals the debug printf port use JTAG debugger for observation. * USART2 (PA2/PA3) 使
* Set to 0 for normal operation (USART2 / PA2+PA3). */ * MCU UART #if 0 #if 1
#define SENSOR_USE_USART3 0 * 使 USART3 (PB10/PB11) printf */
#if 0 /* MCU UART 配置已禁用 */
/* Set to 1 to enable UART commands to configure sensor at boot. #define SENSOR_USE_USART3 1 /* 必须用 USART3USART2 引脚已占用 */
* Set to 0 if sensor is pre-configured via USB to auto-output CMOS/DVP. #define SENSOR_UART_ENABLE 1
* Automatically forced to 1 when SENSOR_USE_USART3 is enabled. */ #define SENSOR_UART USART3
#if SENSOR_USE_USART3
#define SENSOR_UART_ENABLE 1
#define SENSOR_UART USART3
#else
#define SENSOR_UART_ENABLE 0
#define SENSOR_UART USART2
#endif
#define SENSOR_UART_BAUD 115200 #define SENSOR_UART_BAUD 115200
#else
#define SENSOR_USE_USART3 0
#define SENSOR_UART_ENABLE 0
#define SENSOR_UART_BAUD 115200
#endif
/** /**
* Initialize sensor. When SENSOR_UART_ENABLE=1, configures via UART. * Initialize sensor. When SENSOR_UART_ENABLE=1, configures via UART.

View File

@ -606,7 +606,7 @@ int main(void)
printf("=== TEST PATTERN MODE === No sensor/DVP hardware needed\r\n"); printf("=== TEST PATTERN MODE === No sensor/DVP hardware needed\r\n");
/* Skip Mini212G2_Init() and DVP_Init() */ /* Skip Mini212G2_Init() and DVP_Init() */
#else #else
Mini212G2_Init(); /* Configure sensor for CMOS/DVP Y16 output */ /* 模组已通过 USB 预配置,无需 MCU UART 配置,直接初始化 DVP */
DVP_Init(); DVP_Init();
#endif #endif
TIM2_Init(); TIM2_Init();
@ -643,12 +643,12 @@ int main(void)
test_cfg2d.TriggerRoiW = SENSOR_WIDTH; test_cfg2d.TriggerRoiW = SENSOR_WIDTH;
test_cfg2d.TriggerRoiH = SENSOR_HEIGHT; test_cfg2d.TriggerRoiH = SENSOR_HEIGHT;
test_cfg2d.TriggerCondition = 1; /* Max temperature */ test_cfg2d.TriggerCondition = 1; /* Max temperature */
test_cfg2d.TriggerTemperatureThreshold = 8000; /* 80.00°C */ test_cfg2d.TriggerTemperatureThreshold = 800; /* 80.0°C (0.1°C/LSB) */
test_cfg2d.TriggerBurstCount = 3; test_cfg2d.TriggerBurstCount = 3;
test_cfg2d.TriggerInternalIntervalMs = 200; test_cfg2d.TriggerInternalIntervalMs = 200;
test_cfg2d.NGioDelay = 200; test_cfg2d.NGioDelay = 200;
Preprocess_Settings_Change(&test_cfg2d, NULL, NULL); Preprocess_Settings_Change(&test_cfg2d, NULL, NULL);
printf("Test default config loaded: trigger thresh=8000 ROI=full burst=3\r\n"); printf("Test default config loaded: trigger thresh=800 ROI=full burst=3\r\n");
} }
#endif #endif