1. 1. ISRW1 Internal Short Detection - Port Summary
    1. 1.1. 移植完成日期
    2. 1.2. 移植概述
    3. 1.3. 其他项目移植指南
      1. 1.3.1. 概述
      2. 1.3.2. 移植架构图
      3. 1.3.3. 步骤1: 复制核心文件 (无需修改)
      4. 1.3.4. 步骤2: 创建集成层 (需要实现)
        1. 1.3.4.1. 2.1 创建文件
        2. 1.3.4.2. 2.2 必须实现的接口函数
          1. 1.3.4.2.1. 接口1: 获取电池参数
          2. 1.3.4.2.2. 接口2: 系统时间获取
          3. 1.3.4.2.3. 接口3: 调试输出 (可选)
        3. 1.3.4.3. 2.3 集成层API (对外接口)
      5. 1.3.5. 步骤3: 修改主程序
        1. 1.3.5.1. 3.1 添加头文件
        2. 1.3.5.2. 3.2 初始化阶段
        3. 1.3.5.3. 3.3 定期调用 (建议1秒)
      6. 1.3.6. 步骤4: 更新电池特性表 (⚠️ 重要)
        1. 1.3.6.1. 4.1 OCV表更新 (必须)
        2. 1.3.6.2. 4.2 IR表更新 (必须)
        3. 1.3.6.3. 4.3 表格验证工具
      7. 1.3.7. 步骤5: 编译配置
        1. 1.3.7.1. 5.1 添加源文件到编译
        2. 1.3.7.2. 5.2 添加头文件路径
        3. 1.3.7.3. 5.3 可选配置宏
      8. 1.3.8. 步骤6: 验证测试
        1. 1.3.8.1. 5.1 编译验证
        2. 1.3.8.2. 5.2 功能验证
        3. 1.3.8.3. 5.3 检测验证
      9. 1.3.9. 移植检查清单
        1. 1.3.9.1. ✅ 文件复制
        2. 1.3.9.2. ✅ 电池特性表更新 ⚠️
        3. 1.3.9.3. ✅ 接口实现
        4. 1.3.9.4. ✅ 集成层API
        5. 1.3.9.5. ✅ 主程序修改
        6. 1.3.9.6. ✅ 编译配置
      10. 1.3.10. 常见平台示例
        1. 1.3.10.1. STM32 (HAL库)
        2. 1.3.10.2. FreeRTOS
        3. 1.3.10.3. Arduino
        4. 1.3.10.4. ESP32
      11. 1.3.11. 关键注意事项
        1. 1.3.11.1. ⚠️ 必须更新电池特性表 (最重要!)
        2. 1.3.11.2. ⚠️ 数据单位必须正确
        3. 1.3.11.3. ⚠️ 更新频率要求
        4. 1.3.11.4. ⚠️ 检测条件
      12. 1.3.12. 参考实现
    4. 1.4. Newton固件移植文件清单
      1. 1.4.1. 新增文件
      2. 1.4.2. 修改文件
    5. 1.5. 关键差异处理
      1. 1.5.1. 1. 参数获取方式
      2. 1.5.2. 2. 时间管理
      3. 1.5.3. 3. 打印函数
      4. 1.5.4. 4. 数据单位
    6. 1.6. 功能特性
      1. 1.6.1. 核心算法
      2. 1.6.2. 滤波处理
      3. 1.6.3. 状态机
    7. 1.7. 调用流程
    8. 1.8. API接口
      1. 1.8.1. 初始化
      2. 1.8.2. 更新检测
      3. 1.8.3. 复位检测
      4. 1.8.4. 获取结果
    9. 1.9. 配置参数
      1. 1.9.1. isrw1_detect.h
      2. 1.9.2. isrw1_filter.h
    10. 1.10. 代码空间占用(估算)
    11. 1.11. 注意事项
      1. 1.11.1. 1. GGMEM访问
      2. 1.11.2. 2. 温度单位
      3. 1.11.3. 3. SOC单位
      4. 1.11.4. 4. 检测条件
      5. 1.11.5. 5. Sleep模式
    12. 1.12. 测试建议
      1. 1.12.1. 1. 编译测试
      2. 1.12.2. 2. 功能测试
      3. 1.12.3. 3. 长期测试
    13. 1.13. 后续优化
    14. 1.14. 版本历史
    15. 1.15. 参考文档

电量计 -- 电池微短路的算法移植从STM32主机到电量计IC从机

ISRW1 Internal Short Detection - Port Summary

移植完成日期

2025年

移植概述

将STM32F407主机端的ISRW1电池内部短路检测算法移植到Newton电量计固件中。


其他项目移植指南

概述

ISRW1模块采用分层设计,核心算法与平台无关,仅需实现集成层接口即可移植到其他项目。

移植架构图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
┌─────────────────────────────────────────┐
│ 主程序 (main.c) │
│ - 调用初始化 │
│ - 定期调用更新函数 │
└──────────────┬──────────────────────────┘

┌──────────────▼──────────────────────────┐
│ 集成层 (需要实现) │
│ - isrw1_integration.h/.c │
│ - 获取电压/电流/温度/SOC/FCC │
│ - 获取系统时间 │
│ - 调试打印输出 │
└──────────────┬──────────────────────────┘

┌──────────────▼──────────────────────────┐
│ 核心算法层 (直接复制) │
│ - isrw1_detect.h/.c │
│ - isrw1_filter.h/.c │
│ - isrw1_tables.c │
│ - 与平台无关 │
└─────────────────────────────────────────┘

步骤1: 复制核心文件 (无需修改)

以下文件可以直接复制到目标项目,无需修改

1
2
3
4
5
6
7
源文件                          → 目标位置
────────────────────────────────────────────────
user/isrw1_detect.h → [your_src]/
user/isrw1_detect.c → [your_src]/
user/isrw1_filter.h → [your_src]/
user/isrw1_filter.c → [your_src]/
user/isrw1_tables.c → [your_src]/

这些文件包含:

  • ✅ ISRW1核心检测算法
  • ✅ 中值滤波 + 卡尔曼滤波
  • ✅ IR表和OCV查找表
  • ✅ 状态机逻辑

步骤2: 创建集成层 (需要实现)

创建平台相关的集成层文件:

2.1 创建文件

1
2
[your_src]/isrw1_integration.h
[your_src]/isrw1_integration.c

2.2 必须实现的接口函数

isrw1_integration.c 中实现以下接口:

接口1: 获取电池参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 获取电池电压 (mV)
static int32_t get_battery_voltage(void)
{
// TODO: 返回当前电池电压,单位mV
// 示例: return your_adc_read_voltage();
}

// 获取电池电流 (mA, 充电为正,放电为负)
static int32_t get_battery_current(void)
{
// TODO: 返回当前电池电流,单位mA
// 充电: 返回正值
// 放电: 返回负值
// 示例: return your_coulomb_counter_read();
}

// 获取电池温度 (0.1°C)
static int32_t get_battery_temperature(void)
{
// TODO: 返回电池温度,单位0.1°C
// 例如: 25.6°C 返回 256
// 示例: return your_ntc_read() * 10;
}

// 获取相对SOC (0.01%)
static uint32_t get_rsoc(void)
{
// TODO: 返回相对SOC,单位0.01%
// 例如: 50.00% 返回 5000
// 示例: return your_fuel_gauge_get_soc() * 100;
}

// 获取满充容量FCC (mAh)
static uint32_t get_fcc(void)
{
// TODO: 返回满充容量,单位mAh
// 示例: return your_fuel_gauge_get_fcc();
}
接口2: 系统时间获取
1
2
3
4
5
6
7
8
// 获取系统运行时间 (秒)
static uint32_t get_system_time(void)
{
// TODO: 返回系统启动以来的总秒数
// 示例: return HAL_GetTick() / 1000; // STM32
// 示例: return xTaskGetTickCount() / 1000; // FreeRTOS
// 示例: return millis() / 1000; // Arduino
}
接口3: 调试输出 (可选)
1
2
3
4
5
6
7
8
9
10
11
12
13
// 调试打印函数
static void debug_print(const char *fmt, ...)
{
// TODO: 实现调试输出
// 可以输出到UART、RTT、LOG系统等
// 如果不需要调试信息,可以留空

// 示例 (使用vprintf):
// va_list args;
// va_start(args, fmt);
// vprintf(fmt, args);
// va_end(args);
}

2.3 集成层API (对外接口)

isrw1_integration.h 中声明,在 .c 中实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 初始化ISRW1模块
int32_t isrw1_integration_init(void);

// 更新ISRW1检测 (定期调用,建议1秒)
// 返回: 0=正常, 1=检测到泄漏并报警, -1=错误
int32_t isrw1_integration_update(void);

// 复位检测状态
void isrw1_integration_reset(void);

// 获取当前泄漏电流 (mA)
int16_t isrw1_integration_get_leak_current(void);

// 获取当前短路电阻 (ohm)
uint16_t isrw1_integration_get_resistance(void);

// 获取报警状态 (0=正常, 1=报警)
uint8_t isrw1_integration_is_alert(void);

步骤3: 修改主程序

在主程序中集成ISRW1:

3.1 添加头文件

1
#include "isrw1_integration.h"

3.2 初始化阶段

1
2
3
4
5
6
7
8
9
void main_init(void)
{
// ... 其他初始化 ...

// 初始化ISRW1
isrw1_integration_init();

// ... 其他初始化 ...
}

3.3 定期调用 (建议1秒)

1
2
3
4
5
6
7
8
9
10
11
12
13
void main_loop(void)  // 或定时器中断
{
// ... 更新电量计等 ...

// 更新ISRW1检测
int32_t result = isrw1_integration_update();
if (result == 1) {
// 检测到泄漏电流,触发报警
// TODO: 执行报警动作
}

// ... 其他处理 ...
}

步骤4: 更新电池特性表 (⚠️ 重要)

4.1 OCV表更新 (必须)

⚠️ 警告: g_isrw1_ocv_table 必须根据实际电池型号进行建模更新!

当前表格只是示例数据,必须替换为实际电池的 OCV-SOC 曲线:

1
2
3
4
5
6
7
8
// isrw1_tables.c
const ISRW1_OCV_Entry_t g_isrw1_ocv_table[65] = {
// {OCV(mV), Capacity(0.01%)}
{2504, 0}, // 0% SOC 对应的开路电压
{2758, 156}, // 1.56% SOC
// ... 根据电池建模数据填充 ...
{4167, 10000} // 100% SOC
};

如何获取 OCV 数据

  1. 电池厂商提供: 向电池供应商索要 OCV-SOC 曲线数据表
  2. 实测建模:
    • 让电池静置 2-4 小时达到平衡态
    • 从 100% 放电到 0%,每 5% 测量一次开路电压
    • 记录电压-容量对应关系
  3. 电化学建模: 使用电池模型软件 (如 COMSOL, MATLAB) 进行仿真

OCV 表要求

  • 至少 10 个数据点,建议 50-100 个点
  • 覆盖完整的 SOC 范围 (0%-100%)
  • 电压单位: mV
  • 容量单位: 0.01% (10000 = 100%)
  • 必须单调递增

4.2 IR表更新 (必须)

⚠️ 警告: g_isrw1_ir_table 也需要根据实际电池更新!

1
2
3
4
5
6
7
8
// isrw1_tables.c
const ISRW1_IR_Entry_t g_isrw1_ir_table[4] = {
// {Temperature(0.1°C), Internal_Resistance(mOhm)}
{-100, 91}, /* -10.0°C, 91 mΩ */
{0, 61}, /* 0.0°C, 61 mΩ */
{250, 29}, /* 25.0°C, 29 mΩ */
{450, 25} /* 45.0°C, 25 mΩ */
};

如何获取 IR 数据

  1. 电池厂商提供: 索要 DCIR (直流内阻) vs 温度曲线
  2. 实测方法:
    • 使用内阻测试仪在不同温度下测量
    • 或使用脉冲电流法: IR = ΔV / ΔI
  3. 典型值参考:
    • 18650锂电池: 20-80 mΩ
    • 软包电池: 10-50 mΩ
    • 低温时内阻增加 2-3 倍

IR 表要求

  • 至少覆盖工作温度范围 (-20°C 到 60°C)
  • 温度单位: 0.1°C (-100 = -10.0°C)
  • 内阻单位: mΩ (毫欧)
  • 温度必须单调递增

4.3 表格验证工具

建议创建简单的验证脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# verify_tables.py
def verify_ocv_table(ocv_table):
"""验证 OCV 表是否单调递增"""
for i in range(len(ocv_table) - 1):
if ocv_table[i][0] >= ocv_table[i+1][0]:
print(f"错误: OCV[{i}]电压不单调递增")
if ocv_table[i][1] >= ocv_table[i+1][1]:
print(f"错误: OCV[{i}]容量不单调递增")
print("OCV表验证通过")

def verify_ir_table(ir_table):
"""验证 IR 表温度单调递增"""
for i in range(len(ir_table) - 1):
if ir_table[i][0] >= ir_table[i+1][0]:
print(f"错误: IR[{i}]温度不单调递增")
print("IR表验证通过")

步骤5: 编译配置

5.1 添加源文件到编译

将以下文件加入项目编译:

  • isrw1_detect.c
  • isrw1_filter.c
  • isrw1_tables.c ⚠️ 更新后的表格文件
  • isrw1_integration.c

5.2 添加头文件路径

确保编译器能找到头文件:

1
-I[your_src]/   # 包含ISRW1相关头文件的目录

5.3 可选配置宏

isrw1_detect.h 中可调整:

1
2
3
#define ISRW1_DETECTION_INTERVAL    (60*60)  // 检测间隔(秒)
#define ISRW1_LEAK_ALERT_CURRENT (100) // 报警阈值(mA)
#define ISRW1_ENABLE_KALMAN_FILTER 1 // 0=禁用, 1=启用

步骤6: 验证测试

5.1 编译验证

1
# 编译项目,确保无错误和警告

5.2 功能验证

  • 初始化成功,返回0
  • 参数获取函数返回合理值
  • 每秒调用更新函数,无异常
  • 调试输出正常 (如果启用)

5.3 检测验证

  • 静置60分钟后触发检测
  • 充电/放电时状态切换正常
  • 泄漏电流计算结果合理
  • 报警阈值触发正常

移植检查清单

✅ 文件复制

  • isrw1_detect.h
  • isrw1_detect.c
  • isrw1_filter.h
  • isrw1_filter.c
  • isrw1_tables.c (复制后需更新表格数据)

✅ 电池特性表更新 ⚠️

  • 获取实际电池的 OCV-SOC 曲线数据
  • 更新 g_isrw1_ocv_table (至少10个点,建议50-100点)
  • 获取实际电池的 DCIR-温度曲线数据
  • 更新 g_isrw1_ir_table (覆盖工作温度范围)
  • 验证表格数据单调性

✅ 接口实现

  • get_battery_voltage() - 电压读取
  • get_battery_current() - 电流读取
  • get_battery_temperature() - 温度读取
  • get_rsoc() - SOC读取
  • get_fcc() - FCC读取
  • get_system_time() - 系统时间
  • debug_print() - 调试输出 (可选)

✅ 集成层API

  • isrw1_integration_init()
  • isrw1_integration_update()
  • isrw1_integration_reset()
  • isrw1_integration_get_leak_current()
  • isrw1_integration_get_resistance()
  • isrw1_integration_is_alert()

✅ 主程序修改

  • 包含 isrw1_integration.h
  • 初始化阶段调用 isrw1_integration_init()
  • 定期调用 isrw1_integration_update()

✅ 编译配置

  • 添加源文件到编译
  • 添加头文件路径
  • 编译无错误和警告

常见平台示例

STM32 (HAL库)

1
2
3
4
static uint32_t get_system_time(void)
{
return HAL_GetTick() / 1000; // ms → s
}

FreeRTOS

1
2
3
4
static uint32_t get_system_time(void)
{
return xTaskGetTickCount() * portTICK_PERIOD_MS / 1000;
}

Arduino

1
2
3
4
static uint32_t get_system_time(void)
{
return millis() / 1000;
}

ESP32

1
2
3
4
static uint32_t get_system_time(void)
{
return esp_timer_get_time() / 1000000; // us → s
}

关键注意事项

⚠️ 必须更新电池特性表 (最重要!)

ISRW1 算法的检测精度完全依赖于准确的 OCV 和 IR 表!

表格 必须性 影响
OCV表 必须更新 使用错误的OCV表会导致检测完全失效
IR表 必须更新 影响内阻计算精度,建议同时更新

获取方法

  1. 向电池供应商索要电池规格书中的 OCV-SOC 曲线和 DCIR 数据
  2. 使用电池测试设备实测(静置法测 OCV,脉冲法测 IR)
  3. 参考同型号电池的已有数据(精度较低,不推荐)

不更新表格的后果

  • ❌ 检测到的泄漏电流值不准确
  • ❌ 误报警或漏报警
  • ❌ 算法失去意义

⚠️ 数据单位必须正确

参数 单位 说明
电压 mV 如ADC返回V,需乘1000
电流 mA 充电为正,放电为负
温度 0.1°C 25.6°C = 256
SOC 0.01% 50.00% = 5000
FCC mAh 直接返回
OCV mV 表格中的开路电压
IR 表格中的内阻(毫欧)

⚠️ 更新频率要求

  • 建议每秒调用一次 isrw1_integration_update()
  • 检测间隔默认60分钟,可配置
  • 更新频率过低会影响检测精度

⚠️ 检测条件

只有同时满足以下条件才会触发检测:

  • ✅ 达到检测间隔 (默认60分钟)
  • ✅ 电流变化 < 50mA
  • ✅ 温度变化 < 10°C (0.1°C单位 = 100)
  • ✅ 当前电流 < 10mA (接近静置)

参考实现

可参考本项目中的Newton固件实现:

  • user/isrw1_integration.c - Newton平台集成层实现
  • user/main.c - 主程序集成示例

Newton固件移植文件清单

新增文件

  1. user/isrw1_detect.h - ISRW1核心算法头文件
  2. user/isrw1_detect.c - ISRW1核心算法实现
  3. user/isrw1_tables.c - IR表和OCV表
  4. user/isrw1_filter.h - 滤波器头文件
  5. user/isrw1_filter.c - 中值滤波(必需) + 卡尔曼滤波(可选)
  6. user/isrw1_integration.h - Newton固件集成层头文件
  7. user/isrw1_integration.c - Newton固件集成层实现
  8. ISRW1_PORT_SUMMARY.md - 本文档

修改文件

  1. user/main.c
    • 添加头文件: #include "isrw1_integration.h"
    • 添加初始化: isrw1_integration_init() in main_init()
    • 添加更新调用: isrw1_integration_update() after gg_sync_result()

关键差异处理

1. 参数获取方式

  • 源项目: 通过I2C从SD77428电量计芯片读取

    1
    2
    3
    sd77428_get_battery_voltage()
    sd77428_get_battry_current()
    sd77428_get_ggmem()
  • 目标项目: 直接从Newton固件内部获取

    1
    2
    3
    4
    5
    sbsif_get_data(SBS09_BATTVOLT)      // 电压
    sbsif_get_data(SBS0A_BATTCURR) // 电流
    sbsif_get_data(SBS60_ITDK) // 温度(0.1°C)
    get_ggmem_ptr(0)[1] // FCC from GGMEM0[4-7]
    get_ggmem_ptr(1)[0] // rsoc_now (0.01%) from GGMEM1[0-3]

2. 时间管理

  • 源项目: HAL_GetTick() (STM32 HAL库)
  • 目标项目: systime_get_total_time() (Newton系统时间)

3. 打印函数

  • 源项目: MCU_PRINTLN()
  • 目标项目: dbg_print()

4. 数据单位

  • 电压: mV (一致)
  • 电流: mA (一致)
  • 温度: 0.1°C (一致)
  • SOC: 0.01% (rsoc_now from GGMEM,不是百分比)
  • FCC: mAh (一致)

功能特性

核心算法

  • 检测间隔: 60分钟 (可配置 ISRW1_DETECTION_INTERVAL)
  • 更新频率: 每秒调用一次 (与fg_update周期一致)
  • 检测原理: 比较基于电压的容量变化和基于库仑计数的容量变化
  • 报警阈值: 100mA 泄漏电流 (可配置 ISRW1_LEAK_ALERT_CURRENT)

滤波处理

  1. 中值滤波 (必需)

    • 窗口大小: 11个样本
    • 用于电阻值平滑
    • 去除异常值
  2. 卡尔曼滤波 (可选,宏控制)

    • 控制宏: ISRW1_ENABLE_KALMAN_FILTER
    • 用于泄漏电流平滑
    • 自适应参数调整

状态机

  • IDLE: 静置状态 (|I| < 10mA)
  • CHARGING: 充电状态 (I > 10mA)
  • DISCHARGING: 放电状态 (I < -10mA)
  • 状态切换时自动重置检测定时器

调用流程

1
2
3
4
5
6
7
8
main_firmware()
└─> main_init()
└─> isrw1_integration_init() // 初始化ISRW1

└─> (每秒执行)
└─> fg_update() // 更新电量计
└─> gg_sync_result() // 同步结果到SBS
└─> isrw1_integration_update() // 更新ISRW1检测

API接口

初始化

1
int32_t isrw1_integration_init(void);

更新检测

1
2
3
4
5
int32_t isrw1_integration_update(void);
// 返回值:
// 0: 正常,无报警
// 1: 检测到泄漏电流,触发报警
// -1: 错误

复位检测

1
void isrw1_integration_reset(void);

获取结果

1
2
3
int16_t isrw1_integration_get_leak_current(void);    // 获取滤波后的泄漏电流(mA)
uint16_t isrw1_integration_get_resistance(void); // 获取滤波后的短路电阻(ohm)
uint8_t isrw1_integration_is_alert(void); // 获取报警状态

配置参数

isrw1_detect.h

1
2
3
4
#define ISRW1_DETECTION_INTERVAL    (60*60)  // 检测间隔(秒)
#define ISRW1_UPDATE_INTERVAL (1) // 更新间隔(秒)
#define ISRW1_LEAK_ALERT_CURRENT (100) // 报警阈值(mA)
#define ISRW1_ENABLE_KALMAN_FILTER 1 // 卡尔曼滤波使能(0/1)

isrw1_filter.h

1
#define ISRW1_MEDIAN_WINDOW_SIZE    11       // 中值滤波窗口大小

代码空间占用(估算)

模块 大小 (约)
核心算法 (isrw1_detect.c) ~2KB
查找表 (isrw1_tables.c) ~0.5KB
中值滤波 (isrw1_filter.c) ~1KB
卡尔曼滤波 (可选) ~1KB
集成层 (isrw1_integration.c) ~1KB
总计 ~5.5KB
不含卡尔曼 ~4.5KB

注意事项

1. GGMEM访问

  • 当前使用 get_ggmem_ptr() 直接访问gg_mem数组
  • 需要确认Newton固件中GGMEM的实际内存布局
  • 可能需要根据实际情况调整偏移量

2. 温度单位

  • 已确认SBS60_ITDK返回0.1°C单位
  • 与ISRW1算法要求一致,无需转换

3. SOC单位

  • 重要: GGMEM1[0-3]存储的是rsoc_now,单位为0.01%
  • 不要使用SBS0D_RSOC(百分比),会导致精度损失

4. 检测条件

算法要求以下条件才会进行检测:

  • 电流变化 < 50mA
  • 温度变化 < 10°C (0.1°C单位即100)
  • 当前电流 < 10mA (接近静置)
  • 经过完整的检测间隔(60分钟)

5. Sleep模式

  • 当前在Sleep模式下不调用fg_update,因此也不会调用ISRW1
  • 将来需要考虑在Sleep间隔时间累积到ISRW1定时器中

测试建议

1. 编译测试

1
2
# 在Keil MDK中编译项目
# 检查是否有编译错误和警告

2. 功能测试

  • 初始化正常
  • 参数获取正确
  • 检测定时器工作
  • 中值滤波有效
  • 卡尔曼滤波有效(如果使能)
  • 报警触发正常

3. 长期测试

  • 60分钟检测周期验证
  • 静置状态检测
  • 充电/放电状态切换
  • Sleep/Wake切换

后续优化

  1. Sleep时间累积

    • 在Sleep模式下累积经过的时间
    • Wake后补偿ISRW1定时器
  2. SBS寄存器集成

    • 将检测结果存储到SBS寄存器
    • 方便主机端读取
  3. 参数调优

    • 根据实际测试结果调整检测间隔
    • 优化滤波器参数
    • 调整报警阈值
  4. 日志记录

    • 将检测结果记录到BlackBox
    • 方便故障分析

版本历史

版本 日期 说明
1.0 2025 初始移植完成

参考文档

  • STM32F407-SDK/README_analyze_isrw1.md
  • STM32F407-SDK/USAGE_EXAMPLE.md
  • STM32F407-SDK/QUICK_START.md