
STM芯片使用中最大的优势我觉得莫过于其开发工具链的强大ST-LinkSTM32IDECubeMXCubeProgrammer全部免费,建议国产芯片以后也能有如此强大的工具链简化芯片开发难度。如果可以熟练使用这套工具链可以大大缩短研发周期对于demo的开发效率大幅提高。这里必须为STM点赞也为致力于国产芯片开发的工作人员加油鼓劲努力追赶回归今天的主题对于初学STM32开发的同学往往对芯片升级有点陌生。一般而言芯片要做程序升级通常会由升级引导程序BootLoader和升级文件App组成也有一类特殊升级方式为静默升级其本质为集成了升级功能的App作为Bootloader来刷写你的App当再次上电重启后加载新的App运行老的App将处于静止状态可以被用于下次程序更新。为什么需要BootLoader直接App不是更好吗打个比方好比一部手机当你的应用程序需要更新系统操作系统你会发现下载之后需要重启然后会出现黑屏及进度条一样这个过程只需要你点点手指即可无需拆机烧写。而没有Bootloader的设备就比较尴尬了需要拆开设备连接烧写设备来刷写App既费事又费力还容易不小心损坏硬件所以我们开发嵌入式设备必须考虑升级功能。既然芯片内部分为了Bootloader和App两者分别处于芯片不同的存储地址中这里以STM32H7举例其Bootloader往往位于0x8000000地址这个地址一般为STM32芯片上电加载地址App假设存放在0x8020000如下基于上图我们可以知道上电后STM32芯片默认加载0x080000000地址开始的Bootloader程序通过Bootloader再跳转App执行。使用STM32工具链快速开发demo程序是较为方便简单的其启动地址默认为0x8000000如果demo程序需要升级功能就需要对这个App进行升级文件改造。如何改造就是今天讨论的主题。下面将描述这一“变迁”的过程。1.工具环境STM32 IDESTM32 CubeMXSTM32 CubeProgrammer2.使用STM32 IDE打开CubeMX生成的工程3.找到STM32H7xx_FLASH.ld文件找到FLASH字段将这里的地址修改为App的启动地址如我们这里0x08000000我们将其修改为0x8020000后面的长度也要相应减少0x20000。这样App程序生成的hex文件将从0x8020000开始。4.修改App中断向量表位置嵌入式程序是强依赖MCU外设中断运行的大部分程序为了提高性能必须使用中断方式进行及时响应处理当程序默认起始地址为0x8000000时其中断向量表的位置往往在起始地址处所以如果想让升级程序运行正常需要将中断向量表定位到0x8020000,这里我们需要找到STM32系统配置文件进行修改如下修改后你会发现这部分代码时灰色的表明代码没有生效这里使用了一个宏进行屏蔽。需要定义宏打开代码。如下这里不能简单在文件中定义一个USER_VECT_TAB_ADDRESS宏因为代码会随着CubeMX生成将这个文件覆盖。这样代码又将被屏蔽。所以我们需要在STM32 IDE中进行配置修改如下1右键工程点击“Properties”2在Symbols添加宏3发现代码已经生效5.配置工程导出hex和bin文件6.检查Hex起始地址确认地址是否变更为0x8020000到这里App已经成功变为可升级的App只需结合Bootloader进行刷写就可以使用了这里贴出跳转App的代码供参考如下感谢大家看到最后此方法仅是我开发过程的小小记录防止遗忘如有不对请指正