×
单片机 > 单片机程序设计 > 详情

STM32在keil下使用jlink时产生错误的解决方法

发布时间:2020-08-26 发布时间:
|
当STM32在keil下使用jlink时产生错误得时候该怎么办? 

最近一段时间一直在学习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  ,编译可以通过,但是当我用jlink硬件调试时,一开始就停在了 " 0x08001460 BEAB      BKPT     0xAB";并且无法向下运行.  请问高手,这个问题的原因是什么?怎么解决? 谢谢!      
          _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了 



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
qemu+chroot构建arm aarch64虚拟机