最近一段时间一直在学习STM32和ucos的移植,使用的开发环境是keil u4版本。仿真器是80元买的jlink。
在学习了STM32固件库和ucos内核与移植相关的程序之后,写了一个流水灯程序,准备下载到板子上看看情况。哪知程序还没有下进去,在debug时,keil的错误提示到:Error: Flash download failed-"Cortex-M3"
感觉这么错误很普遍,也是初学者常常遇到的错误,下面我就将这个错误产生的原因和解决方法赘述一下:
错误产生的原因和分析,解决。
首先,我们看到提示信息是有关flash的,那么我们来查看一下STM32F103XB的数据手册关于这部分的描述(我使用的芯片是STM32F103RB,有128kflash。) 知道了原来flash在此芯片中的地址是从
0x0800 0000到0x0801 FFFF 这段,也就是说这段存储空间是用来存储程序。而在STM32芯片方面,它又有一个规则,那就是芯片启动的方式,如果你把程序下载到了flash中,那么在复位芯片之前或者通电之前,要将boot0,boot1两个引脚拉到高电平,这样在启动时,芯片初始化之后,运行程序代码才是从flash地址开始执行的。
于是,我们来查看一下keil中仿真器的设置,是不是正确,设置的选项在keil软件的project-options for target中的Utilities中,先来查看下仿真器是否选对,然后点settings,弹出如下菜单:
查看一下programming Algorism 下的flash地址是否正确,如果不正确则会引起开始那个错误的提示信息,
如果正确还是出现那个错误,那么按照官方给的解决方法是,删除现有的flash地址,重新配置一下,记得要选对芯片型号和地址空间。配置好之后点击OK退出。然后再查看一下Target中的地址,是否跟你重新添加的一致,如果一致,那么点OK退出。然后重新编译链接即可。
当你认为修改一个程序总是往flash里烧写测试比较费芯片,那么你可以把程序下载到SDRAM中,配置跟上文类似,这里就不再赘述。不过地址是从0x2000 0000 开始的,结束地址要看你的芯片SDRAM的大小,也可以根据你的程序的大小来定。设置好之后,一定要重新编译链接!!这样就可以。希望你的问题得到解决的同时,也学到一些知识,如有错误的地方请您指出,谢谢。
=====================================================================================
请问高手,我在调试我的STM32F101c8t6时,遇到一个问题,因为我要调试串口,我在main.c中添加了#include
_sys_open:
0x08001450 B50E PUSH {r1-r3,lr}
0x08001452 E9CD0100 STRD r0,r1,[sp,#0]
0x08001456 F000FAF9 BL.W strlen (0x08001A4C)
0x0800145A 9002 STR r0,[sp,#0x08]
0x0800145C 4669 MOV r1,sp
0x0800145E 2001 MOVS r0,#0x01
0x08001460 BEAB BKPT 0xAB
0x08001462 BD0E POP {r1-r3,pc}
应该是你没有选中微库造成的。这个问题昨天我遇到过。在工程的设置选项里把微库勾上就OK了
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』