打印
[应用相关]

IAP 搞不定,请教大家

[复制链接]
2378|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a1z26|  楼主 | 2009-5-5 14:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
iap, ic, ST, vi, BLE
IAP 程序使用例程中自带的,只修改了按键对应的端口。

用户程序已经把xcl里的 Vector Table 和 ROM Start 地址都改成了0x08002000,
stm32f10x_nvic.h文件里对于Vector Table的定义也做了修改 :

#define NVIC_VectTab_FLASH           ((u32)0x08002000)

把 IAP 程序通过 H-JTAG 下载进去之后,执行,到这一步,如下图,就没反应了,过一会儿弹出一个对话框:远程系统没有响应,那个文件发送窗口也随之自动关闭了。是我哪里设置的不对吗?请教大家。

沙发
lut1lut| | 2009-5-5 15:34 | 只看该作者

像是没有解除写保护之类的

你一点点地设置断点,看看哪里出的问题。

使用特权

评论回复
板凳
ST_ARM| | 2009-5-5 16:37 | 只看该作者

请问你下面的内容是你自己改的么?

"stm32f10x_nvic.h文件里对于Vector Table的定义也做了修改 :
#define NVIC_VectTab_FLASH           ((u32)0x08002000)"

请你改回到
#define NVIC_VectTab_FLASH           ((u32)0x08000000)

使用特权

评论回复
地板
a1z26|  楼主 | 2009-5-5 17:09 | 只看该作者

回 ST_RAM

改回去是什么意思?用户程序的中断向量表不是应该从0x08002000 开始吗?

使用特权

评论回复
5
lut1lut| | 2009-5-5 17:21 | 只看该作者

本质一样的咯

在NVIC_Configuration()这个函数中:

若是
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   

#define NVIC_VectTab_FLASH           ((u32)0x08002000)

若是
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);  
则是
#define NVIC_VectTab_FLASH           ((u32)0x08000000)


使用特权

评论回复
6
a1z26|  楼主 | 2009-5-5 17:30 | 只看该作者

这个我清楚

lut1lut 你的意思我明白,但是我不明白 ST_RAM 的意思。

使用特权

评论回复
7
ST_ARM| | 2009-5-5 17:36 | 只看该作者

请搜索我以前回答其他网友关于这个问题的帖子

里面有详细的讲解。

使用特权

评论回复
8
a1z26|  楼主 | 2009-5-5 18:02 | 只看该作者

回 ST_RAM

之前都有几个人问过类似我这样的问题,一直没有人指点。那个说明文档也看了不是一两遍了,就是找不着问题。ST_RAM 如果知道,麻烦指点。

这有一个:https://bbs.21ic.com/club/bbs/list.asp?boardid=49&t=3288450&tp=iap%u5347%u7EA7%u5931%u8D25

使用特权

评论回复
9
missyou198| | 2009-5-6 08:25 | 只看该作者

晕,呵呵

https://bbs.21ic.com/club/bbs/list.asp?boardid=49&t=3288450&tp=iap%u5347%u7EA7%u5931%u8D25
这个事我问的问题,一直没有解决?

使用特权

评论回复
10
a1z26|  楼主 | 2009-5-6 09:41 | 只看该作者

missyou198

楼上问题解决了吗?

使用特权

评论回复
11
missyou198| | 2009-5-6 09:47 | 只看该作者

没有

很遗憾,到现在也没有解决

使用特权

评论回复
12
lut1lut| | 2009-5-6 10:44 | 只看该作者

调试过没有

alz26 & missyou198 :

你们有没有在代码中设置断点,能够把你们所说的“文件发送窗口也随之自动关闭”这个现象给定位一下,代码走到哪一步出现的这个现象咯。

使用特权

评论回复
13
a1z26|  楼主 | 2009-5-6 14:20 | 只看该作者

多谢 lut1lut

真是见鬼了,今天又试了几遍,居然能下载了,哈哈!

使用特权

评论回复
14
vigia| | 2009-5-6 15:04 | 只看该作者

不好的时候用AccessPort看看

串口上跑了什么数据死掉了。

使用特权

评论回复
15
a1z26|  楼主 | 2009-5-6 15:15 | 只看该作者

找着问题了

不好意思,改来该去都忘了改了什么了。

记得以前调试的时候就有堆栈错误的提示,以为是别的问题,没当回事,
今天**一现把堆栈 CSTACK 大小改了一下,默认的是 0x400,我把它改成了 0x800,
就可以下载了。

另外又明白点东西,用户程序中 main.c 中的 NVIC_SetVectorTable();
以及 stm32f10x_nvic.h 文件中的 #define NVIC_VectTab_FLASH 
二者只需要修改其中任一个就可以了。即要么在 main.c 中的 NVIC_SetVectorTable
函数中定义偏移量,要么在 stm32f10x_nvic.h 文件中直接定义向量表地址。
同时需要把xcl里的 Vector Table 和 ROM Start 地址都改成 0x08002000。

使用特权

评论回复
16
ST_ARM| | 2009-5-6 16:56 | 只看该作者

堆栈CSTACK 大小应该是0x800

在ST的例程里,CSTACK的大小为0x800。
可能有些用户在使用时没有将例程里的的ICF文件一并拿来用。

为什么是0x800?

因为IAR软件将函数中的临时变量放在堆栈区,如果某个函数中的变量(例如:数组)特别大,设置堆栈的空间不够,系统就会出错。

在本例程ymodem.c中的s32 Ymodem_Receive (u8 *buf)函数里使用的变量占用的空间达到1056个字节(0x420),超出堆栈的空间(堆栈的大小为0x400)。

使用特权

评论回复
17
lut1lut| | 2009-5-6 17:29 | 只看该作者

终于真相大白啦

正如16楼ST_ARM所说,堆栈出错了,跳到了HardFaultException()。这个ISR处理是个while(1)的死循环。

PC等了半天没有数据响应,于是取消了传输,自动关闭窗口。

alz26 & missyou198 : 不要再遗憾了哦。

使用特权

评论回复
18
a1z26|  楼主 | 2009-5-7 12:36 | 只看该作者

多谢 lut1lut

lut1lut,好同志!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

214

帖子

0

粉丝