历史上的今天
返回首页

历史上的今天

今天是:2024年08月22日(星期四)

正在发生

2018年08月22日 | STM8 如何自制BootLoader并实现在线升级

2018-08-22 来源:eefocus

博主这里编写STM8代码使用的MCU是STM8S003F3,开发环境为IAR

BootLoader升级数据从哪里来?

要实现在线升级就必须要有数据端口去接收新的升级文件的数据,本博文以串口为数据接收端口接收数据。关于串口部分代码如下:

STM8 默认Linker 
我们在IAR的安装目录STM8\config(我的就是D:\IAR Systems\Embedded Workbench 7.3\stm8\config)下面找到lnkstm8s003f3.icf,然后将其复制到BootLoader工程目录下,以文本方式打开该链接文件, 
对于APP应用程序需要将其中的NearFuncCode、FarFuncCode和HugeFuncCode的起始地址均从0x8000修改为0x8400,如下图: 
STM8 APP应用程序修改链接文件
对于BootLoader程序,链接文件可不做修改,但修改的好处是,当BootLoader程序大小超过设定值(我这里设定的是1KB)时,IAR在编译链接时,可以检测出来,具体修改如下图: 
STM8 BootLoader修改链接文件
然后我们回到工程选项Linker分支下的Config页面中,勾选选中复选框Override default,在下方的编辑框中输入修改好的*.icf文件(若修改BootLoader工程的链接文件,则BootLoader工程也需要修改这里)。


如何从BootLoader程序跳转到APP应用程序


STM8 提供汇编跳转指令,只需要执行汇编代码即可,在IAR中的跳转代码如下:


asm("JP $8400");


如何得到可直接写入FLASH的应用程序代码?


博主使用的IAR环境可以直接生成hex文件,设置如下:

设置IAR生成Hex文件

我们便可以在工程的Debug\Exe目录下得到该Hex文件,但是该文件中的内容并不是可以直接写入到FLASH中,我们需要从中提取有效的数据,以文本格式打开该文件,可以看到:

Hex文件内容

该Hex文件是以行为单位,以冒号开头的十六进制文件,其具体格式如下: 

1. 每行的第一个字符固定为冒号,从第二个字符开始,每两个字符表示一个字节。 

2. 每行的第一个字节表示本行的数据长度,只是指定数据部分的长度,以字节为单位 

3. 每行的第二、三个字节表示表示本行数据的起始地址,即第一行数据的起始地址为0x8400 

4. 每行的第四个字节表示数据类型,数据类型有0x00,0x01,0x02,0x03,0x04,x05; 

0x00表示当前行是用来记录数据的,即可以写入FLASH中的数据从该数据类型中获得。 

0x01表示文件结尾,用来表示Hex文件的结束。 

我们主要用到的就是这两个类型,其他类型可自行查阅相关资料。


5 最后一个字节为校验字节,校验算法为计算本行除校验字节外的所有数据的累加和,不计进位,得到的字节数据即为校验字节。


如何重定义STM8中断向量?


如果我们不重定义STM8的中断向量将会导致APP应用程序无法使用中断,导致程序出错。在IAR中重定义中断向量只要在BootLoader程序中添加如下代码即可:


__root const long reintvec[]@".intvec"=

{   

    0x82008080,0x82008404,0x82008408,0x8200840c,

    0x82008410,0x82008414,0x82008418,0x8200841c,

    0x82008420,0x82008424,0x82008428,0x8200842c,

    0x82008430,0x82008434,0x82008438,0x8200843c,

    0x82008440,0x82008444,0x82008448,0x8200844c,

    0x82008450,0x82008454,0x82008458,0x8200845c,

    0x82008460,0x82008464,0x82008468,0x8200846c,

    0x82008470,0x82008474,0x82008478,0x8200847c,

}; 


如果将BootLoader的大小设置为2K,即应用程序的起始地址为0x8800,则该数组应该是这样:


__root const long reintvec[]@".intvec"=

{   

    0x82008080,0x82008804,0x82008808,0x8200880c,

    0x82008810,0x82008814,0x82008818,0x8200881c,

    0x82008820,0x82008824,0x82008828,0x8200882c,

    0x82008830,0x82008834,0x82008838,0x8200883c,

    0x82008840,0x82008844,0x82008848,0x8200884c,

    0x82008850,0x82008854,0x82008858,0x8200885c,

    0x82008860,0x82008864,0x82008868,0x8200886c,

    0x82008870,0x82008874,0x82008878,0x8200887c,

}; 


12

请仔细对比如果两个地址设置不一样其中的差别。


最后附上一个STM8BootLoder的例子


http://download.csdn.net/download/yuanquanzheng/10004057 

包含BootLoader源码,一个桌面端下载程序(wiform编写的,VS2013),一个APP应用程序,需要首先将BootLoader的代码通过烧录工具下载到STM8中,再可以利用桌面端下载App应用程序到STM8中。可实现从APP接收指令跳转到升级状态,然后传送升级文件进行升级,但这里没有写协议,功能仅仅只是为了实现BootLoader。


推荐阅读

史海拾趣

Electro Adapter Inc公司的发展小趣事

作为一家以技术为核心的企业,EA公司始终将技术创新作为公司发展的重中之重。公司不断引进新技术、新工艺,加强与高校、科研机构的合作,共同研发具有自主知识产权的新产品。在智能电源适配器领域,EA公司率先推出了一系列具有智能化、网络化功能的产品,引领了行业潮流。这些产品的推出不仅提高了公司的市场竞争力,也为客户提供了更加便捷、高效的使用体验。

台湾远翔(Feeling Technology)公司的发展小趣事

乔光电子成立于2009年,起初专注于过压、过流保护元器件的研发、生产和销售。公司凭借对技术的执着追求和对市场的敏锐洞察,迅速在行业内站稳脚跟。在创立初期,乔光电子就建立了先进的EMC实验室,致力于为客户提供顶级性能的过压、过流保护元器件和完整的电路保护解决方案。这一时期,乔光电子在福建和东莞建立了生产基地,为后续的快速发展奠定了坚实基础。

歌普(GEPU)公司的发展小趣事

乔光电子在技术创新方面始终走在行业前列。面对压敏电阻产品技术方面的挑战,如产品失效引发的起火问题,公司在苏州设立了专门的实验室,由7名成员组成研发团队,专注于材料研发。经过不懈努力,乔光电子成功解决了这一难题,并在全球范围内率先大批量使用刷铜技术,进一步提升了产品的性能和质量。此外,公司还不断引入新技术、新设备,提高产品的生产效率和品质,确保在全球市场中保持领先地位。

Autonics公司的发展小趣事

上世纪60、70年代,韩国经济蓬勃发展,工业自动化需求迅速增长,但传感器与控制仪表的国内市场仍是一片空白。Autonics的创始人看到了这个巨大的市场机会,于1977年创立了Autonics公司。公司初创时期,面临着资金短缺、技术落后等诸多挑战,但创始人凭借着对技术的执着追求和对市场的敏锐洞察,带领公司逐步走上正轨。

Hasco Relays and Electronics International Corp公司的发展小趣事

随着时间的推移,Harris公司逐渐与国防工业建立了紧密的联系。在二战及随后的冷战时期,Harris为军事机构提供了大量的通信设备和技术支持,包括雷达系统、导航系统以及加密通信设备等。这些技术不仅帮助军队在战场上保持高效的通信能力,还极大地提升了国家的国防安全水平。Harris在国防领域的卓越表现,进一步巩固了其在电子行业中的领先地位。

Bedford Opto公司的发展小趣事

Bedford Opto公司在成立初期,面临着激烈的市场竞争和技术瓶颈。然而,公司的研发团队通过不懈努力,成功开发出一款具有革命性的光电传感器。这款产品不仅提高了信号传输的效率,还降低了能耗,迅速在市场上获得了认可。Bedford Opto公司因此逐渐在电子行业中崭露头角。

问答坊 | AI 解惑

手机用的 射频连接器资料

长期供应手机用的射频连接器 联系人:宋生 QQ: 1143469531 TEL:0755- 89813858 MOBILE:13332956179…

查看全部问答>

求助電容的阻抗怎麼計算?

求助電容的阻抗,容抗的計算公式 也不知道這問題是不是一個問題? 還有電阻的阻抗,電感的阻抗,感抗 計算公式 這些是怎麼定義的?…

查看全部问答>

有个元件不认识 来请教大家

元件在附件的图片中 用红色的圈圈住的 我想知道他的作用和资料 谢谢…

查看全部问答>

QuartusII 9.0 crack全能破解包.rar

QuartusII 9.0 crack全能破解包.rar…

查看全部问答>

关于硬件定时器的使用

RT,小弟用的是6410+arm6的平台,在驱动层中做了硬件定时器timer0的驱动,现在想要在应用程序中去使用这个定时器驱动,但是发现应用程序和驱动中的IST关联不上,也就是这个定时器在应用中用不了,不知道WINCE6应用层和内核层驱动之间如何能实现函数指针的 ...…

查看全部问答>

[急]再求推荐jtag接口的51单片机,谢谢

C8051F应该是可以,还有没有其它常用的?…

查看全部问答>

CListCtrl数据不显示,并报错,帮忙给看看

代码: int index=0; TCHAR* buffer,ptr; LV_ITEM  item; int      idItem; buffer = new TCHAR[32]; FILE* inFile = _wfopen(strInFile, L\"rb\"); while(_fgetts(buffer, 32, inFile) && index…

查看全部问答>

招聘汽车音响单片机软件开发工程师

                                 本公司招聘汽车音响单片机软件开发工程师一名,要求有汽车音响单片机开发经验,最好熟悉ST7/STM8汽车音响平台。有 ...…

查看全部问答>

SPI1 __SR 寄存器不能读出

今天启动了 SPI 但是数据寄存器里面   有朋友遇到过这个问题么 帮忙解答一下   这是为什么?   SR的状态读不出来 d=SPI1->SR; [ 本帖最后由 duzhiming 于 2012-5-9 17:19 编辑 ]…

查看全部问答>

停车场智能管理 coma系统帮你忙

随着近几年城市静态交通的基础建设的大力发展,智能停车场早已不是新名词了。无论你是住着的地方、工作的地方、还是休闲娱乐的地方,都有停车场智能化管理的存在。   停车场智能管理系统,是一种基于封闭和开放的开发模式、通过操作软件 ...…

查看全部问答>