打印
[开发工具]

实战经验 | 使用STM32CubeIDE填充未用FLASH区域

[复制链接]
1740|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 STM新闻官 于 2024-2-28 14:25 编辑

一、引言
在 IAR 中有一个功能可以设置“将未用到 FLASH 区域填充成设定的数值(如 0xFF) 及是否计算 checksum”。STM32CubeIDE 中没有该功能的 GUI 实现,但可以通过修改 Link File 实现,本文就修改方法进行介绍。
二、STM32CubeIDE 未用 Flash 区域的填充
2.1. STM32CubeIDE GCC 工具链介绍
STM32CubeIDE 使用 GNU GCC arm 工具链进行编译,链接。具体来讲就是使用 arm -none-eabi-gcc 进行代码编译;使用 arm-none-eabi-gcc 进行链接(因为 arm-none-eabi-ld 对c/c++文件混合型生成的.o 文件支持性较差);使用 arm-none-eabi-objcopy 生成 hex, bin 文件;使用 arm-none-eabi-objdump 生成编译链接过程的信息文件等。如下面的STM32CubeIDE build 日志输出。填充 Flash 区域就是用到了 GNU GCC linker 的功能。

2.2. 用 0xFF 填充 Flash 未用区域
在 STM32CubeIDE 中,为了实现填充 Flash 未用区域,可以修改 Link 文件。具体做法是在 ld 文件中,在 Sections 中最后一个要放入 FLASH (> FLASH)的 section 之后,添加一个附加 section(如下例中 padding), 该 section 大小为剩余 FLASH 大小,内容为 0xFF。再将该 section 使用“> FLASH”放入 FLASH 即可。
下面以 STM32H747 工程中的一个 Link File 示例:
2.3. 代码区的 checksum如果需要计算代码区的 checksum,上例中的 padding section,则不要全部填充,可剩余1 到几个字节。如使用 16 位 checksum,则将 Number_bytes_checksum 设置为 2。

待完成 checksum 计算后,将 checksum 数值写入 bin 文件的最后几个字节即可生成完整的烧录 bin 文件。

三、 小结

本文介绍了在 STM32CubeIDE 中,利用 Link 文件实现 Flash 未用区域填充 0xFF(或其他数值)的方法,核心是增加填充了的 section。有需要的客户可以参考文中的具体实现方法。


使用特权

评论回复
沙发
STM新闻官|  楼主 | 2024-2-28 14:25 | 只看该作者
点击按钮下载《使用STM32CubeIDE填充未用FLASH区域》原文档。[color=var(--weui-LINK)]点击下载

使用特权

评论回复
板凳
STM新闻官|  楼主 | 2024-2-28 14:26 | 只看该作者

使用特权

评论回复
地板
zwsam| | 2024-2-29 08:56 | 只看该作者

使用特权

评论回复
5
药无尘| | 2024-2-29 14:54 | 只看该作者
为啥要填充未用FLASH呢

使用特权

评论回复
6
技术工程师| | 2024-3-4 14:37 | 只看该作者
同问

使用特权

评论回复
7
中国龙芯CDX| | 2025-2-9 15:07 | 只看该作者
GNU GCC arm 工具链进行编译,链接

使用特权

评论回复
8
Zuocidian| | 2025-2-12 22:31 | 只看该作者
在STM32CubeIDE中,填充未用FLASH区域的方法主要涉及到对链接文件(.ld或.icf)的修改

使用特权

评论回复
9
Puchou| | 2025-2-13 09:31 | 只看该作者
如果某些敏感信息存储在FLASH中,那么通过填充未用区域可以增加**者获取这些信息的难度

使用特权

评论回复
10
Xiashiqi| | 2025-2-13 11:53 | 只看该作者
在FLASH区段定义之后,添加一个新的区段来填充未用的FLASH区域。这个新区段的大小应该等于你希望填充的区域大小,内容可以设置为0xFF或其他你想要的值

使用特权

评论回复
11
小海师| | 2025-2-13 13:44 | 只看该作者
在某些情况下,如果未使用的FLASH区域没有被适当地填充,那么在后续写入操作时可能会意外地覆盖这些区域中的数据

使用特权

评论回复
12
Haizangwang| | 2025-2-13 16:19 | 只看该作者
当需要对FLASH进行调试或维护时,知道哪些区域是未被使用的可以帮助开发人员更快地定位问题和进行必要的修改

使用特权

评论回复
13
tpgf| | 2025-3-4 13:56 | 只看该作者
在链接脚本文件中,查看对FLASH和RAM的定义部分,了解当前程序在内存中的分布情况

使用特权

评论回复
14
xiaoqizi| | 2025-3-6 09:45 | 只看该作者
在STM32CubeIDE中填充未用FLASH区域,可以通过修改链接脚本文件(.ld或.sct文件)来实现

使用特权

评论回复
15
木木guainv| | 2025-3-6 13:32 | 只看该作者
如果您的项目使用的是STM32CubeMX生成的模板代码,那么可以在项目的“LinkerScript”文件夹中找到对应的.ld文件。如果没有该文件夹,则需要手动创建,并将链接脚本文件放入其中。

使用特权

评论回复
16
Jiangxiaopi| | 2025-3-6 17:06 | 只看该作者
在.sct文件中,我们需要使用END_OF_BLOCK命令来指定填充区域

使用特权

评论回复
17
荣陶陶| | 2025-3-7 10:39 | 只看该作者
保存对链接脚本文件的修改后,重新编译项目。编译器会根据新的链接脚本文件将未用的FLASH区域填充为指定的值。

使用特权

评论回复
18
Zhiniaocun| | 2025-3-7 14:18 | 只看该作者
填充区域的内容除了可以设置为0xFF,还有其他可选内容吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:您的嵌入式应用将得益于意法半导体领先的产品架构、技术、多源产地和全方位支持。意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器。

1274

主题

1485

帖子

19

粉丝