STM32 ISP 远程升级

合集下载

一种基于Mqtt协议的STM32的远程升级方法

一种基于Mqtt协议的STM32的远程升级方法

一种基于Mqtt协议的STM32的远程升级方法发布时间:2023-01-31T07:39:06.971Z 来源:《中国科技信息》2022年第18期作者:潘思宇,赵洪山,殷博闻,卫彪[导读] 针对嵌入式系统远程升级过程中暂停运行潘思宇,赵洪山,殷博闻,卫彪四创电子股份有限公司安徽省合肥市 230088摘要: 针对嵌入式系统远程升级过程中暂停运行、升级的安全性无法保障及升级失败等问题,设计了基于STM32F407ZG处理器的远程升级系统。

系统通过LAN8720A接收远程的系统升级代码,并将升级代码存储在内部 Flash 存储器; 升级代码接收结束后,设置系统升级标志位,并重新启动系统。

系统重启检测到升级标志位后,由系统代码升级程序将升级代码写入程序存储区后,跳转到升级后的应用程序运行。

该远程升级技术满足了升级过程中系统的实时性要求,提高了远程升级的可靠性。

关键词: 远程升级在应用编程升级程序引导加载程序实时性1 远程系统升级原理在微处理器中,程序存储器的编程方法通常有 3 种: 并行编程模式、通过串口或JTAG 等接口进行编程的在系统编程( in system programming,ISP) 模式,以及在应用程序控制下的在应用编程( in application programming,IAP) 模式。

并行编程是较早单片机的编程方式。

该模式通过专用的编程器对单片机进行程序的烧写,需要额外的编程器,且花费较多的开发时间,这种单片机已被淘汰。

ISP 编程模式由于其调试的方便性得到众多厂家的广泛支持。

IAP 是应用 Flash 程序存储器的一种编程模式。

IAP 模式是将 Flash 程序存储区化分为两个不同程序区域( 程序区域 1 和程序区域 2) 。

运行于程序区域 1 的应用程序为引导加载程序,即Bootloader 程序; 运行于程序区域 2 的应用程序为用户应用程序。

Bootloader 程序是一段引导程序,它驻留在处理器的程序存储器,当处理器上电或复位后在用户应用程序之前运行。

stm32远程升级(原创)

stm32远程升级(原创)

stm32远程升级(原创)
⼀:简介
stm32远程升级说⽩了讲就是两段程序写⼊两段内存中,内存分配可以分为IPA区 APP区升级存储区,具体怎么分配,要结合实际程序⼤⼩。

⼆:IPA区,APP区,升级存储区
IPA区:程序运⾏⾸先运⾏的就是这段程序,它主要实现的功能就是判断程序是否要升级。

1.升级:去读升级存储区(下载好了),然后写⼊APP区,最后跳转APP区。

2.不升级:直接跳转APP区运⾏APP程序。

APP区:
APP区实现的就是设备的功能了,这⾥只介绍有关升级的部分。

有升级需求后,我们需要把要升级的BIN⽂件上传到平台,然后通过平台下发到要升级的设备(可以多台设备),设备接收后,把程序存储到升级存储区,复位,程序从IPA开始运⾏,从⽽实现升级。

升级存储区:存储升级的bin程序,⼤⼩分配根据实际要升级的程序⼤⼩分配。

下⾯贴上我分配的内存
IPA区
APP区
程序升级区
⼆:操作流程及编程思路
1.上传需要升级程序的bin⽂件到平台
2.平台下发升级包,设备接收后,把程序存储到备份区
3.复位重启,程序会从IPA区开始运⾏,读取升级标志位,判断是否要升级
4.读取备份区程序,然后写到app区,全部写完,跳转到app区,升级完成。

基于 STM32处理器的 WSN 节点固件在线系统升级方法

基于 STM32处理器的 WSN 节点固件在线系统升级方法

基于 STM32处理器的 WSN 节点固件在线系统升级方法蒋存波;焦阳【摘要】In order to meet the needs of function upgrade and system reconstruction of the node devices in WSN (wireless sensor network),we studied the Cortex-Mx core-based renewing and upgrading method for embedded system firmware IAP.It triggers the upgrade by using the way of command requests plus authentication,splits the code into 128 byte information block by utilising partition function and then composes them into ModBus packet with 138 bytes for transmission.It employs CRC for data checking,adopts response mechanism to achieve flow control,utilises Flash recognition function to distinguish different Flash types,and applies Flash writing function to meet the programming needs of internal and external Flash,different parameters of NorFlash and NandFlash.By testing with experiment,this scheme can realise the upgrade of WSN nodes firmware and the need of WSNs in dynamic system reconstruction.%为满足无线传感网中节点设备的功能升级和系统重构需要,研究基于 Cortex-Mx 核的嵌入式系统固件 IAP 更新升级方法。

单片机程序烧录的3种方式(ISP、ICP、IAP)是什么

单片机程序烧录的3种方式(ISP、ICP、IAP)是什么

单片机程序烧录的3种方式(ISP、ICP、IAP)是什么说起给单片机烧录程序,大家应该都不陌生吧,我最早接触单片机是从51单片机开始的,型号是STC89C52RC,当时烧录程序就是用的下面这种烧录软件——STC-ISP。

这种方式,通过串口连接单片机,选择一个合适的波特率就可以烧录了。

后来学习STM32,编程时使用KEIL软件自带的下载按钮就能下载程序,方便了不少,但需要额外使用J-Link等下载器。

再后来,接触到产品研发,给已经发布出的产品升级,都是要靠远程无线升级的(想想看,产品已经到客户那里了,当软件需要升级时,要是还使用有线的方式烧录程序,得有多麻烦)既然给单片机烧录程序的方式有多种,那烧录方式具体怎么分类呢?可以分为3种:ISP(In-System Programming)在系统编程,使用引导程序(Bootloader)加上外围UART/SPI等接口进行烧录。

ICP (In-circuit programmer)在电路编程,使用SWD/JTAG接口。

IAP(In-Application Programming)指MCU可以在系统中获取新代码并对自己重新编程,即用程序来改变程序。

这3种烧录方式的原理是什么呢?在分析原理之前,需要先了解一下单片机Flash的访问地址,看看程序是烧录到哪个位置了。

单片机Flash在地址映射表中位置下图是一张STM32F4xx的地址映射表,从0x0000 0000到0xFFFF FFFF,总计4Gbyte。

单片机的片上Flash、片上RAM、片上外设以及外部扩展接口的访问地址,都被映射到这4Gbyte的范围之内。

这张图中,我们需要先注意下半部分Main memory 主存储区通常,我们编写的代码,是放到主存储区的起始位置(0x0800 0000)开始运行的,烧录程序时,直接将程序烧录到这里即可(KEIL 软件给STM32烧录程序的默认烧写地址就是0x0800 0000开始)System memory系统存储区System memory(起始位置0x1FFF 000)是STM32在出厂时,由ST在这个区域内部预置了一段BootLoader,也就是我们常说的ISP程序,这是一块ROM,出厂后无法修改。

详解STM32 ISP设置及使用说明

详解STM32 ISP设置及使用说明

详解STM32 ISP设置及使用说明(原创)1. STM32的BOOT概述STM32三种启动模式对应的存储介质均是芯片内置的,它们是:用户闪存:BOOT1=x BOOT0=0芯片内置的Flash,即主存储器FlashSRAM:BOOT1=1 BOOT0=1芯片内置的SRAM 区,就是内存啦。

系统存储器:BOOT1=0 BOOT0=1芯片内部一块特定的区域,叫做系统存储器。

芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。

这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM 区。

在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表:BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。

BOOT1=0 BOOT0=1 从系统存储器启动,这种模式启动的程序功能由厂家设置。

BOOT1=1 BOOT0=1 从内置SRAM 启动,这种模式可以用于调试。

要注意的是,一般不使用内置SRAM 启动(BOOT1=1 BOOT0=1),因为SRAM 掉电后数据就丢失。

多数情况下SRAM 只是在调试时使用,也可以做其他一些用途。

如做故障的局部诊断,写一段小程序加载到SRAM 中诊断板上的其他电路,或用此方法读写板上的Flash 或EEPROM 等。

还可以通过这种方法解除内部Flash 的读写保护,当然解除读写保护的同时Flash 的内容也被自动清除,以防止恶意的软件拷贝。

一般BOOT0 和BOOT1 跳线都跳到0(GND),即正常的从片内Flash运行,只是在ISP下载的情况下,需要设置BOOT0=1,BOOT1=0 ,下载完成后,把BOOT0 的跳线接回0,这样系统可以正常运行了。

对于一般的应用来说,直接把BOOT0 和BOOT1 引脚接地即可,不用设置跳线,使用IAR 调试程序时可以选择RAM 调试还是Flash 调试,与BOOT0 和BOOT1 的配置无关。

编写适用于STM32的ISP下载器程序

编写适用于STM32的ISP下载器程序

前一阵公司外购了一些控制器,配合公司的开关一起发给用户。

发货前领导认为控制器开机界面会出现我们进货厂家的LOGO不好,应该改成我们公司的名称。

于是与控制器厂家协调,让他们把开机欢迎界面改动一下。

没几天对方发过来一个ISP下载器,我们用它把控制器的程序升级了一下,就改过来了。

闲来无事,感觉这个ISP下载器很有意思。

之前我们升级程序,因为还没有着手开发远程自动升级功能,必须到现场去升级。

而且用的STM32F103的处理器本身不具备作为主机使用USB的功能,升级的时候使用串口。

所以当设备安装在现场的话,就需要带着笔记本,USB 转串口线去现场,比较麻烦。

而且,笔记本一来体积大,本来出去带着工具什么的东西就很麻烦,再带着本就更头疼;二来在现场也不好用,有转接口不好使的问题,也有其它原因,比如可能需要爬杆,在几米高的杆上抱着本给设备升级是很恐怖的事情。

鉴于此,感觉这个ISP下载器还是比较好的一款东西。

当然,对方厂家给我们发过来的这款下载器是针对他们用的处理器的,跟我们的不合适。

在网上搜索一番,发现还真能找到STM系列的ISP下载器,价格在1200元左右。

比起笔记本来说倒是很合算。

准备买它几个。

当然准备买,那是领导的打算。

我觉得应该可以自己做一下,反正我也有不少空闲时间。

于是便行动起来。

首先,我先在网上找了一款免费的串口监听工具“串口监控精灵”下载安装好。

然后将我们的控制器与PC用串口连接好。

打开监控精灵,然后打开“串口调试助手”,向终端发送命令。

发现监控精灵可以很好的将串口间的上下通信显示出来,并且会给出对串口进行配置的显示。

这样,在ISP模式下给控制器上电,在PC上打开STM的flashloader,配置好,下发一个源程序,分析监控精灵的数据:序号 , 时间 , 进程(PID) , IO类型 , COM口 , 数据长度 , 数据 ,1,14:15:38,hypertrm.exe(3708),IRP_MJ_CREATE,COM3,0,,2,14:15:38,hypertrm.exe(3708),IOCTL_SET_QUEUE_SIZE ,COM3,8,QueueSize.InSize: 8192, QueueSize.OutSize: 8192,3,14:15:38,hypertrm.exe(3708),IOCTL_SET_BAUD_RATE ,COM3,4,115200,4,14:15:38,hypertrm.exe(3708),IOCTL_SET_RTS ,COM3,0,,5,14:15:38,hypertrm.exe(3708),IOCTL_SET_DTR ,COM3,0,,6,14:15:38,hypertrm.exe(3708),IOCTL_SET_LINE_CONTROL ,COM3,3,WordLength: 8StopBits: 1Parity:0(None),7,14:15:38,hypertrm.exe(3708),IOCTL_SET_CHARS ,COM3,6,Chars Eof: 0, Error: 0, break: 0, Event: 0, Xon: 17, Xoff: 19,8,14:15:38,hypertrm.exe(3708),IOCTL_SET_HANDFLOW ,COM3,16,DCB.fAbortOnError=TRUEDCB.fTXContinueOnXoff=TRUEDCB.fRtsControl=RTS_CONTROL_ENABLEDCB.fDtrControl=DTR_CONTROL_ENABLEDCB.fDsrSensitivity=FALSEDCB->XonLim: 80DCB->XoffLim: 200,10,14:16:08,hypertrm.exe(3708),IRP_MJ_CLOSE,COM3,0,,12,14:16:30,STMicroelectronics flashloader.exe(3872),IOCTL_SET_QUEUE_SIZE ,COM3,8,QueueSize.InSize: 2048, QueueSize.OutSize: 2048,13,14:16:30,STMicroelectronics flashloader.exe(3872),IOCTL_SET_BAUD_RATE ,COM3,4,115200,14,14:16:30,STMicroelectronics flashloader.exe(3872),IOCTL_CLR_RTS ,COM3,0,,15,14:16:30,STMicroelectronics flashloader.exe(3872),IOCTL_CLR_DTR ,COM3,0,,16,14:16:30,STMicroelectronics flashloader.exe(3872),IOCTL_SET_LINE_CONTROL ,COM3,3,WordLength: 8StopBits: 1Parity:0(None),17,14:16:30,STMicroelectronics flashloader.exe(3872),IOCTL_SET_CHARS ,COM3,6,Chars Eof: 0, Error: 0, break: 0, Event: 0, Xon: 17, Xoff: 19,18,14:16:30,STMicroelectronics flashloader.exe(3872),IOCTL_SET_HANDFLOW ,COM3,16,DCB.fAbortOnError=TRUEDCB.fTXContinueOnXoff=TRUEDCB.fRtsControl=RTS_CONTROL_DISABLEDCB.fDtrControl=DTR_CONTROL_DISABLEDCB.fDsrSensitivity=FALSEDCB->XonLim: 2048DCB->XoffLim: 512,19,14:16:30,STMicroelectronics flash loader.exe(3872),IRP_MJ_WRITE,COM3,1, 7F | •,21,14:16:30,STMicroelectronics flash loader.exe(3872),IRP_MJ_CLOSE,COM3,0,, 22,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_CREATE,COM3,0,, 23,14:17:34,STMicroelectronics flashloader.exe(2848),IOCTL_SET_QUEUE_SIZE ,COM3,8,QueueSize.InSize: 2048, QueueSize.OutSize: 2048,24,14:17:34,STMicroelectronics flashloader.exe(2848),IOCTL_SET_BAUD_RATE ,COM3,4,115200,25,14:17:34,STMicroelectronics flashloader.exe(2848),IOCTL_CLR_RTS ,COM3,0,,26,14:17:34,STMicroelectronics flashloader.exe(2848),IOCTL_CLR_DTR ,COM3,0,,27,14:17:34,STMicroelectronics flashloader.exe(2848),IOCTL_SET_LINE_CONTROL ,COM3,3,WordLength: 8StopBits: 1Parity:0(None),28,14:17:34,STMicroelectronics flashloader.exe(2848),IOCTL_SET_CHARS ,COM3,6,Chars Eof: 0, Error: 0, break: 0, Event: 0, Xon: 17, Xoff: 19,29,14:17:34,STMicroelectronics flashloader.exe(2848),IOCTL_SET_HANDFLOW ,COM3,16,DCB.fRtsControl=RTS_CONTROL_DISABLEDCB.fDtrControl=DTR_CONTROL_DISABLEDCB.fDsrSensitivity=FALSEDCB->XonLim: 2048DCB->XoffLim: 512,30,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,1, 7F | •,31,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,32,14:17:34,STMicroelectronics flashloader.exe(2848),IOCTL_SET_BAUD_RATE ,COM3,4,115200,33,14:17:34,STMicroelectronics flashloader.exe(2848),IOCTL_CLR_RTS ,COM3,0,,34,14:17:34,STMicroelectronics flashloader.exe(2848),IOCTL_CLR_DTR ,COM3,0,,35,14:17:34,STMicroelectronics flashloader.exe(2848),IOCTL_SET_LINE_CONTROL ,COM3,3,WordLength: 8StopBits: 1Parity:2(E),36,14:17:34,STMicroelectronics flashloader.exe(2848),IOCTL_SET_CHARS ,COM3,6,Chars Eof: 0, Error: 0, break: 0, Event: 0, Xon: 17, Xoff: 19,37,14:17:34,STMicroelectronics flashloader.exe(2848),IOCTL_SET_HANDFLOW ,COM3,16,DCB.fRtsControl=RTS_CONTROL_DISABLEDCB.fDtrControl=DTR_CONTROL_DISABLEDCB.fDsrSensitivity=FALSEDCB->XonLim: 2048DCB->XoffLim: 512,38,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 00 FF | \#0?,79 | y,40,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 0B | \#11,41,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 22 | ",42,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,11, 00 01 02 11 21 31 43 63 73 82 92 | \#0\#1\#2\#17!1Ccs??,43,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,44,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 02 FD | \#2y,45,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,46,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 01 | \#1,47,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,2, 04 14 | \#4,48,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,49,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 02 FD | \#2y,50,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,51,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 01 | \#1,52,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,2, 04 14 | \#4,53,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,54,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 11 EE | \#17?,55,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,56,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,5, 1F FF F7 E0 F7 | ?÷à÷,57,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,58,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 01 FE | \#1t,59,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,60,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,2, 00 02 | \#0\#2,11 EE | \#17?,62,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,63,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,5, 1F FF F7 E2 F5 | ?÷a?,64,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,65,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 01 FE | \#1t,66,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,67,14:17:34,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,2, FF FF | ??,68,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 02 FD | \#2y,69,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,70,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 01 | \#1,71,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,2, 04 14 | \#4,72,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,73,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 02 FD | \#2y,74,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,75,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 01 | \#1,76,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,2, 04 14 | \#4,77,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,78,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 11 EE | \#17?,79,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,80,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,5, 1F FF F7 E0 F7 | ?÷à÷,81,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,82,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 01 FE | \#1t,79 | y,84,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,2, 00 02 | \#0\#2,85,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 11 EE | \#17?,86,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,87,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,5, 1F FF F7 E2 F5 | ?÷a?,88,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,89,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 01 FE | \#1t,90,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,91,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,2, FF FF | ??,92,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 00 FF | \#0?,93,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,94,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 0B | \#11,95,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 22 | ",96,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,11, 00 01 02 11 21 31 43 63 73 82 92 | \#0\#1\#2\#17!1Ccs??,97,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,98,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 11 EE | \#17?,99,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,100,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,5, 1F FF F8 08 10 | ??\#8\#16,101,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,102,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 03 FC | \#3ü,103,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,104,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,4, FF FF FF FF | ????,11 EE | \#17?,106,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,107,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,5, 1F FF F8 0C 14 | ??\#12,108,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,109,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 03 FC | \#3ü,110,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,111,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,4, FF FF FF FF | ????,112,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 11 EE | \#17?,113,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,114,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,5, 1F FF F8 00 18 | ??\#0,115,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,116,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 03 FC | \#3ü,117,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,118,14:17:40,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,4, A5 5A FF FF | ¥Z??,119,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 43 BC | C?,120,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,121,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, FF 00 | ?\#0,122,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,123,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2, 31 CE | 1?,124,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,125,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,5, 08 00 00 00 08 | \#8\#0\#0\#0\#8,126,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1, 79 | y,FB | ?,128,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,252, 80 0D 00 20 FD 1E 00 08 E9 1E 00 08 EB 1E 00 08 ED 1E 00 08 EF 1E 00 08 F1 1E 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F3 1E 00 08 F5 1E 00 08 00 00 00 00 F7 1E 00 08 F9 1E 00 08 3D 1F 00 08 41 1F 00 08 45 1F 00 08 49 1F 00 08 4D 1F 00 08 51 1F 00 08 55 1F 00 08 59 1F 00 08 5D 1F 00 08 61 1F 00 08 65 1F 00 08 69 1F 00 08 6D 1F 00 08 71 1F 00 08 75 1F 00 08 79 1F 00 08 7D 1F 00 08 81 1F 00 08 85 1F 00 08 89 1F 00 08 8D 1F 00 08 91 1F 00 08 95 1F 00 08 99 1F 00 08 9D 1F 00 08 A1 1F 00 08 A5 1F 00 08 A9 1F 00 08 AD 1F 00 08 B1 1F 00 08 B5 1F 00 08 B9 1F 00 08 BD 1F 00 08 C1 1F 00 08 C5 1F 00 08 C9 1F 00 08 CD 1F 00 08 D1 1F 00 08 D5 1F 00 08 D9 1F 00 08 DD 1F 00 08 E1 1F 00 08 E5 1F 00 08 E9 1F 00 08 ED 1F 00 08 F1 1F 00 08 F5 1F 00 08 | ?\#13\#0 y\#0\#8é\#0\#8?\#0\#8í\#0\#8?\#0\#8?\#0\#8\#0\#0\#0\#0\#0\#0\#0\#0\#0\#0\#0\#0\#0\#0\#0\#0ó\#0\#8?\#0\#8\#0\#0\#0\#0÷\#0\#8ù\#0\#8=\#0\#8A\#0\#8E\#0\#8I\#0\#8M\#0\#8Q\#0\#8U\#0\#8Y\#0\#8]\#0\#8a\#0\#8e\# 0\#8i\#0\#8m\#0\#8q\#0\#8u\#0\#8y\#0\#8}\#0\#8?\#0\#8?\#0\#8?\#0\#8?\#0\#8?\#0\ #8?\#0\#8?\#0\#8?\#0\#8?\#0\#8¥\#0\#8?\#0\#8-\#0\#8±\#0\#8μ\#0\#81\#0\#8?\#0\#8á\#0\#8?\#0\#8é\#0\#8í\#0\#8?\#0\#8?\#0\#8ù\#0\#8Y\#0\#8á\#0\#8?\#0\#8é\#0\#8í\#0\#8?\#0\#8?\#0\#8,129,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,1,7C | |,130,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1,79 | y,131,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,2,31 CE | 1?,132,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1,79 | y,133,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,5,08 00 00 FC F4 | \#8\#0\#0ü?,134,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_READ,COM3,1,79 | y,135,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,1,FB | ?,136,14:18:20,STMicroelectronics flash loader.exe(2848),IRP_MJ_WRITE,COM3,252, F9 1F 00 08 FD 1F 00 08 01 20 00 08 05 20 00 08 09 20 00 08 0D 20 00 08 11 20 00 08 15 20 00 08 19 20 00 08 1D 20 00 08 21 20 00 08 25 20 00 08 29 20 00 08 DF F8 40 03 01 68 01 F4 E0 61 DF F8 3C 23 11 43 01 60 BF F3 4F 8F FE E7 F0 B4 DF F8 30 23 00 23 1C 46 1D 46 01 E0 64 1C 6D 1C 0A 2D 13 D2 B1 FB F2 F6 06 F1 30 07 1F 54 5B 1C 02 FB 16 11 0A 26 B2 FB F6 F2 1E 18 16 F8 01 6C 30 2E EB D1 00 2C E9 D1 00 23 E8 E7 F0 BC 70 47 30 B4 0A 46 00 21 0B 46 04 78 30 2C 37 D1 44 78 78 2C 01 D0 58 2C 32 D1 84 78 00 2C 01 D1 08 46 5A E0 02 24 03 E0 57 3D 05 EB 03 13 64 1C 0B 2C 04 D2 25 5C 00 2D 05 D1 13 60 01 21 0B 2C 4A D3 00 21 48 E0 41 3D ED B2 06 2D 09 D3 25 5C 61 3D ED B2 06 2D 04 D3 25 5C 30 3D ED B2 0A 2D ED D2 25 5C 30 3D EDB2 0A 2D 25 5C 01 D2 30 3D | ù\#0\#8y\#0\#8\#1 \#0\#8\#5 \#0\#8\#9 \#0\#8\#13 \#0\#8\#17 \#0\#8 \#0\#8 \#0\#8 \#0\#8! \#0\#8% \#0\#8) \#0\#8??@\#3\#1h\#1?àa??第二篇前一篇本意是把400行左右的监控代码全部粘贴完的,但是发完博文后发现仅仅能显示一百三十来行的内容,想如果把四百行都粘贴完,恐怕仅这些数据就得几篇节。

基于YModem的STM32串口IAP的设计

基于YModem的STM32串口IAP的设计

基于YModem的STM32串口IAP的设计摘要:针对STM32应用程序在线升级的问题,提出基于YModem的串口IAP方案,以实现简单、高效、可靠的MCU程序在线升级。

本文给出了基于YModem的串口IAP方案的原理解释及实现的技术细节。

方案成功应用在多个实际的项目中,缩短Bug修复时间,能实现远程升级,取得较大的经济和社会效益。

关键词:STM32串口BOOTLOADER YModem协议IAP随着集成电路技术的发展以及电子产品越来越智能化,MCU的应用越来越广泛。

而在MCU使用过程中,应用程序的升级是一个难点。

目前,对于程序升级主要存在两种技术:在系统编程ISP以及在应用编程IAP。

ISP在系统编程,指的是一种在系统中直接进行烧录的编程技术。

IAP在应用编程,指的是MCU可以在系统运行中获取新的代码并对自己重新编程的技术。

ISP一般需要少量的外部电路辅助实现,需要硬件事先留出相关接口且到现场升级;而IAP只需要依托系统现成的通信链路,无需额外的硬件,更为灵活,而且可以实现远程升级,因此IAP技术越来越受到欢迎和重视。

本文介绍一种基于YModem的STM32串口IAP的设计,从而实现简洁、高效、可靠地对MCU进行在应用编程。

一、STM32的IAP原理要实现STM32的在应用编程(IAP),需要把原来的一个程序拆分为两个程序,一个是负责对应用程序进行在应用编程的BOOTLOADER程序;另一个则是实现真正功能的应用程序APP。

因此,需要把Flash划分为BOOTLOADER区域和APP区域,如图1.1所示。

1.具体说来,BOOTLOADER程序需要实现两个功能:(1)在接收到升级命令时,与上位机进行通信,把新的APP程序接收并烧写到APP所在的Flash区域。

(2)在程序烧写完成后或无需升级时,自动跳转到APP程序来执行。

图1.1 IAP程序空间划分当系统复位时,中断向量表指向0x00000000,会从0x00000004处取出复位起始地址,并跳转到中断服务程序中执行,即执行BOOTLOADER中的复位中断程序。

STM32平台串口升级说明(超级终端版)

STM32平台串口升级说明(超级终端版)

STM32平台IAP升级说明使用电脑超级终端进行升级;
1、建立一个连接,任意取一个名字,选择一个图标
2、选择你的电脑所使用的串口号
3、串口设置:
波特率:115200bps;
数据位:8;
停止位:1;
流控:无;
设置后确认连接
2、断电重启设备,按照串口打印提示操作:上电5秒钟之内长按下PC机键盘的“u”如下图所示
设备进入到升级的main menu;
后面的Invalid Number ! ==> The number should be either 1 or 2是由于进入到main menu后默认只能输入“1”或“2”而此时依然按着“u”打印出来的输入错误信息。

(对升级无影响)
3、输入“1”进入升级模式,输入“2”退出升级,跳到应用程序;
输入1后串口打印等待接收升级文件,按“a”退出。

等待中不断打印“c”表示正在等待。

4、点击发送按钮,协议项选择Ymodem;
点击打开
点击“发送”后开始升级;
5、升级过程中会打印升级进度,升级成功后会提示升级成功。

设备自动重启。

5秒钟内无
操作自动进入刚下载好的用户应用程序。

6、升级后的程序版本号
启,如果一次操作失败,请多操作几次!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32芯片自带固化的ISP程序,在芯片上电的时候会检查BOOT0 BOOT1电平状态,如果
BOOT0=1
BOOT1=0
则会进入自带的ISP程序,基本可以满足程序升级需要。

但是如何进入这个模式,是一个问题,网上有人使用串口的握手信号来控制,但是这样会超过3条线(
RX TX GND)。

昨天测试了一个方法,上位机发出一个指令,STM32用户自己的程序解析后,利用自己的IO口,控制一个简单的延时电路来拉高BOOT0,然后芯片重新启动,则进入ISP。

刷新完成后,跳入用户程序运行,控制权交回用户程序。

程序中设置PB8为 ISP_DRV ,推挽输出;输出一定时间后,充满电容后,可以使用NVIC_SystemReset() 重新启动(3.12库)。

即可进入ISP模式。

另外,需要在程序中设置如下向量表地址,才可以在勾选ISP程序的 jump to user application after flash后,进入用户程序。

/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
测试了若干次没有发现异常。

何须如此麻烦,直接跳转到SystemMemory不就行了,一个函数解决所有问题。

这是我写的一个函数,没有测试过,不过估计问题不大,有兴趣的同志可以帮忙测试一下。

void EnterSyetemMemoryISP(void)
{
typedef void (*APP_FUNC_DEF)(void);
vu32 *appaddress = (vu32 *)(0x1FFFF000); //SystemMemory 的起始地址。

APP_FUNC_DEF pappfunc;
u32 appresetaddr;
appresetaddr = *(appaddress + 1);
pappfunc = (APP_FUNC_DEF) appresetaddr;
//从起始地址读取堆栈指针 __MSR_MSP(*appaddress); //进入ISP
pappfunc(); }。

相关文档
最新文档