15480|13

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32F101xxIAP能下进去程序但程序不能运行的原因 [复制链接]

在STM32F101XX的Flash中用先用内部引导程序写入IAP程序没有问题,再用IAP写入APP程序,程序能写入但却运行不了是什么原因?
     同样的做法用在STM32103xx上就没有问题APP程序能下载进去也能运行.
     两个IAP不一样的地方就只是flash的大小和flash中page的大小.
此帖出自stm32/stm8论坛

最新回复

                                 xijing0508你好 ,我的情况和你的类似,请问你的是怎么解决的 啊!看到请加我qq好吗?33159389谢谢了啊  详情 回复 发表于 2009-8-1 23:02
点赞 关注
 

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你能确定你的程序正确地烧写下去了吗?

STM32的Flash中Page的大小,在相同容量的STM32F101xx和STM32F103xx中是一样的,程序也应该是一样的。
此帖出自stm32/stm8论坛
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我在STM32F103VET6上做的IAP程序可以,
STM32F103VET6   Flash:512K   ram:64K
Flash的每个page个2k(高密度)
但在STM32F101C8T6上做的IAP程序能下载进去但运行不了
STM32F101C8T6   Flash:64K   ram:10K
Flash的每个page个1k(中密度)


在STM32F101C8T6上的IAP、APP文件的连接文件摘取主要部分如下:

//IAP程序的连接文件stm32f10x_flash.icf   (IAR5.20版本)

define symbol __ICFEDIT_intvec_start__ = 0x08000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__   = 0x08000000 ;
define symbol __ICFEDIT_region_ROM_end__     = 0x0800FFFF;
define symbol __ICFEDIT_region_RAM_start__   = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__     = 0x20002800;


//APP程序的连接文件Inkarm_flash.xcl   (IAR4.42版本)
// Code memory in FLASH
-DROMSTART=0x8002000
-DROMEND=0x800FFFF    //0x801FFFF

// Data in RAM
-DRAMSTART=0x20000000
-DRAMEND=0x20002800  //0x20004FFF


//APP程序的main函数让应用程序从0x08002000处开始写
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0X2000);

APP程序不变(flash偏移0x2000),用Flash Loader Demo下载运行正常,用IAP程序下载就运行不了。
此帖出自stm32/stm8论坛
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 小妹认为程序是正确地烧写进去了,但不知道为什么运行不了,请香水大哥指点下.
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
既然用Flash Loader Demo下载运行正常,那么你就用Flash Loader Demo分别读出2种下载方式烧写的代码,然后比较一下哪里不一样。

另外,我不明白你用Flash Loader Demo下载到偏移0x2000,那么你的中断向量表在哪里?
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

6
 
用Flash Loader Demo下载到偏移0x2000
中断向量表从0x08002000处开始
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(中级)

7
 
                                 如果Boot0/Boot1设置为从用户Flash启动,系统复位后默认中断向量表从0x0800 0000开始,你是如何保证向量表的映射?
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

8
 
刚才试了一下,是中断向量表有问题,但不知道是哪里的问题.
写了一个点灯程序用IAP下载进去就可以运行
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

9
 
补充:     
如果Boot0/Boot1设置为从用户Flash启动,系统复位后默认中断向量表从0x0800 0000开始.
     用NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0X2000);不就是把中断向量表映射到0x08002000么?
    我用Flash Loader Demo读出flash区域里的数据,发现flash区域从0x08002000向后的数据没有错(根用Flash Loader Demo下载APP程序再读出的一样)
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 系统复位后CPU做的第一个件事情是要从0x0800 0004(0x0800 0000是复位时堆栈的指针)的地方读出复位向量,并转去复位向量指向的地址执行指令,所有其它的操作,包括你的中断向量表的映射操作都在后面,读取复位向量是不受映射影响的,映射操作智能影响其它中断。
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

11
 
系统复位后从0x0800 0004的地方读出复位向量并转去执行了IAP程序是对的,从IAP也跳转到了APP,但到APP程序有中断的地方就不行了(用点灯程序作为调试信息测试的).
应该就是中断向量表的问题,我用的是stm32官方的固件库
请香水大哥指点下要修改哪里?
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

12
 
请在STM32资料网站参考ST的应用笔记:

AN2557
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

13
 
                                 问题找到了,原来是犯了个极愚蠢的错误,羞愧中... ...
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

14
 
                                 xijing0508你好 ,我的情况和你的类似,请问你的是怎么解决的 啊!看到请加我qq好吗?33159389谢谢了啊
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved