写一个STM32 BootLoader-1

1. 概述

某些定制的产品交付使用之后,用户方难免会提出一些功能更改的要求,所以也就避免不了对MCU里面的程序进行更新。一般情况下,例如STM32,会在内部FLASH前面放一段BOOTLOADER的代码。在启动时,如果没有某个操作(如串口输入或按键输入)的话,则正常跳转到用户程序中进行执行。如果有相关操作的话,则运行BOOTLOADER程序,在BOOTLOADER里面嵌有操作FLASH的程序,通过该程序可以将新的用户程序更新进FLASH里面。

ST官方有基于UART进行更新用户程序的BOOTLOADER工程。该工程启动的时候,如果串口收到输入,则进入更新用户程序状态,上位机利用Ymodem协议,把编译好的用户程序通过串口写入到STM32中。如果启动过程中,串口没有收到数据,则正常跳转到用户程序中去执行。

笔者之前项目使用的BOOTLOADER是在官方发布的工程基础上修改的。基本流程是这样:在启动三秒内,如果串口没有输入的话,则跳转到用户程序;如果串口有输入的话,则运行Ymodem协议软件进行用户程序更新。

但是最近有些项目在执行过程中遇到了一些新的需求。比如启动时间,用户方要求一上电就默认进入用户程序,而不必等三秒;再者,也出现过这样的情况,在某些强干扰的情况下,启动过程中,串口接收到了一些干扰信号,导致误触发了下载更新流程。于是萌发了自己给STM32写一个BOOTLOADER的想法。

2. 定义基本功能

1、串口下载不用采用Ymodem协议了,采用自定义的协议,该协议同时跑在BOOTLOADER和用户程序中,通过指令操作选择执行BOOTLOADER或者用户程序。
2、因为BOOTLOADER是在FLASH开头执行的程序,想从用户程序切换回去,最简单的方式是让软件进行重启,这样让软件可以从FLASH开头进行运动。
3、重启后必须有一种机制来选择是执行BOOTLOADER或者用户程序,可以通过在内存设置标志位的方式。例如在用户程序执行的过程中,如果收到进入BOOTLOADER的指令,则设置该标志位,然后重启,重启后BOOTLOADER开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值