基于51单片机i2c多字节的读写

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于51单片机i2c多字节的读写

使用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/thread-490070-1-1l

将下面几行代码添加到systeminit函数的开头。

相关文档
最新文档