CN109871223A - 一种基于stm32单片机的IAP方法及系统 - Google Patents

一种基于stm32单片机的IAP方法及系统 Download PDF

Info

Publication number
CN109871223A
CN109871223A CN201910042144.6A CN201910042144A CN109871223A CN 109871223 A CN109871223 A CN 109871223A CN 201910042144 A CN201910042144 A CN 201910042144A CN 109871223 A CN109871223 A CN 109871223A
Authority
CN
China
Prior art keywords
program
chip microcontroller
app
bootloader
programming
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201910042144.6A
Other languages
English (en)
Inventor
吴灵焱
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing Pinchang Science And Technology Development Co Ltd
Original Assignee
Nanjing Pinchang Science And Technology Development Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing Pinchang Science And Technology Development Co Ltd filed Critical Nanjing Pinchang Science And Technology Development Co Ltd
Priority to CN201910042144.6A priority Critical patent/CN109871223A/zh
Publication of CN109871223A publication Critical patent/CN109871223A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于stm32单片机的IAP方法及系统,该方法包括:烧写BootLoader程序至单片机;烧写APP程序至单片机;运行所述BootLoader程序以更新APP程序,本发明提供的方法可以远程控制程序的升级;无需机械性得操作,例如:连接烧录器,设置跳线帽等;可重复性编程;当机器外壳封死,无法拆机,可以使用IAP升级方案进行更新迭代。

Description

一种基于stm32单片机的IAP方法及系统
技术领域
本发明涉及单片机软件升级技术领域,具体涉及一种基于stm32单片机的IAP方法及系统。
背景技术
IAP,全称是“In-Application Programming”,中文释为“在程序中编程”。IAP 是一种对通过微控制器的对外通信接口(如 USART,IIC,CAN,USB等通讯端口)对正在运行程序的微控制器进行实时更新的技术。目前市面上存在的升级方式基本上都是ICP(In-Circuit Programming)技术即通过在线仿真器对单片机进行程序烧写,而ISP技术则是通过单片机内bootloader程序引导的烧写技术。
无论是ICP技术还是ISP技术,都需要有机械性的操作如连接下载线,设置跳线帽等,若产品的电路板已经层层密封在外壳中,要对其进行程序更新无疑困难重重,若产品安装于狭窄空间等难以触及的地方,更是一场灾难,但若进引入了IAP技术,则完全可以避免上述尴尬情况,而且若使用远距离或无线的数据传输方案,甚至可以实现远程编程和无线编程,这绝对是ICP或ISP技术无法做到的。
某种微控制器支持IAP技术的首要前提是其必须是基于可重复编程闪存的微控制器,STM32微控制器带有可编程的内置闪存,同时STM32拥有在数量上和种类上都非常丰富的外设通信接口,因此在STM32上实现IAP技术是完全可行的。
发明内容
为了增加电子产品的更新迭代功能,可以通过无线编程来实现电子产品的更新功能,解决产品因为层层密封在外壳中或者无法距离分散而无法更新和升级的问题,为此,本发明提供一种基于stm32单片机的IAP方法及系统。
一种基于stm32单片机的IAP方法,包括:
烧写BootLoader程序至单片机;
烧写APP程序至单片机;
运行所述BootLoader程序以更新APP程序。
作为本发明的进一步优选,所述烧写BootLoader程序至单片机,包括:
在PC端安装KeiluVision5软件,并根据单片机型号创建工程;
在创建的工程中按照需要编写BootLoader程序;
搭载stn32的电路板通过J-Link连接至PC端;
BootLoader程序编写完后,在KeiluVision5点击烧录,将KeiluVision5程序烧录到stm32的flash的初始存储区域中。
作为本发明的进一步优选,所述烧写APP程序至单片机,包括:
编写APP程序,APP程序在KeiluVision5中生成Bin文件,将Bin文件保存在主控板指定位置中;
主控板接收升级指令,根据定义的协议,通过串口将Bin文件每次发送512个字节到单片机,单片机收到512个字节后,进行校验,如果无误,则反馈接收成功指令到主控板。主控接收到成功指令后,则继续发送下一个512字节,如此循环,直到bin全部发送完成,最终将APP程序烧录到单片机的固件存储区域中。
作为本发明的进一步优选,所述运行所述BootLoader程序以更新APP程序,包括:
单片机上电,PC指针指向BootLoader程序中的起始地址,执行APP跳转程序,之后对GPIO口,时钟和串口进行初始化;
读取Flash中的升级标志位对应的地址,将该地址的值与预先设定的值进行比较;
如果两值相等,则跳转到APP程序;
如果两值不等,则进行APP程序更新。
作为本发明的进一步优选,所述 APP程序,还用于:
判断是否接受IAP升级信号;
如果是,则启动BootLoader程序。
一种基于stm32单片机的IAP系统,包括;
BootLoader程序烧写模块,用于烧写BootLoader程序至单片机;
APP程序更新模块,用于运行所述BootLoader程序以更新APP程序。
本发明的有益效果:利用STM32单片机带有的可编程内置闪存,同时 STM32 拥有在数量上和种类上都非常丰富的外设通信接口;
一、可以远程控制程序的升级;
二、无需机械性得操作,例如:连接烧录器,设置跳线帽等;
三、可重复性编程。当机器外壳封死,无法拆机,可以使用IAP升级方案进行更新迭代。
附图说明
图1为单片机的Bootloader程序烧写示意图;
图2为stm32的IAP指针跳转详细流程图;
图3为本发明的通信协议流程图;
图4为Bootloader程序的功能框架图;
图5为keil uvision5 集成开发环境软件窗口图。
具体实施方式
本发明的核心是自行烧写Bootloader程序至单片机中,运行Bootloader程序对单片机进行IAP升级。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
一种基于stm32单片机的IAP方法,包括如下步骤:
步骤S1:烧写Bootloader程序至单片机。
为了实现单片机的IAP功能,单片机需要具有完整的Bootloader工程,Bootloader工程一般包含两部分,一部分为中断向量表,另一部分为Bootloader代码,Bootloader代码的功能是接收新的APP程序并把它存储在FLASH的特定位置,然后加载新的APP程序,Bootloader代码中含有单片机与串口进行USART通信的协议,USART是一种通用同步异步收发机模块,是电脑硬件的一部分,USART通常被集成在其他通信接口的连结上。
本实施例中,所选用的单片机型号为STM32F072CBT6,为一款STM32 F0入门级Cortex™-M0 MCU,最高频率达48MHz,内置128KB flash + 16KB SRAM, 该型号单片机没有提供BootLoader程序,需要自己按需求进行编写,并设定其存放位置。
进一步的,为了在单片机启动时能够先运行Bootloader程序,需要烧写Bootloader程序至单片机的起始存储位置;
具体的,如图1所示,图1为单片机的Bootloader程序烧写示意图,在PC端安装KeiluVision5软件,并根据单片机型号创建工程;在创建的工程中按照需要编写BootLoader程序;搭载stn32的电路板通过J-Link连接至PC端;BootLoader程序编写完后,在KeiluVision5点击烧录,将KeiluVision5程序烧录到stm32的flash的初始存储区域中
进一步的,请参考图2,图2为stm32的IAP指针跳转详细流程图,单片机上电后,指针指向0x08000000(单片机的复位中断向量的地址,由硬件决定)中断向量表表紧随其后,执行中断向量中断程序完成启动后,临时stm32的内部硬件机制自动的将PC指针指向“中断向量表”处,跳转至0x8000004开始运行程序代码,由于Bootloader程序要先于APP程序运行,因此从0x8000004开始存放Bootloader程序代码是合理的,Keil uVision5从构建到调试应用代码到微控制器编程提供了简易且高效的开发环境,在Keil uVision5开发环境下编写Bootloader程序,经过编译后,生成.Bin文件,然后通过J-Link烧写至单片机中。
一般的,对于型号为STM32F072CBT6的单片机来说,其中断向量表的地址是硬件机制固定的,单片机产生中断时,指针首先会跳转到中断向量表(0x8000004-0x8000000+n)中的某个地址(硬件决定)然后跳转到对应的中断函数入口。
步骤S2:烧写APP程序至单片机。
Bootloader程序通过J-Link烧写到单片机之后,App程序在Keil uVision5中生成Bin文件,将bin文件保存在主控板指定位置中,当主控板收到升级指令时,根据定义的协议,通过串口将bin每次发送512个字节,单片机收到512个字节后,进行校验,如果无误,则反馈接收成功指令到主控板。主控接收到成功指令后,则继续发送下一个512字节,如此循环,直到bin全部发送完成。APP程序同样由两部分构成,分别为中断向量表和APP代码。
继续参考图2所示,一般的,Bootloader程序和APP程序为两个独立的部分,各自具有中断向量表,当APP程序正常运行时,单片机产生中断后,指针依然会跳转到0x8000004-0x8000000+n中的某个地址,即Bootloader程序的中断向量表,而没有跳转APP程序的中断向量表,因此,需要把APP程序的中断向量表映射到APP程序的中断向量表中来解决该问题,也就是当单片机产生中断时,PC指针指向Bootloader程序的中断向量表,然后更具指令跳转至APP程序的中断向量表地址,在APP程序的中断向量表中执行指令跳转至APP程序中对应的中断函数入口。
请参考图3,图3为本发明的具体实施方式所提供的一种基于stm32单片机的IAP方法的通信协议流程图,具体通信协议如下:
起始命令:0x3B
长度:总长度 :两个byte(单位:byte)
设备编号:0x01
命令:0xF1:查询IAP、0xF2:发送升级包、0xF3:结束;
参数:0xF1和0xF3参数为:0x00、0xF2:第几个512byte;
数据:0xF1和0xF3:不发送、0xF2:bin文件的512byte;
校验码:除去校验码和换行符的前面所有的字节的和的低8位;
换行符:0x0A。
按照上述通信协议,具体的IAP升级步骤如下:
① 进入升级:20 21 06 01 F0 00
返回:30 31 06 01 F0 00
② 查询IAP:3B 00 08 01 F1 00 CRC 0A
成功返回:3B 00 09 01 F1 00 01 CRC 0A
失败返回:3B 00 09 01 F1 00 02 CRC 0A
③ 发送升级包:(第0批) 3B 02 08 01 F2 00 XX XX … XX CRC 0A
512个字节
成功返回:3B 00 09 01 F2 00 01 CRC 0A
失败返回:3B 00 09 01 F2 00 02 CRC 0A
(第1批)3B 02 08 01 F2 01 XX XX … XX CRC 0A
512个字节
成功返回:3B 00 09 01 F2 01 01 CRC 0A
失败返回:3B 00 09 01 F2 01 02 CRC 0A
(第N-1批)3B 02 08 01 F2 n-1 XX XX … XX CRC 0A
512个字节
成功返回:3B 00 09 01 F2 n-1 01 CRC 0A
失败返回:3B 00 09 01 F2 n-1 02 CRC 0A
如果(N-1)不是4的倍数,则需要继续发:
(第N批)3B 02 08 01 F2 n FF FF … FF CRC 0A
512个字节
成功返回:3B 00 09 01 F2 n 01 CRC 0A
失败返回:3B 00 09 01 F2 n 02 CRC 0A
如果(N)是4的倍数,则停止发送,否则需要继续发送,直到下一批是4的倍数。
注意:(N-1)一定得是4的倍数,如果不是,则需要继续发0xFF。如果(N-1)是4的倍数,并且第N-1批不够512bytes ,则后面也需要补0xFF。
④ 结束:3B 00 08 01 F3 00 CRX 0A
成功返回:3B 00 09 01 F3 00 01 CRC 0A
失败返回:3B 00 09 01 F3 00 02 CRC 0A
通过上述指令就可以完成APP程序的IAP升级。
值得指出的是,当单片机正常工作时运行的是APP程序,这时如果需要进行IAP升级,就需要在APP程序中加入跳转至Bootloader程序的判断条件。
APP程序中条件跳转代码如下:
参考图4,图4为Bootloader程序的功能框架图,APP程序跳转过程如下:
App跳转程序在BootLoader的主函数中;
当STM32f072CBT6上电时,首先启动BootLoader程序BootLoader的起始地址(0x080000000)执行,即跳到上图程序的主函数中执行;
对需要用到的功能进行初始化,这里需要GPIO口,时钟和串口初始化。
获取Flash中APPLICATION_CHECK_ADDRESS对应地址的值,如果该值为0x12345678,则进入While循环,等待App程序的更新,如果该值不等于0x12345678,则跳转到App程序的起始地址(0x08004000),执行App程序。
进一步的,继续参考图5所示,在使用 IAP过程写入的程序要满足2个要求: 新程序必须从 IAP 程序之后的某个偏移量为 x 的地址开始; 必须将新程序的中断向量表相应的移动,移动的偏移量为x;而设置程序起始位置的方法是(keil uvision5 集成开发环境)在工程的“Option for Target….”界面中的“Target”页里将“IROM”的“Start”列改为欲使程序起始的地方,如下图中将程序起始位置设为 0x8004000。
本发明利用STM32单片机带有的可编程内置闪存以及STM32上拥有的数量上和种类上都非常丰富的外设通信接口,可以实现以下功能:
一、可以远程控制程序的升级;
二、无需机械性得操作,例如:连接烧录器,设置跳线帽等;
三、可重复性编程。当机器外壳封死,无法拆机,可以使用IAP升级方案进行更新迭代。
本发明还提供一种基于stm32单片机的IAP系统,包括;
BootLoader程序烧写模块,用于烧写BootLoader程序至单片机;
APP程序更新模块,用于运行所述BootLoader程序以更新APP程序。
尽管参照特定的优选实施例已经表示和表述了本发明,但其不得解释为对本发明自身的限制,在不脱离所附权利要求定义的本发明的精神和范围前提下,可对其在装置形式上、材质上、细节上作出各种组合变化。

Claims (6)

1.一种基于stm32单片机的IAP方法,其特征在于,包括:
烧写BootLoader程序至单片机;
烧写APP程序至单片机;
运行所述BootLoader程序以更新APP程序。
2.根据权利要求1所述的一种基于stm32单片机的IAP方法,其特征在于,所述烧写BootLoader程序至单片机,包括:
在PC端安装KeiluVision5软件,并根据单片机型号创建工程;
在创建的工程中按照需要编写BootLoader程序;
搭载stn32的电路板通过J-Link连接至PC端;
BootLoader程序编写完后,在KeiluVision5点击烧录,将KeiluVision5程序烧录到stm32的flash的初始存储区域中。
3.根据权利要求1所述的一种基于stm32单片机的IAP方法,其特征在于,所述烧写APP程序至单片机,包括:
编写APP程序,APP程序在KeiluVision5中生成Bin文件,将Bin文件保存在主控板指定位置中;
主控板接收升级指令,根据定义的协议,通过串口将Bin文件每次发送512个字节到单片机,单片机收到512个字节后,进行校验,如果无误,则反馈接收成功指令到主控板;
主控接收到成功指令后,则继续发送下一个512字节,如此循环,直到bin全部发送完成,最终将APP程序烧录到单片机的固件存储区域中。
4.根据权利要求1所述的一种基于stm32单片机的IAP方法,其特征在于,所述运行所述BootLoader程序以更新APP程序,包括:
单片机上电,PC指针指向BootLoader程序中的起始地址,执行APP跳转程序,之后对GPIO口,时钟和串口进行初始化;
读取Flash中的升级标志位对应的地址,将该地址的值与预先设定的值进行比较;
如果两值相等,则跳转到APP程序;
如果两值不等,则进行APP程序更新。
5.根据权利要求1-4任一项所述的一种基于stm32单片机的IAP方法,其特征在于,所述APP程序,还用于:
判断是否接受IAP升级信号;
如果是,则启动BootLoader程序。
6.一种基于stm32单片机的IAP系统,其特征在于,包括;
BootLoader程序烧写模块,用于烧写BootLoader程序至单片机;
APP程序更新模块,用于运行所述BootLoader程序以更新APP程序。
CN201910042144.6A 2019-01-17 2019-01-17 一种基于stm32单片机的IAP方法及系统 Pending CN109871223A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910042144.6A CN109871223A (zh) 2019-01-17 2019-01-17 一种基于stm32单片机的IAP方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910042144.6A CN109871223A (zh) 2019-01-17 2019-01-17 一种基于stm32单片机的IAP方法及系统

Publications (1)

Publication Number Publication Date
CN109871223A true CN109871223A (zh) 2019-06-11

Family

ID=66917776

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910042144.6A Pending CN109871223A (zh) 2019-01-17 2019-01-17 一种基于stm32单片机的IAP方法及系统

Country Status (1)

Country Link
CN (1) CN109871223A (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110968330A (zh) * 2019-11-29 2020-04-07 上海商米科技集团股份有限公司 一种基于Android智能设备使用Ymodem协议升级GD32控制器的方法
CN111273937A (zh) * 2020-01-18 2020-06-12 四川九洲空管科技有限责任公司 一种基于stm32f746处理器的远程升级方法
CN111309364A (zh) * 2020-05-11 2020-06-19 深圳市科信通信技术股份有限公司 芯片程序的升级方法、装置及存储介质
CN111338658A (zh) * 2020-02-27 2020-06-26 上海电力大学 一种基于stm32CPU下载PIC单片机程序的方法及系统
CN112181446A (zh) * 2020-09-04 2021-01-05 中国船舶重工集团公司第七0七研究所 一种基于stm32的软件在线升级方法
CN112199101A (zh) * 2020-09-02 2021-01-08 福建升腾资讯有限公司 一种基于串口的mcu升级方法、系统、设备及介质
CN112346739A (zh) * 2019-08-06 2021-02-09 珠海格力电器股份有限公司 中断向量表的重映射方法、装置、微处理器及电子装置
CN112860301A (zh) * 2021-01-12 2021-05-28 明见(厦门)软件开发有限公司 一种app使用bootloader中断函数的方法及单片机
CN113311931A (zh) * 2021-06-08 2021-08-27 合肥磐芯电子有限公司 一种方便iap的双复位向量8位mcu架构及其方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011159263A1 (en) * 2010-06-15 2011-12-22 The Thailand Research Fund Embedded system providing bootloader selected execution of multiple independent modular programs
CN105739974A (zh) * 2016-01-25 2016-07-06 杭州电子科技大学 一种图形化编程控制电子积木的方法
CN106020869A (zh) * 2016-05-09 2016-10-12 广州康盛生物科技有限公司 基于can总线的选择性烧录多个单片机节点程序的方法
CN107729040A (zh) * 2017-09-28 2018-02-23 郑州云海信息技术有限公司 一种单片机的iap方法及系统
CN108733396A (zh) * 2018-05-25 2018-11-02 西南电子技术研究所(中国电子科技集团公司第十研究所) 8位高性能单片机程序软件的在线加载方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011159263A1 (en) * 2010-06-15 2011-12-22 The Thailand Research Fund Embedded system providing bootloader selected execution of multiple independent modular programs
CN105739974A (zh) * 2016-01-25 2016-07-06 杭州电子科技大学 一种图形化编程控制电子积木的方法
CN106020869A (zh) * 2016-05-09 2016-10-12 广州康盛生物科技有限公司 基于can总线的选择性烧录多个单片机节点程序的方法
CN107729040A (zh) * 2017-09-28 2018-02-23 郑州云海信息技术有限公司 一种单片机的iap方法及系统
CN108733396A (zh) * 2018-05-25 2018-11-02 西南电子技术研究所(中国电子科技集团公司第十研究所) 8位高性能单片机程序软件的在线加载方法

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112346739A (zh) * 2019-08-06 2021-02-09 珠海格力电器股份有限公司 中断向量表的重映射方法、装置、微处理器及电子装置
CN110968330A (zh) * 2019-11-29 2020-04-07 上海商米科技集团股份有限公司 一种基于Android智能设备使用Ymodem协议升级GD32控制器的方法
CN110968330B (zh) * 2019-11-29 2024-01-09 上海商米科技集团股份有限公司 一种基于Android智能设备使用Ymodem协议升级GD32控制器的方法
CN111273937A (zh) * 2020-01-18 2020-06-12 四川九洲空管科技有限责任公司 一种基于stm32f746处理器的远程升级方法
CN111338658A (zh) * 2020-02-27 2020-06-26 上海电力大学 一种基于stm32CPU下载PIC单片机程序的方法及系统
CN111338658B (zh) * 2020-02-27 2023-10-10 上海电力大学 一种基于stm32CPU下载PIC单片机程序的方法及系统
CN111309364A (zh) * 2020-05-11 2020-06-19 深圳市科信通信技术股份有限公司 芯片程序的升级方法、装置及存储介质
CN112199101A (zh) * 2020-09-02 2021-01-08 福建升腾资讯有限公司 一种基于串口的mcu升级方法、系统、设备及介质
CN112181446A (zh) * 2020-09-04 2021-01-05 中国船舶重工集团公司第七0七研究所 一种基于stm32的软件在线升级方法
CN112860301A (zh) * 2021-01-12 2021-05-28 明见(厦门)软件开发有限公司 一种app使用bootloader中断函数的方法及单片机
CN113311931A (zh) * 2021-06-08 2021-08-27 合肥磐芯电子有限公司 一种方便iap的双复位向量8位mcu架构及其方法

Similar Documents

Publication Publication Date Title
CN109871223A (zh) 一种基于stm32单片机的IAP方法及系统
US10209999B2 (en) Devices, updaters, methods for controlling a device, and methods for controlling an updater
US20100023602A1 (en) Method and apparatus for updating information on an embedded system
US8117587B1 (en) Microcontroller-resident software development environment supporting application-level asynchronous event handling, interactive debugging and pin variables for embedded systems
US7334117B2 (en) Device boot loader for processing one or more requests from a host computer system concurrently with loading or updating the firmware of the device
WO2017186089A1 (zh) 一种车载解码器软件升级文件的方法
CN110119282B (zh) 一种基于通用嵌入式计算机的物联网终端及系统
CN104077204A (zh) 可重构的8位rsic单片机仿真器
CN104391726A (zh) 一种基于Bootloader的SFP光模块升级方法
CN103678194A (zh) 用于stm32程序isp下载的装置
Sun et al. Embedded Firmware Solutions: Development Best Practices for the Internet of Things
CN107729040A (zh) 一种单片机的iap方法及系统
CN103019941A (zh) 程序调试方法和装置
Simmonds Mastering embedded Linux programming
US9600207B2 (en) Integrated circuit with a patching function
CN104035757A (zh) 基于MIPS处理器的u-boot移植的实现方法
CN104461638A (zh) 一种基于Bootloader的XFP光模块升级方法
CN107332589B (zh) 一种基于蓝牙的固件升级装置
Khner Expert. NET Micro Framework
US7680909B2 (en) Method for configuration of a processing unit
CN104423984A (zh) 在线升级方法和在线升级系统
CN114996056A (zh) 一种基于spi的dsp备份启动实现方法
CN217640186U (zh) 一种基于tms320f28335的iap在线升级模组
Hughes Bluetooth low energy
CN102323885A (zh) 一种传感网节点操作系统的动态配置方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20190611