工具就要用全套
玩STM32那就干脆使用ST官方的CubeIDE、CubeProgrammer来干STM32的活。
外部flash烧录算法那也用ST家工具的尝试着做一个吧。
代码已经发布到gitee
ExternalLoader
创建STM32CubeIDE工程
-
在.ioc文件中配置好外设后,在Project Manager选项卡下勾选Do not generate the main(),如下图。勾选完毕。选择LL库生成代码,因为HAL库生成的代码涉及systick中断,本工程的代码不使用中断。然后生成代码即可。
-
添加[External Loader]例程文件中[Sources/Loader Files文件夹]到工程中。如果装了STM32CubeProgrammer,例程可以在安装目录的xxx\STM32CubeProgrammer\bin\ExternalLoader中找到。此处我将例程一起放入工程中。修改文件,完善SPI FLASH相关接口。
-
复制TrueSTDUIO工程中的[linker]文件到工程中。在工程属性中添加该linker文件。
对ExternalLoader例程的修改之处
- 修改linker文件 .Dev_Info段
- 修改Dev_Inf.c文件,指定结构体分配到 .Dev_Info段中
编译相关选项设置
-
Debug level 设置。
-
去掉红框里2个勾。使得函数所在的段,数据所在的段按照linker分配的段编译。
-
在Build Steps中添加命令
cmd.exe /C copy/Y "${ProjName}.elf" ".\${ProjName}.stldr"
编写SPI FLASH 相关函数,替换示例文件的接口为开发板对应的SPI FLASH程序
- 编译完成后,将stldr文件到复制到CubeProgrammer中对应的烧录算法文件夹中。
Test
建立TEST工程。使用2个相同数组,1个数组分配在片内作为比较使用,另一个数组分配在SPI FLASH上。记得在linker文件中分配好片外存储段。注意地址与ExternalLoader描述地址对应。
验证方式
-
烧录程序验证,在CubeProgrammer中选择算法,烧录后,读取SPI FLASH相应的地址。看数据是否一致。
-
开发板运行程序取出SPI FLASH中数组比较验证。
-
也可以使用读写外部flash功能测试ExternalLoader算法是否有效。