作为嵌入式开发工程师,我们设计的产品在大批量量产后,在客户使用过程中发现bug,或者客户需要增添新功能时,我们不可能召回产品来进行分析升级固件,这时候,我们就需要使用Bootloader来进行修复固件了,嵌入式开发中采用的通讯协议五花八门,硬件平台也是百家争鸣,那么,有没有一种通用的bootloader架构,不限制平台,能方便的移植到各种电路板上,造福广大嵌入式开发工作者呢? 答案当然是肯定的,果真就有一款开源的bootloader架构,它叫做OpenBLT,是一个美国的嵌入式高手开发后开源公布在github上的,https://github.com/feaser/openblt OpenBLT 许可证是 GNU GPL。意味着我们可以将 OpenBLT 集成到我们的闭源项目中。 好了,话不多说,我们献上干货。 1。硬件平台 这里我是用的是正点原子的战舰开发板STM32F103ZET6,所有STM32F103系列都可以拿我这个移植模版直接使用,基本无需修改即可使用(除了亮灯的LED1和LED0作为指示灯需要大家根据实际情况简单配置)。我先拍个照片 上面是战舰开发板,我接的右上角是DB9针的串口线,用到的是USART2,PA2和PA3口 大家根据实际情况,对串口和引脚进行修改。接下来我就一步一步交大家怎么修改。 2。我们进入openblt文件 从github上下载下来。 实际上就这3个文件夹 我们打开target文件夹内 把不需要的工程demo和source全部删掉即可,这里我使用STM32F1_Olimex_STM32P103_Keil项目,因为它使用的就是STM32F103的MCU,我们直接在工程上进行修改即可。 它有两个,一个是boot,我们主要需要修改的,一个是prog就是升级用的app工程 这里我们先修改boot工程 打开这个KEIL工程 打开main.c文件 先编译一遍。 BootInit()定位 跳转到ComInit() 这里我们只使用到串口,所以跳转到 Rs232Init(); 波特率选择默认57600,也可以自己修改为任意波特率。串口通道我们选择1,就是使能USART2, 0代表USARR1 1代表USARR2 2代表USARR3 这里需要注意,千万别弄错了。 然后我们开始修改,还是从main开始 因为USART2使用PA2和PA3,所以要使能GPIOA时钟 和USART2时钟 下面是USART2用到的PA2 PA3 IO口使能 这个和前面是反过来的Init和Delnit 这里初始化就需要改这些就行了,我们再改别的地方 BootInit()->BackDoorInit()->BackDoorCheck()->CpuStartUserProgram()->CpuUserProgramStartHook() 一步一步定义到CpuUserProgramStartHook函数,按上图删掉LedBlinkExit();前面的语句。非常重要 至此,bootloader程序已经修改完,我们编译后烧录开发板,观察等没亮,右下角是电源灯,通电指示不受控制的。这是对的 3。我们修改prog程序, 打开KEIL工程 先修改LED灯文件 我们先查看战舰STM32F103的LED1和LED0原理图引脚分别是PB5和PE5 led文件修改这3处,然后回到main文件 HAL_MspInit初始化修改这些 HAL_MspDeInit修改这些 到此,修改完毕。 接下来我们先编译一遍工程,生成srec文件 打开Host文件夹,里面是升级上位机 双击下面这个MicroBoot.exe 我们先点击settings 打开串口助手,查看我们连接的是COM4,注意一定要和这个对应,否则无法升级 这个COM4是我的DB9串口数,大家每人电脑不一样,不要生搬硬套 波特率57600,对应bootloader里设置的波特率,bootloader设置9600,这里就选9600, 点击OK即可,其它的别管,我们只用到这些。 然后加载srec文件 点击这个 输入自己的prog文件的实际路劲 升级完毕,这个上位机会自动退出消失。 然后我们查看板子现象 LED0和LED1会交替闪烁,说明升级成功,完毕 我的工程在target压缩包里,大家可以下载烧录验证 |
OpenBLT移植到STM32F405开发板
MultiButton移植到STM32F103战舰开发板
汇编浮点库qfplib移植STM32F769I-DISCO开发板与硬件浮点运算性能测试对比
UDS诊断服务
使用Nano板验证驱动SPI串口屏的颜色显示
使用STM32F103制作的无线下载器
小马哥STM32F103开源小四轴RoboFly全部资料大放送
STM32F103移植LittlevGUI代码
【MCU实战经验】+自制MP3使用STM32F103ZET6和ch375读取u盘,vs1003解码,音质超棒
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法