STM32F429使用外扩SDRAM运行程序方法.PDFVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
STM32F429使用外扩SDRAM运行程序 的方法 一. SDRAM 运行程序基本原理 STM32 的高端产品429/439 添加了新的外设,SDRAM 控制器(FMC 总线)。不少客户都使用外扩的 SDRAM 作为变量的存储区,也有可能作为C stack 和heap 的存放区,因此,需要在IAR 链接前(数 据的拷贝)完成SDRAM 控制器的初始化工作,ST 已经提供相关代码供客户参考(初始化程序在 system_stm32f4.c 中)。 若对函数使用IAR 链接器关键字 (例:__ramfunc void func1(void) ),IAR 在链接的时候会将程序放 在SDRAM 的区域,并将函数的入口地址传给调用者。 二. 客户问题描述及原因 客户反映使用外扩SDRAM 运行程序(使用链接器将code 存放在SDRAM 中,与编译器无关,采用 GCC 或者IAR 都有这个问题)出错,Hard Fault 发生。 单步运行,使能Usage, Memory, Bus Fault,发现Hard Fault 是由Memory Fault (bit 0 IACCVIOL) 引起的。 参考ARM 关于Cortex-M4 内核IACCVIOL 位的说明 Instruction access violation flag: 0 = no instruction access violation fault 1 = the processor attempted an instruction fetch from a location that does not permit execution. The PC value stacked for the exception return points to the faulting instruction. The processor has not written a fault address to the MMAR. This fault condition occurs on any access to an XN (eXecute Never) region, even when the MPU is disabled or not present. Potential reasons: a) Branch to regions that are not defined in the MPU or defined as non-executable. b) Invalid return due to corrupted stack content. c) Incorrect entry in the exception vector table 在M4 内核中,0x2000 0000 以上的地址是通过System Bus 来访问的,system bus 是可以对数据和指 令读取的,但是内核的默认设置(即MPU 处于Disabled 的状况下),部分地址禁止执行指令,见下 图 (STM32F429 的SDRAM 取值范围设置在0xC000 0000 以上),因此会发生该错误。 因此有两种解决方案: 1. 更改MPU (Memory Protect Unit) 设置(通用性上来讲此方法更好,本文将介绍这种实现方 式)。 2. Memory Remap (将SDRAM 调整到I-Code 总线上)。 三. MPU 设置方法 关于MPU 的讲解,强烈建议大家阅读《ARM Cortex-M3 权威指南》或者ARM Cortex-M4 的官方文档。 在与本文对应的例程中已给出了基本的实现方法 (请参考stm32_mpu.c )。同时,本文也给出了如何 将数据存放在SRAM 及CCMRAM 的方法(请参考IAR_DevelopmentGuide)。 四.结语 MPU 的主要作用是实施存储器的保护,它能够在系统或程序出现异常而非正常地访问不应该访问的存 储空间时,通过触发异常中断而达到提高系统可靠性的目的。 所谓非正常地访问不应该访问的存储空间,最常见的现象是存储器访问越界,更具体的表现可以是数 组溢出、堆栈溢出、动态存储器分配失败等情况;另一种常见的现象是程序跑飞了。 事实上,MPU 可以RTOS 中有着更广泛的应用 (参考FreeRTOS 相关资料)。

文档评论(0)

aa15090828118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档