为STM32写bootloader 使用串口,实现程序IAP升级

欢迎转载,请注明出处!

©MrWang_tju 2019.8.1

BootLoader是在操作系统内核运行之前运行的,主要功能是初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。BIOS是windows的bootloader,u-boot等为常见的Linux开发版的bootloader。ARM内核芯片下载程序方式可分为三类;

1.下载器(J-Link,ST-Link等)直接下载

2.ISP(in-system programming)下载,以STM32为例,可在不使用下载器而通过如UART、I2C、SPI、USB等通讯接口配合芯片启动代码(.s文件)进行升级

3.IAP(In Application Programming)下载,即编写应用软件实现程序升级,使用bootloader即属于此方法

在产品中,IAP升级的方式较其余两种的优势在于不需要接触芯片,不需要进行硬件配置更改即可实现程序远程升级,有益之处显而易见。物联网技术中的OTA(Over the Air Technology)升级也是基于IAP原理,在bootloader中实现网络通讯与云端配合进行程序升级。

言归正传,为STM32写bootloader实现IAP升级。

首先建立概念,bootloader与应用程序之间是两个独立的程序,在自身运行时互不干扰对方。两者共用的资源是单片机flash。升级Demo以stm32f103c8做实验芯片,编程使用keil MDK,采用HAL库使用cubeMX生成代码基础配置。

第一步:编程实现程序跳转大概需要三个步骤:

1.关闭外设中断  2.重设中断向量表  3.设置起始堆栈地址,将sp指针指向app程序main函数地址

将三个功能放在fun_jump.c函数中,

#include "fun_jump.h"
#include "main.h"

//设置栈顶地址
//addr:栈顶地址
__asm void MSR_MSP(u32 addr) 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值