STM32F101xxIAP能下进去程序但程序不能运行的原因
在STM32F101XX的Flash中用先用内部引导程序写入IAP程序没有问题,再用IAP写入APP程序,程序能写入但却运行不了是什么原因?
同样的做法用在STM32103xx上就没有问题APP程序能下载进去也能运行.
两个IAP不一样的地方就只是flash的大小和flash中page的大小.
你能确定你的程序正确地烧写下去了吗?
STM32的Flash中Page的大小,在相同容量的STM32F101xx和STM32F103xx中是一样的,程序也应该是一样的。
我在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程序下载就运行不了。
小妹认为程序是正确地烧写进去了,但不知道为什么运行不了,请香水大哥指点下.
既然用Flash Loader Demo下载运行正常,那么你就用Flash Loader Demo分别读出2种下载方式烧写的代码,然后比较一下哪里不一样。
另外,我不明白你用Flash Loader Demo下载到偏移0x2000,那么你的中断向量表在哪里?
用Flash Loader Demo下载到偏移0x2000
中断向量表从0x08002000处开始
如果Boot0/Boot1设置为从用户Flash启动,系统复位后默认中断向量表从0x0800 0000开始,你是如何保证向量表的映射?
刚才试了一下,是中断向量表有问题,但不知道是哪里的问题.
写了一个点灯程序用IAP下载进去就可以运行
补充:
如果Boot0/Boot1设置为从用户Flash启动,系统复位后默认中断向量表从0x0800 0000开始.
用NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0X2000);不就是把中断向量表映射到0x08002000么?
我用Flash Loader Demo读出flash区域里的数据,发现flash区域从0x08002000向后的数据没有错(根用Flash Loader Demo下载APP程序再读出的一样)
系统复位后CPU做的第一个件事情是要从0x0800 0004(0x0800 0000是复位时堆栈的指针)的地方读出复位向量,并转去复位向量指向的地址执行指令,所有其它的操作,包括你的中断向量表的映射操作都在后面,读取复位向量是不受映射影响的,映射操作智能影响其它中断。
系统复位后从0x0800 0004的地方读出复位向量并转去执行了IAP程序是对的,从IAP也跳转到了APP,但到APP程序有中断的地方就不行了(用点灯程序作为调试信息测试的).
应该就是中断向量表的问题,我用的是stm32官方的固件库
请香水大哥指点下要修改哪里?
请在
STM32资料网站参考ST的应用笔记:
AN2557
问题找到了,原来是犯了个极愚蠢的错误,羞愧中... ...
xijing0508你好 ,我的情况和你的类似,请问你的是怎么解决的 啊!看到请加我qq好吗?33159389谢谢了啊
|