OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6000|回复: 12

STM32F105RCT6移植正点原子IAP程序出错

[复制链接]

1

主题

5

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-2-7
在线时间
8 小时
发表于 2018-2-8 15:12:17 | 显示全部楼层 |阅读模式
3金钱
各位好,我最近在STM32F105RCT6平台上移植原子哥的IAP程序,STM32F105RCT6的Flash大小为256K,为互联型产品,APP部分的配置如下
APP配置.png
在bootloader部分中,首先做IAP检测,检测需要升级时,做stm32程序部分的擦写
IAP检测.png
擦写完成后,执行APP部分代码
执行APP代码.png
发现一个问题,在做if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)的检测时,发现为否,无法执行Flash APP代码,这是由于什么原因造成的呢?跪求指导。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-2-7
在线时间
8 小时
 楼主| 发表于 2018-2-8 15:14:38 | 显示全部楼层
我在bootloader中移植了FATFS,将需要升级的Bin文件放在了SD卡中。
回复

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2016-3-30
在线时间
17 小时
发表于 2018-2-8 17:37:42 | 显示全部楼层
你在keil设置的起始地址少了一个0吧,只有7位
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-2-7
在线时间
8 小时
 楼主| 发表于 2018-2-8 18:08:20 | 显示全部楼层
lio1213 发表于 2018-2-8 17:37
你在keil设置的起始地址少了一个0吧,只有7位

看了一下,这个应该是对的,0x8000000是stm32的flash起始地址,然后偏移0x10000写入APP数据。
回复

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2016-3-30
在线时间
17 小时
发表于 2018-2-9 10:01:30 | 显示全部楼层
木夕子 发表于 2018-2-8 18:08
看了一下,这个应该是对的,0x8000000是stm32的flash起始地址,然后偏移0x10000写入APP数据。

你定义的FLASH_APP1_ADDR地址确定没有错吗?
回复

使用道具 举报

12

主题

241

帖子

0

精华

高级会员

Rank: 4

积分
806
金钱
806
注册时间
2017-8-17
在线时间
159 小时
发表于 2018-2-9 10:17:45 | 显示全部楼层
关闭所有中断,并且清楚所有中断再跳转就好了。原子实验的没用到中断所有这么像他那样做可以,但是实际工程中会用到中断,所以必须清除再跳转------这都是老问题了
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-2-7
在线时间
8 小时
 楼主| 发表于 2018-2-9 10:48:01 | 显示全部楼层
lio1213 发表于 2018-2-9 10:01
你定义的FLASH_APP1_ADDR地址确定没有错吗?

应该是没有错的,根据原子个的程序来的,保留0X08000000~0X0800FFFF为bootloader使用,从0x08010000开始是APP程序的Flash地址
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-2-7
在线时间
8 小时
 楼主| 发表于 2018-2-9 10:50:43 | 显示全部楼层
本帖最后由 木夕子 于 2018-2-9 10:52 编辑
2246606206 发表于 2018-2-9 10:17
关闭所有中断,并且清楚所有中断再跳转就好了。原子实验的没用到中断所有这么像他那样做可以,但是实际工程 ...

关中断我是在if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)检测之后的,在函数iap_load_app中进行的 关中断.png C:\Users\CENNTRO\Desktop\IAP\关中断.png

回复

使用道具 举报

12

主题

241

帖子

0

精华

高级会员

Rank: 4

积分
806
金钱
806
注册时间
2017-8-17
在线时间
159 小时
发表于 2018-2-9 11:12:25 | 显示全部楼层
木夕子 发表于 2018-2-9 10:50
关中断我是在if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)检测之后的,在函数iap_load_a ...

一定要清除中断,只是关了在APP程序里一打开就跑飞了
回复

使用道具 举报

7

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
711
金钱
711
注册时间
2017-5-20
在线时间
96 小时
发表于 2018-2-9 13:53:02 | 显示全部楼层
根据我的经验
1.把IAP里的中断关了或者初始化。估计你这个没有这个问题。
2.工程文件,魔法棒->linker,勾选正确。
回复

使用道具 举报

6

主题

315

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1669
金钱
1669
注册时间
2018-1-29
在线时间
160 小时
发表于 2018-2-10 09:04:18 | 显示全部楼层
你用的是原子哥的开发板吗?先试试例程是否好用。
BootLoader的FLASH_APP1_ADDR应该等于APP中IROM的值。APP中中断向量也要等于此值。
还有关闭中断的函数内部你看了吗?真的关闭了吗?我就遇到过关闭中断函数体被全部注释的情况!
还有一个更坑的,就是STM_FLASH_WRITE函数可能有问题! 附上代码:
else//写入未结束
                {
                        secpos++;                                //扇区地址增1
                        secoff=0;                                //偏移位置为0          
                           pBuffer+=secremain;          //指针偏移
                        WriteAddr+=secremain*1;        //写地址偏移(16位数据地址,需要*2),从2改为了了1          
                           NumToWrite-=secremain;        //字节(16位)数递减
                        if(NumToWrite>(STM_SECTOR_SIZE/2))secremain=STM_SECTOR_SIZE/2;//下一个扇区还是写不完
                        else secremain=NumToWrite;//下一个扇区可以写完了
                }         

BootLoader中加入FATFS,可以不要长文件名和UNICODE支持,代码页选为1。这样20KB基本就够了。不用预留64KB。
回复

使用道具 举报

5

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2014-10-21
在线时间
31 小时
发表于 2018-8-3 16:52:09 | 显示全部楼层
backup2k 发表于 2018-2-10 09:04
你用的是原子哥的开发板吗?先试试例程是否好用。
BootLoader的FLASH_APP1_ADDR应该等于APP中IROM的值。AP ...

请问,那到底是要WriteAddr+=secremain*1;  还是*2啊。。
回复

使用道具 举报

5

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
219
金钱
219
注册时间
2018-6-13
在线时间
63 小时
发表于 2018-8-3 19:13:00 | 显示全部楼层
我刚调通105不过是用CAN做的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 03:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表