C 启动SRAM读取操作

C 启动SRAM读取操作,c,embedded,arm,C,Embedded,Arm,我正在编程一个ARM芯片(STM32F2)“裸机”。具体来说,我想读取外部SRAM中的值。阅读本文后,我了解到此类内存事务是通过FSMC(灵活静态内存控制器)完成的 我了解如何为SRAM读/写操作初始化FSMC。(我必须将适当的GPIO引脚设置为正确的备用功能,修改一组控制寄存器等)。但是,我不知道如何启动(例如)读取操作 初始化后,我应该触摸哪些寄存器来读取(或写入)SRAM?据我所知,您可以通过FSMC控制器进行“内存映射”访问。因此,您所需要做的就是决定映射SRAM的地址空间,然后通过初始

我正在编程一个ARM芯片(STM32F2)“裸机”。具体来说,我想读取外部SRAM中的值。阅读本文后,我了解到此类内存事务是通过FSMC(灵活静态内存控制器)完成的

我了解如何为SRAM读/写操作初始化FSMC。(我必须将适当的GPIO引脚设置为正确的备用功能,修改一组控制寄存器等)。但是,我不知道如何启动(例如)读取操作


初始化后,我应该触摸哪些寄存器来读取(或写入)SRAM?

据我所知,您可以通过FSMC控制器进行“内存映射”访问。因此,您所需要做的就是决定映射SRAM的地址空间,然后通过初始化为指向该地址空间的指针访问它。

啊,听起来很简单!谢谢。@Randomblue:这很简单,而且,如果您将SRAM区域添加到链接映射中,编译器将自动将其用于静态内存,或者您可以在那里找到堆。在这种情况下,您应该在runtme启动时初始化SRAM,如果使用C代码进行初始化(或者如果任何C代码在初始化外部RAM之前运行),请确保堆栈未映射到外部内存。@Clifford:谢谢。如何将SRAM区域添加到链接图?我以前从未真正接触过链接器脚本。我应该写什么行?@unwind:写操作是否也需要同样的过程?我现在可以读SRAM,但不能在上面写。@Randomblue:这取决于您使用的工具链。我能否回答你的问题也可能取决于你在用什么。关于读/写,如果你不会写,你怎么知道你在读?您阅读的内容更像是SRAM内容,除非您有硬件故障。处理器将允许您读取任何有效地址,即使没有任何映射到它。在STM32上配置FSMC、GPIO和时钟相当复杂,很容易出错。