Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1706809
  • 博文数量: 98
  • 博客积分: 667
  • 博客等级: 上士
  • 技术积分: 1631
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-27 15:59
个人简介

一沙一世界 一树一菩提

文章分类

全部博文(98)

文章存档

2021年(8)

2020年(16)

2019年(8)

2017年(1)

2016年(11)

2015年(17)

2014年(9)

2013年(4)

2012年(19)

2011年(1)

2009年(4)

分类: 嵌入式

2016-10-12 13:45:48

好久没有发布博文了,今天记录下。
项目需要,原来跑在stm32F103c8t6上的软件,现在需要添加在线升级功能。
查阅网络和其他做过的同事。大概形式如下:
外部通过stm32f4和103通信,并且需要升级的app文件存放在f4的文件系统里。上电以后,f4读取103的app的crc校验码,然后f4根据crc是否相同通过spi传输升级文件给103.
103端flash分两块,一块用于存放boot,一块用于存放app。boot存放地址范围0x08000000--0x08002000,app存放在0x08002000开始到0x0800f000,f000以后存放参数。
103上电以后运行boot,根据和f4通信的结果来判断是否接受升级文件或者运行已经存在的app。
另外,我的103的代码是通过keil编译的,只是把编译以后的bin文件放在f4的文件系统里。

网上有好多例程大家可以参考,我调试的过程:
1 如果直接通过keil编译下载就可以运行的话,103在keil编译时,rom选择0x08000000,size是10000,这是说编译后的hex文件,下载后存放在flash的0x08000000地址,然后就可以直接运行。但是现在0x08000000地址存放的是boot代码,而app存放在0x08002000地址。所以在keil编译这个文件时设置rom地址为0x08002000,大小我设置的是0xd000,这样不会覆盖参数部分区域。

2 还有一点,103的向量表也不要换地址,在system_stm32f10x.c中,修改VECT_TAB_OFFSET为0x2000,也就是我们要把app下载到的地址。
3 基本上有这两点修改即可。
4 boot代码编写时,注意中断的使用,使用以后一定要关中断。否则跳到app后运行不太正常。
5 有一点需要注意,我的boot跳到app后,通过指示灯可以看得出来,已经进入循环。我的代码里用到中断。但是中断不能正常执行。最后在进入main函数后,先执行“__asm__("CPSIE I\n")”,即打开中断,才可以正常执行,然后在网上找到挺多关于iap和app跳转和中断的问题的帖子,看到有人遇到类似的问题,但是都不太相同。有的芯片需要打开中断,有的不需要,但是在103c8t6确实需要。
OK就着呢多。
阅读(7619) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~