天天看点

STM32的存储器映射以及stm32+bootloader远程升级(IAP)

ST公司中文社区官网:

https://www.stmcu.org.cn/

STM32的存储器映射以及stm32+bootloader远程升级(IAP)
STM32的存储器映射以及stm32+bootloader远程升级(IAP)
STM32的存储器映射以及stm32+bootloader远程升级(IAP)

此处重点看Flash,我们手写的程序都在这512K里面。(0x08000000开始的)

STM32的存储器映射以及stm32+bootloader远程升级(IAP)

Keil软件证明,默认设置:0x08000000,大小为0x80000(512K)

STM32的存储器映射以及stm32+bootloader远程升级(IAP)

stm32+bootloader远程升级(IAP)

这里有个讲解视频:

https://v.youku.com/v_show/id_XMzM4Njg5OTA0OA==.html?spm=a2hzp.8244740.0.0

视频截图:

STM32的存储器映射以及stm32+bootloader远程升级(IAP)
STM32的存储器映射以及stm32+bootloader远程升级(IAP)

比如说我开发了一个产品需要测试,把一个样品送到客户手里去测试使用,但是客户在使用的过程中提出了一些修改建议,那我就在做一个样品改好程序之后发出去给客户,不久之后客户又有了新的修改要求,如此往复,大部分时间都耽误在做样品、寄快递上了,极大地耽误了产品的研发周期。但是如果我们能够远程的将修改好的程序下载到产品上去的话会减少很多研发时间。当然前提是产品本身有接出来通信接口,我们使用这个接口才能进行程序升级,或者产品本身能够连接到网络通过网络更新固件。(如GPRS,GPRS模块通过串口通信和主控芯片相连:Vcc,GND,TXD,RXD四条线)

这就是BootLoader的实际价值。首先要理解BootLoader是什么东西,这个是源自linux上的BootLoader的概念,在linux上,BootLoader是首先执行的程序,BootLoader启动之后初始化CPU、RAM、Flash等设备,然后从Flash中读取Linux程序数据到RAM中去,最后跳转到RAM中Linux的起始地址中去启动Linux系统。除了从Flash中读取系统启动之外,BootLoader还能通过网络NFS协议从服务器上读取Linux并启动。BootLoader还能够更新Linux内核、配置Linux启动信息、测试系统等等。我们要做的STM32的BootLoader也是类似的工作原理,但是没有Linux系统的BootLoader功能那么强大。我们要做的STM32的BootLoader只有两个主要目的:

1、跳转到应用程序并执行。

2、更新应用程序。

在成熟的产品中,通常都是采用BootLoader方式来升级产品的程序。也就是IAP升级。

在了解完基本的实现原理后,可以做到用上位机升级(一般的产品大多采用这种方式,显得非常专业有专用的升级软件,其实背后原理就是BootLoader升级方式)。

这里是具体实现的代码,其他人写了我就不写了:

https://blog.csdn.net/chen244798611/article/details/51365150

https://blog.csdn.net/tq384998430/article/details/81010002

https://blog.csdn.net/qq_30479727/article/details/63352897

https://blog.csdn.net/m0_37738150/article/details/79498220

https://blog.csdn.net/HES_C/article/details/80118805

http://bbs.elecfans.com/jishu_467138_1_1.html

https://www.docin.com/p-931410641_28.html

继续阅读