做家电、工控、医疗等安全相关产品,IEC 60730 ClassB 功能安全自检是必备环节。ST 最新发布的ClassB 4.0相比旧版改动巨大:库文件化、接口统一、兼容 SIL,但很多人在移植时卡在链接脚本、CRC 生成、路径配置、编译报错。
ST 官方 LAT1347 应用笔记,以STM32G031+CubeIDE为例,把 ClassB 4.0 移植全流程讲得清清楚楚。本文用最落地、可直接照做的方式,把环境搭建、工程配置、自检实现、避坑要点一次性讲透,看完就能一次移植成功。
资料获取:【应用笔记】LAT1347_基于STM32CubeIDE移植ClassB 4.0
1. ClassB 4.0 新版核心变化(先看懂再动手)
2. 必备环境安装(缺一不可)
移植前必须装好这 4 个工具:
- STM32CubeMX(生成工程)
- STM32CubeProgrammer(编译后自动计算 CRC)
- STM32CubeIDE(编译开发)
- X-CUBE-CLASSB 4.0 软件包(对应型号)
关键:把 STM32_Programmer_CLI.exe 所在目录加入系统环境变量,否则编译时无法生成 CRC。
3. CubeMX 工程创建要点
- 选择对应型号(如 G031)
- 使能定时器(时钟监测需要输入捕获)
- IDE 选择:STM32CubeIDE
- 生成代码后,把 X-CUBE-CLASSB 的
Middlewares目录拷贝到工程里
4. CubeIDE 工程配置(最容易错)
- 添加 ClassB 头文件路径
- 添加 ClassB 源文件
- 添加 ClassB 库文件(.a)
- 修改链接脚本
.ld文件,添加:- RAM 测试备份区(NOLOAD)
- Flash 结束地址标识
5. 4 大类功能安全自检实现(直接复制代码)
5.1 Flash 自检(CRC 校验)
5.2 RAM 自检
- 原理:通过读写 March 算法检测 RAM 故障
- 需要在链接脚本中定义备份缓冲段
- 支持:全片测试 / 分块测试
- 不破坏运行时数据
5.3 CPU 自检
- 最简单,无需配置参数
- 测试 CPU 运算、逻辑、寄存器
- 启动自检 + 运行自检接口一致
5.4 调度与故障处理
STL_SCH_Init():初始化调度器FailSafe_Handler():自检失败进入故障处理(如灯闪、系统锁死)
6. 最关键:编译后 CRC 生成脚本
直接把这段填入 Post-build steps:
arm-none-eabi-objcopy -O binary "${BuildArtifactFileBaseName}.elf" "${BuildArtifactFileBaseName}.bin" && arm-none-eabi-size "${BuildArtifactFileName}" && echo " \"STM32_Programmer_CLI.exe\" -sl \"${CWD}\\${BuildArtifactFileName}\" 0x8000000 0x08010000 0x400" > call_prg.bat && "${CWD}\call_prg.bat"
注意:
0x08010000要根据你的 Flash 大小修改- 段大小固定
0x400
7. 移植最容易踩的 7 个坑
- 没加环境变量 → CRC 脚本报错
- 没改链接脚本 → RAM 测试异常
- Flash 结束地址配置错误 → 自检不通过
- 没加 CRC 脚本 → Flash 自检永远失败
- 头文件 / 库文件路径错误 → 编译报错
- 定时器没开 → 时钟检测无法实现
- 用旧版 ClassB 思路移植新版 → 接口不兼容
8. 总结(工程师最简记忆版)
ClassB 4.0 移植就 3 步:
- 搭环境 + 配工程
- 改链接脚本 + 加 CRC 脚本
- 调用 Flash/RAM/CPU 自检 API
全程不用改底层、不用啃源码,照着 LAT1347 做,功能安全一次过审。
阅读全文
240