打印
[信息]

【实战经验】程序能下载但是不能执行

[复制链接]
870|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 香水城 于 2017-8-14 11:56 编辑

STM32F411CEUx 能下载程序但不能执行

前言
某客户和我们反应他们制作回来的板子,能下载程序但是程序执行不了。


一、复现现象
硬件是:客户自己设计制作的板子。上面是STM32F411CEUx 的芯片
软件版本是Cube 库中的:基于问题是能下载程序,但是代码执行不了,所以自己用Cube 生成了一个项目工程,主函数里面就是GPIO 口的翻转,正好客户的板子上有LED 灯,所以如果代码被执行了,就可以看到灯的闪烁。


二、程序解读
连接好调试工具STLINK,

2.1/ IAR 编译环境
程序能够正常下载,而且能够执行,可以看到对应的LED 灯的闪烁。

2.2/ Keil 编译环境
使用Keil 的编译环境下载,确实能够下载,但是入口的地址是如下黄色的那行显示所示,如果单步执行(F11)或全速运行(F5),程序始终在原位置不动(0x1FFF4252),
如果强制的将PC 指针的值和SP 的值修改为0x8000000 与0x2000000,然后在点击运行,则能够跑到main()函数,再全速运行,能够看到客户板子上的LED 灯的闪烁。
但是如果不强制修改PC 和SP 指针的值,则程序不执行。

所以问题就变成为什么程序下载进去后的地址是0x1FFF4252 ?0x1FFF4252又是什么地址呢?
查阅相应的手册,

发现0x1FFF4252是处在了System memory区域。
咨询了客户,他们设计的是程序从Flash memory区域启动的而且程序中没有对Option Byte进行配置,那问题就很清楚了,用万用表测量了客户板上的Boot 0引脚的电平,发现电平不对,达到1.6V,这么高的电平可以被视为高电平了。

对照客户的原理图,原来Boot有上拉和下拉的电阻,焊接的时候将这两个电阻都焊接上去了,去掉上拉电阻,使的BOOT0的引脚接地为低电平,再编译下载进入Keil的环境,程序能够被正常执行了。问题找到了。
对于最初的测试,硬件相同,软件相同,然而IAR可以正常运行,KEIL却不能执行,不解,可以IAR编译环境的设置比较智能:)

对应的PDF:程序能下载但是不能执行
更多实战经验请看:【ST MCU实战经验汇总贴】

沙发
cgd| | 2017-3-22 11:12 | 只看该作者
沙发

使用特权

评论回复
板凳
TXQDM| | 2017-3-22 13:16 | 只看该作者
香版都不解的问题,
看来有必要好好研究研究!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:STM32技术专家

596

主题

17108

帖子

289

粉丝