硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5833|回复: 3
收起左侧

[客户分享] stm32f10x使用系统bootlader

[复制链接]

5

主题

144

回帖

159

积分

初级会员

积分
159
发表于 2020-9-5 15:12:44 | 显示全部楼层 |阅读模式
之前看硬汉哥的系统bootloader使用教程,感觉挺有意思的,但是一直没有尝试。
今天难得有时间,就用手头的stm32f103试了试
看教程的时候简单,但是实际上手的时候,还是遇到了一些小问题
首先看了硬汉哥推荐的stm32bootloader文档,查看了stm32f10x的系统bootloader地址
微信图片_20200905144746.png

跳转的核心步骤其实挺简单的,就是关闭外设,修改栈顶,跳转到复位中断
直接修改硬汉哥的 JumpToBootloader 函数,并没有达到跳转的效果,询问了硬汉哥
但是硬汉哥并没有直接给出解决方案。
心想自己已经是一个成熟的工程师了,硬汉哥的教程已经如此清晰了,
自己花点时间应该是可以找到问题的原因
1.进行仿真,查看memory窗口,跳转的地址里面有东西,跳转地址应该是正确的
微信图片_20200905144805.png

2.查看寄存器窗口,发现systick并没有停止工作
微信图片_20200905144810.png

单步仿真,最终定位问题
微信图片_20200905144756.png

使用的stm32cubemx配置的初始化代码,HAL库默认使用systick定时器
在调用HAL_RCC_DeInit()函数时,如果没有开启systick,它会对systick进行初始化

3.最终解决方法,将HAL_RCC_DeInit()函数放在关闭systick之前即可
微信图片_20200905144751.png

最后还有两个小问题
1.如果代码开启了读保护,是不可使用系统bootloader的
085659dxzs2shjmqjstkpo.jpg
微信图片_20200904111641.png

2.stm32cubeProgrammer点击连接时,会通过串口向stm32发送两个0x7F, 于是boot中,上电后两秒内串口接收到数据0x7f,则跳转到系统bootloader,否则跳转到app
但是实际使用过程中,发现stm32cubeProgrammer要连续点击3次连接才可以连接上。

评分

参与人数 2金币 +120 收起 理由
role_2099 + 20 很给力!
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115723
QQ
发表于 2020-9-5 16:34:13 | 显示全部楼层
谢谢楼主分享。

Level1读保护可以清除,STM32CubeProg貌似是屏蔽这个功能,早期的Flashloader是可以,看我下面的测试,读保护的话会提示清空程序即可

QQ截图20200905161534.png
2.png

清空后,重新连接正常了

46.png



回复

使用道具 举报

29

主题

231

回帖

318

积分

高级会员

积分
318
发表于 2020-9-8 09:02:06 | 显示全部楼层
終於可以了~非常感谢~
回复

使用道具 举报

6

主题

126

回帖

144

积分

初级会员

积分
144
发表于 2021-3-12 16:58:56 | 显示全部楼层
非常感谢楼主,折腾一下午,你这一步步分析的很到位啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-14 13:25 , Processed in 0.357366 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表