第一次接触STM32,按照stm库例子编了个空白main(),芯片是STM32F107RCT6,Revision Z(看了Errata Sheet这个版本有点问题,不过我不用Boot Loader)系统是Win7,编译环境是EWARM 6.30的30天试用版(和谐了,就算没和谐也在试用期内),仿真器是STLINK/V2,使用SWD调试接口。问题如下: 1、通过编译后,想下载到Flash中调试,修改了stm32f10x_flash.icf里面的ROM和RAM设置到芯片对应范围,打勾use flash loader,提示断点只能6个之类,并且下载一直结束不了,cancel后有出错信息,提示目标设备上电之类的。打开verify download选项,发现校验通不过,但奇怪的是在校验0x20000000 RAM区域里面的东西。几次后摸不着头脑,换新方法 2、网上找了些资料,想转到RAM中调试,免得flash折寿。compiler选项preprocessor中加入VECT_TAB_SRAM,linker中换成stm32f10x_ram.icf,并且把ROM设置成0x2000000-0x20007FFF,RAM设置成0x20008000-0x2000FFFF,vector table为0x20000000,去掉download中的各种选项,下载,执行,程序不知所终。去掉run to main选项,再下载,程序停止在__iar_program_start位置,机器码为0x5a20,单步死了,PC变为0xFFFFFFFE。上电断电反复试验均是如此,该处机器码始终是0x5a20。检查vector table,里面的地址正确,检查map文件,定位信息正确。 3、不作任何改动,换成simulator,加载,一切正常!但发现__iar_program_start处的机器码为0x46C0,不是0x5A20。说明没有向RAM中写入代码,但是即使断电,RAM调试时始终为0x5A20,说明仿真器还是IAR向该处写过东西,否则不会一直不变。试过修改ROM和RAM其他分配方式,还是如此。 4、仍然使用RAM调试方法,停在__iar_program_start位置后,根据simulator里面的信息手工修改后面的几条机器码,单步正常,说明芯片是好的。 折腾了2天,网上到处找,没有相关信息,没辙了,上来向STM32的高手求教不过我刚注册,没分数送 |
回复:STM32 IAR没法调试,求教
RE:STM32 IAR没法调试,求教
2、你默认,不修改试试看看能不能运行,实在不行你把你的工程发出来,大家帮你改一下。
RE:STM32 IAR没法调试,求教
1)并不一定要定义"ECT_TAB_SRAM",直接在工程源代码里找到NVIC的初始化程序,将其向量定位到RAM。
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
// NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);
// NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
//......(其余省去)
}
RE:STM32 IAR没法调试,求教