使用keil的编译环境下载,确实能够下载,但是入口的地址是如下黄色的那行显示所示,如果单步执行(f11)或全速运行(f5),程序始终在原位置不动(0x1fff4252),如果强制的将pc指针的值和sp的值修改为0x8000000与0x2000000,然后在点击运行,则能够跑到main()函数,再全速运行,能够看到客户板子上的led灯的闪烁。
但是如果不强制修改pc和sp指针的值,则程序不执行。
所以问题就变成为什么程序下载进去后的地址是0x1fff4252?0x1fff4252又是什么地址呢?查阅相应的手册,发现0x1fff4252是处在了systemmemory区域。
用万用表测量了客户板上的boot0引脚的电平,发现电平不对,达到1.6v,这么高的电平可以被视为高电平了。
对照客户的原理图,原来boot有上拉和下拉的电阻,焊接的时候将这两个电阻都焊接上去了,去掉上拉电阻,使的boot0的引脚接地为低电平,再编译下载进入keil的环境,程序能够被正常执行了。问题找到了。
对于最初的测试,硬件相同,软件相同,然而iar可以正常运行,keil却不能执行,不解,可以iar编译环境的设置比较智能。
问题2:调试进入hardfault_handler函数
网上说了比如堆栈溢出,内存溢出的原因,
对照上述方法未解决。查阅发现有可能是stm32l系列使用内部时钟hsi的原因。
stm32l低功耗的芯片在配置系统时钟之前,需要配置flash的访问方式以acc64以及latency,还有内核可调电压的范围vos[1:0]。否则的话,连最高频率32mhz都无法作为系统时钟。
转自:http://bbs.eeworld.com.cn/thread-490070-1-1.html
将下面几行代码添加到systeminit函数的开头。
flash_readaccess64cmd( disable);//系统默认是32位访问,根据情况,可以配置为64位
flash_setlatency(flash_latency_0); //flash zero latency cycle
//使能pwr时钟
set_bit(rcc->apb1enr, rcc_apb1enr_pwren);
while(!read_bit(rcc->apb1enr, rcc_apb1enr_pwren))
_ _nop();
//配置内核电压,cpu为高性能。本例中系统时钟最高16mhz
pwr_voltagescalingconfig(pwr_voltagescaling_range1);
总结对各个产业会产生普遍影响的重要科技力量有哪些
5G能给我们的生活带来哪些颠覆性的体验?
人工智能:2023年AIGC产业观察
你知道公链是什么吗
意法半导体之家电控制系统-大家电方案
基于51单片机i2c多字节的读写
TC-HSP系列PIN-FET光探测模块
华为大部分工程师开发的是软件,而不是硬件
质谱(Mass Spectrometry)|质谱仪器
新松机器人成为国内复合机器人首创者
igct和gto晶闸管相比具有什么特点
瑞能半导体与广大客户携手助力行业实现高质量发展
IC卡预付费电表具有哪些功能及特点
选购AirPods Max前需要知道的知识点
ipadmini6内存多大,ipadmini6重量
MXIM宣布推出MAX20092 12通道开关矩阵管理器
台湾人工智能芯片联盟成立 联发科AI团队已达800人
国巨宣布将停止芯片电阻接单 芯片电阻涨价箭在弦上
基于PoseDiffusion相机姿态估计方法
红外线传感器有哪些类型 红外线传感器有什么用