目录
前言:
一、flash分配
二、起始地址设置方法
三、设置app生成bin文件
四、下载程序
五、合并hex
前言:
主要实现bootloader串口读取app程序 ,将app程序拷贝到对应运行的flash区域,跳转到对应的区域执行代码。本文没有复杂的显示,app只点亮一个灯做测试用。
一、flash分配
本文使用的是stm32f103ve,flash有512k(如果你使用的大于512k可以使用此程序,如果小于512k那么就需要调整flash区域),分为两个程序,app程序在0x08000000运行,因此将app程序放在0x08000000处,上电就运行app程序,如果串口通知有需要拷贝程序,那么再跳转到bootloader程序。flash分配图解如下:
二、起始地址设置方法
打开keil设置app程序起始地址和大小,点击
设置bootloader程序起始地址和大小
因为app程序没有偏移所以程序中不需要设置,但是需要设置bootloader程序中断向量表的偏移
在system_stm32f10x.c中找到systemInit函数,修改如下
将VECT_TAB_OFFSET 修改为0x70000,因为bootloader从0x08070000开始。
三、设置app生成bin文件
E:\keil\ARM\ARMCC\bin\fromelf.exe --bin -o .\OBJ\demo.bin .\OBJ\demo.axf
需要找准目录
E:\keil\ARM\ARMCC\bin\fromelf.exe是keil的安装目录下的工具
.\OBJ\demo.axf是编译生成的axf文件
.\OBJ\demo.bin是需要生成的bin文件
四、下载程序
因为下载的是两个文件,所以一定要擦除的是扇区,不能是整个flash,将app和boorloader全部下载就好。
打开sscom,发送OK,进入到bootloader
然后点击发送需要升级的bin文件
可以看到程序已经更新,可以拿改变灯的状态或者输出不同字符串查看程序是否更新成功。
本文只是做一个简易的demo,如果需要更多的应用可以将串口拷贝作成一个上位机。
五、合并hex
如果bootloader和app都已经写好了,那么如果想要更方便的拷贝升级,那么可以将bootloader和app合并为一个文件,那么拷程序的时候只需要拷贝一个文件就可以。
打开bootloader的hex文件,和app的hex文件
将bootloader的hex文件所有内容都拷贝到app的hex文件的前面,如果他们之间存在空行的话需要删除掉。合并完成之后将合并之后的hex文件烧写到芯片中即可使用。文章来源:https://www.toymoban.com/news/detail-534099.html
代码地址:GitHub - clcmotta/bootloader: bootloader demobootloader demo. Contribute to clcmotta/bootloader development by creating an account on GitHub.https://github.com/clcmotta/bootloader.git文章来源地址https://www.toymoban.com/news/detail-534099.html
到了这里,关于STM32 简易Bootloader的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!