STMCU小助手
发布时间:2022-2-28 19:48
|
前言 某客户和我们反应他们制作回来的板子,能下载程序但是程序执行不了。 一、复现现象 硬件是:客户自己设计制作的板子。上面是 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 编译环境的设置比较智能 ![]() |
【福利三:雨露均沾·逢7狂欢】之四:用一个定时器同步另外两个定时器输出PWM
【逢7发帖赢大礼】STM32开发之WIFI实时时钟
【逢7发帖赢大礼】STM32开发之指纹识别!
【逢7发帖赢大礼】STM32开发之环境空气质量监测
【逢7发帖赢大礼】STM32开发之人体实时运动信息监测!
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
【逢7发帖赢大礼】全网最简单的Arduino_STM32开发环境搭建教程!
STM32F4中文用户手册
STM32F400、STM32F402 Cortex-M4超值单片机
SPI 高温读错最后一位?STM32F42xx 官方根治方案
微信公众号
手机版