2021遇到的第一个大坑

1. 摘要

本文档主要用来介绍记录在软件升级过程中使用STM32CubeProgrammer中遇到的问题,以STM32H743的板卡为例来说明。

2. 问题来源

为了在现场容易下载和升级程序,我们在代码的HMI界面中加入了软件升级按钮,点击后,会跳到STM32的系统bootloader,进入代码升级过程,STM32的系统bootloader是芯片出厂内置的,省去了自己做bootloader的麻烦,方便快捷。因为界面的字体和图片等资源文件都是存在外部QSPI flash里的,使用的是华邦的flash,因为STM32CubeProg自带的不支持华邦的,所以需要自己做一个下载算法放入安装目录就可以使用了,下载算法的制作可以参考之前的公众号文章:

STM32CubeProgrammer下载算法制作

首先我们测试的时候是用ST-LINK通过CubeProg可以正常下载内部和外部falsh,证明下载算法是没有问题的。

但是当换为USB 采用DFU模式升级时候,外部flash升级不成功。内部可以正常下载,

反复多次实验都不成功,开始怀疑是下载算法有问题,后来经过验证下载算法没有问题,是CubeProg 不支持升级外部  flash导致。但为了解决这个问题有两种方案

1, 因为界面简单,资源文件也不大就放入内部flash,可以正常升级和使用

2, 就得自己做个bootloader。将内部程序和外部程序合为一个Hex,这样也可以采用USB DFU升级。

就当前的简单应用选择采用第一种方案,

后期不知道ST 会不会升级这个功能。看到网上遇到这个问题的人还不少。

另外这里要提一点,STM32H743的手册上给的系统bootloader跳转地址是有问题的,正确的应该是

0x1FF09800

3. 跳转实现

进入系统bootloader 一种可以通过boot引脚,另一种就是通过软件跳转,通过软件跳转前需要处理以下工作

关闭全局中断

关闭滴答定时器,恢复到默认值

时钟恢复默认值,使用HIS

清除中断挂起标志

使能中断

跳转前最好将使用的外设去初始化

设置堆栈指针

跳转至系统bootloader。

将这些封装为一个函数,在收到软件升级指令后进行跳转升级就可以了。

现在也有很多开源的不错的bootloader,大家可以参考下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值