- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
stm8IAP升级文档
Stm8的IAP升级bootloader和 app程序的编写和应该注意的事项根据stm32编写IAP的经验,总结了编写stm8的时候主要的难点及注意事项何如设置中断向量,也就是如何重定向中断向量如何设置IAP的地址范围(也就是给bootloader分配多少空间),及app的地址范围如何跳转到APP使用stm8的库函数应该注意的地方(防止被坑)5、整个程序执行的流程何如设置中断向量,也就是如何重定向中断向量stm8不像stm32有一个寄存器管理着中断向量的地址,所以stm32的地址是可以任意设置(当然的适合),而stm8的中断向量是固定的在0x8000,所以bootloader不能开中断,如果开中断,就是和app的中断冲突,为了App可以用中断就不能让bootlaoder开中断,通过下面的方法就可以重定性中断向量表,__root const long reintvec[]@.intvec={ 00x8200A804,0x8200A808,0x8200A80c, 0x8200A810,0x8200A814,0x8200A818,0x8200A81c, 0x8200A820,0x8200A824,0x8200A828,0x8200A82c, 0x8200A830,0x8200A834,0x8200A838,0x8200A83c, 0x8200A840,0x8200A844,0x8200A848,0x8200A84c, 0x8200A850,0x8200A854,0x8200A858,0x8200A85c, 0x8200A860,0x8200A864,0x8200A868,0x8200A86c, 0x8200A870,0x8200A874,0x8200A878,0x8200A87c,}; 上面就实现了中断向量表的重定向,不过bootloader中是不可以使用中断的,app中可以使用中断,从表中也可以看出我们给bootloader分配的空间大小, flash是从0x8000开始,到0xA800结束是10K的大小如何设置IAP的地址范围(也就是给bootloader分配多少空间),及app的地址范围Stm8的起始地址及空间大小的设置是在一个.icf后缀的文件中设置的,这个文件在IAR的安装目录里面,以我自己的为例我的安装目录下icf的位置如下C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\config在这个目录下面可以看到很多的icf后缀的文件,找到一个和自己芯片对应的复制到工程里面,我使用的是stm8s207r8t6,所以就复制这个文件到我的工程里面,然后在IAR里面设置如下图在options里面的linker把如图所示的红框里面勾选,然后把InKstm8s207r8.icf添加进来就可以了。Bootloader和app都要添加这个文件然后就是修改InKstm8s207r8.icf文件Bootloader文件的修改如下:define region NearFuncCode = [from 0x8000 to 0xA7FF];define region FarFuncCode = [from 0x8000 to 0xA7FF]; // | [from 0x10000 to 0x17FFF];define region HugeFuncCode = [from 0x8000 to 0xA7FF];bootloader里面就修改了这个地方,可以看到地址范围是在0x8000到0xAFFF里面这也就是中断向量表里面的地址,也就是bootloader的分配空间的大小10kapp文件的修改如下:define region NearFuncCode = [from 0xA800 to 0x17FFF];define region FarFuncCode = [from 0xA800 to 0xFFFF] | [from 0x10000 to 0x17FFF];define region HugeFuncCode = [from 0xA800 to 0x17FFF];这里就是设置app地址的起始地址从0xA800开始到0x17FFF结束如何跳转到APPStm8跳转到app里面的方法是通过汇编实现的,如下asm(LDW X, SP );asm(LD A, $FF);asm(LD XL, A );asm(LDW SP, X );asm(JPF $A800);其中A800就是app的起始地址JPF就是跳转的指令使用stm8的库函数应该注意的地方(
文档评论(0)