做家电、电机、小家电产品,IEC 60730 ClassB 功能安全自检 是绕不开的门槛。但很多人在移植时遇到:编译报错、链接脚本不对、CRC 生成失败、运行自检不通过……
ST 官方 LAT1257 应用笔记,专门教你从零开始,在 STM32CubeIDE 里快速搭建可直接运行的 ClassB 工程 ,基于 STM32G070 实测,步骤清晰、可直接复刻。
1. 先搞懂:ClassB 工程要做什么
ClassB 是针对 IEC 60335-1 家电安全标准的自检库,主要实现:
- CPU 自检
- RAM 全检 / 分段检
- Flash 完整性 CRC 校验
- 时钟频率监测
- 看门狗、窗口看门狗监测
- 程序流监控(CFC)
LAT1257 使用的是 X-CUBE-CLASSB V2.3.0 版本,基于 CubeIDE 环境。
2. 搭建前准备
- 硬件:NUCLEO-G070
- 软件:STM32CubeIDE + CubeMX
- 软件包:X-CUBE-CLASSB V2.3.0
3. CubeMX 基础工程配置
- 新建工程,配置时钟、GPIO、串口
- 使能 IWDG、WWDG、CRC
- 生成代码,验证基础工程可正常运行
4. ClassB 工程搭建 7 个关键步骤(照着做就行)
4.1 复制 Middlewares 文件夹
把 X-CUBE-CLASSB 里的Middleware整个拷贝到工程根目录。
4.2 添加 3 个汇编文件
复制到 startup 目录:
- stm32g0xx_STLcpurunGCC.s
- stm32g0xx_STLcpustartGCC.s
- stm32g0xx_STLRamMcMxGCC.s
4.3 复制 CRC 生成脚本
拷贝crc_gen_gcc.bat到工程目录,并修改 bat 里的工程名 。
4.4 修改链接脚本 .ld
这是最关键一步,必须添加:
- CLASSB RAM 区域
- .check_sum 段
- .user_classb 段
- 正确的 RAM/FLASH 地址划分
4.5 添加头文件路径
在 Paths and Symbols 里加入:Middleware/ST/CLASSB_LIB/inc
4.6 复制配置头文件
将stm32xx_STLparam.h复制到Core/Inc。
4.7 添加编译后命令
在 Post-build steps 中添加:
arm-none-eabi-objcopy -O binary "<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi>B</mi><mi>u</mi><mi>i</mi><mi>l</mi><mi>d</mi><mi>A</mi><mi>r</mi><mi>t</mi><mi>i</mi><mi>f</mi><mi>a</mi><mi>c</mi><mi>t</mi><mi>F</mi><mi>i</mi><mi>l</mi><mi>e</mi><mi>B</mi><mi>a</mi><mi>s</mi><mi>e</mi><mi>N</mi><mi>a</mi><mi>m</mi><mi>e</mi></mrow><mi mathvariant="normal">.</mi><mi>e</mi><mi>l</mi><mi>f</mi><mi mathvariant="normal">"</mi><mi mathvariant="normal">"</mi></mrow></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut"></span><span class="mord"><span class="mord mathnormal">B</span><span class="mord mathnormal">u</span><span class="mord mathnormal">i</span><span class="mord mathnormal">l</span><span class="mord mathnormal">d</span><span class="mord mathnormal">A</span><span class="mord mathnormal">r</span><span class="mord mathnormal">t</span><span class="mord mathnormal">i</span><span class="mord mathnormal">f</span><span class="mord mathnormal">a</span><span class="mord mathnormal">c</span><span class="mord mathnormal">tF</span><span class="mord mathnormal">i</span><span class="mord mathnormal">l</span><span class="mord mathnormal">e</span><span class="mord mathnormal">B</span><span class="mord mathnormal">a</span><span class="mord mathnormal">se</span><span class="mord mathnormal">N</span><span class="mord mathnormal">am</span><span class="mord mathnormal">e</span></span><span class="mord">.</span><span class="mord mathnormal">e</span><span class="mord mathnormal">l</span><span class="mord mathnormal">f</span><span class="mord">""</span></span></span></span>{BuildArtifactFileBaseName}.bin" && arm-none-eabi-size "${BuildArtifactFileName}" && ..\crc_gen_gcc.bat
5. 工程运行后正常输出(成功标志)
编译下载后,串口输出如下信息,说明 ClassB 正常运行:
*******Self Test Library Init ****
Start-up CPU Test OK
Start-up FLASH 32-bit CRC OK
Full RAM Test OK
Clock frequency OK
... main routine starts ....
6. LAT1257 总结的 5 个高频坑(提前避开)
1. 编译正常,但 hex 只有 132 字节
原因:缺少源文件路径,重新添加 CLASSB 文件夹即可。
2. 变量重复定义报错
解决:确保ALLOC_GLOBALS宏放在头文件最前面。
3.启动阶段自检失败
解决:ClassB 库编译等级设为 -O1 。
4.运行提示 FLASH CRC Error
解决:必须下载带 CRC 的 .hex 文件。
5. 时钟检测不过
解决:核对芯片型号,时钟配置必须与实际芯片一致。
用 STM32CubeIDE 搭建 ClassB 工程,只要做好 复制文件 → 改链接脚本 → 加 CRC 脚本 → 配置头文件路径 ,就能一次性跑通。LAT1257 是 ST 官方最实用的 ClassB 入门文档,新手照着做也能一次成功 。 |
赞赞赞