博主这里编写STM8代码使用的MCU是STM8S003F3,开发环境为IAR
BootLoader升级数据从哪里来?
要实现在线升级就必须要有数据端口去接收新的升级文件的数据,本博文以串口为数据接收端口接收数据。关于串口部分代码如下:
我们在IAR的安装目录STM8\config(我的就是D:\IAR Systems\Embedded Workbench 7.3\stm8\config)下面找到lnkstm8s003f3.icf,然后将其复制到BootLoader工程目录下,以文本方式打开该链接文件,
对于APP应用程序需要将其中的NearFuncCode、FarFuncCode和HugeFuncCode的起始地址均从0x8000修改为0x8400,如下图:
对于BootLoader程序,链接文件可不做修改,但修改的好处是,当BootLoader程序大小超过设定值(我这里设定的是1KB)时,IAR在编译链接时,可以检测出来,具体修改如下图:
然后我们回到工程选项Linker分支下的Config页面中,勾选选中复选框Override default,在下方的编辑框中输入修改好的*.icf文件(若修改BootLoader工程的链接文件,则BootLoader工程也需要修改这里)。
如何从BootLoader程序跳转到APP应用程序
STM8 提供汇编跳转指令,只需要执行汇编代码即可,在IAR中的跳转代码如下:
asm("JP $8400");
如何得到可直接写入FLASH的应用程序代码?
博主使用的IAR环境可以直接生成hex文件,设置如下:
我们便可以在工程的Debug\Exe目录下得到该Hex文件,但是该文件中的内容并不是可以直接写入到FLASH中,我们需要从中提取有效的数据,以文本格式打开该文件,可以看到:
该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。
上一篇:msp430 看门狗设置
下一篇:STC-ISP下载失败的原因与解决汇总
推荐阅读最新更新时间:2024-03-16 16:11
设计资源 培训 开发板 精华推荐
- 变频器凝露的危害_变频器凝露的处理办法
- 佳能(中国)发布2020-2021企业社会责任报告
- 动力升级:新一代ANCA EDG,树立PCD 制造的新标杆
- Sion推出17 Ah Licerion®可充电锂金属电池 用于电动汽车
- 泛林集团发布Syndion GP,满足芯片制造商对先进功率器件需求
- STM32+FreeRTOS+CUBEMX_学习笔记(六)PWM终极总结
- PLC系统在自动化生产过程中的设计要点
- 新能源汽车锂离子动力电池安全性分析
- NSAT-3010示波器自动计量系统的特点及使用流程分析
- 图森未来发布基于英伟达 DRIVE Orin SoC 芯片的域控制器,用于 L2+ 到 L4 级别自动驾驶计算