前言
大家都知道 ST 的 ClassB 功能安全软件设计包是免费的,也有众多客户基于STM32CubeIDE 免费的 IDE 进行开发,本文档将展示如何轻松的实现 ClassB 在STM32CubeIDE 上的移植。
准备
硬件:NUCLEO-G070
软件:X-CUBE-CLASSB version 2.3.0
创建 CubeMX 工程
在 CubeMX 中创建闪灯和串口打印的基础工程,并在实验板上验证工程的正确性。然后继续配置 IWDG、WWDG、CRC 外设。为了避免程序在移植和调试时产生复位,可以在 CubeMX 中配置为不调用。
移植过程中可能遇到的问题
问题 1:编译通过,无错误,但是发现 hex 文件只有 132B。
方法:通过 map 文件,发现 source 包含的一些文件夹不见了,在工程选项中添加对应的文件即可。
问题 2:#define ALLOC_GLOBALS 这个宏定义是为了防止变量的多次重复定义。
方法:需要检查其应当放在对应的相关变量的头文件之前。
问题 3:初始化时,在 CubeIDE 中出现了各种 startup 阶段的失败,
方法:需要将 ClassB lib 的优化等级设置为-O1 才可以。
问题 4:Runtime 时出现“Run-time FLASH CRC Error”的错误
方法:原因在于为了方便调试,下载了没有带 CRC 的 hex 文件,改成带 CRC 的 hex 文件后就没问题了。
问题 5:时钟检测不过,测试时,发现工程为 F030,但实际芯片是 F042,二者存在时钟配置上的差异,主要是 SystemInit 和 SystemCoreClockUpdate 函数中的差异。
方法:按照实际芯片正确配置时钟即可。
小结
在移植 ClassB 的过程中,难免会出现各种各样的编译错误,我们要有耐心,根据工具的提示,逐个消除错误即可。本文档提供了对应的例程,用户可以对比参考使用。