77范文网 - 专业文章范例文档资料分享平台

STM32与FPGA+之间的FSMC通信(2)

来源:网络收集 时间:2019-08-20 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

4. STM32扩展外部SRAM实例

4.1 难点解析

4.1.1 数据传输自动化

第一个角度理解 STM32 有FSMC(其实其他芯片基本都有类似的总线功能),FSMC 的好处就是你一旦设置好之后,WR(写)、RD(读)、DB0-DB15 这些控制线和数据线,都是FSMC 自动控制的。打个比方,当你在程序中写到:

*(volatile unsigned short int *)(0x60000000)=val;

那么FSMC 就会自动执行一个写的操作,其对应的主控芯片的WE、RD 这些脚,就会呈现出写的时序出来(即WE=0,RD=1),数据val 的值也会通过

DB0-15 自动呈现出来(即FSMC-D0:FSMC-D15=val )。地址0x60000000 会被呈现在数据线上(即A0-A25=0,地址线的对应最麻烦,要根据具体情况来。

4.1.2 硬件连接

硬件平台:(STM32F103VC + EP3C5E144C8N)

将图中的IS61WV512BLL 改为FPGA 对应的接口即,可按照模式A-SRAM/PSRAM进行连接

那么在硬件上面,我们需要做的,仅仅是MCU 和LCD 控制芯片的连接关系: WE-WR,均为低电平有效 RD-RD,均为低电平有效

FSMC-D0-15 接LCD DB0-15 FSMC_NE1--CS 接PD7

连接好之后,读写时序都会被FSMC 自动完成。但是还有一个很关键的问题,就是RS 没有接因为在FSMC 里面,根本就没有对应RS。怎么办呢?这个时候,有一个好方法,就是用某一根地址线来接RS。比如我们选择了A16 这根地址线来接,那么当我们要写寄存器(备注:此处应为数据)的时候,我们需要RS,也就是A16(RS 为高)置高。软件中怎么做呢?也就是将FSMC 要写的地址改成0x60010000,如下:

*(volatile unsigned short int *)(0x60010000)=val; 这个时候,A16 在执行其他FSMC 的同时会被拉高,因为A0-A18 要呈现出地0x60010000。0x60010000 里面的Bit17=1,就会导致A16 为1。当要读数据(备注:此处为寄存器)时,地址由0x60010000 改为了0x60000000,这个时候A16 就为0了。

RS 问题:RS 为0 表示;读写寄存器;RS 为1,读写数据RAM;

4.2应用STM32固件对FSMC进行初始化配置

ST公司为用户开发提供了完整、高效的工具和固件库,其中使用C语言编写的固件库提供了覆盖所有标准外设的函数,使用户无需使用汇编操作外设特性,从而提高了程序的可读性和易维护性。

STM32固件库中提供的FSMC的SRAM控制器操作固件,主要包括1个数据结构和3个函数

FSMC_NORSRAMInitStructure (调用库函数)

RCC_Configuration(); (时钟选择)

NVIC_Configuration(); (中断优先级) FSMC_GPIO_Configuration(); (连接IO口初始化) FSMC_SRAM_Init(); (FMSC配置) USART_Initial(); (UART1端口配置 )

4.2 其他人调试遇到问题点(摘录)

项目中需要使用STM32和FPGA通信,使用的是地址线和数据线,在FPGA中根据STM32的读写模式A的时序完成写入和读取。之前的PCB设计中只使用了8跟数据线和8根地址线,调试过程中没有发现什么问题,在现在的PCB中使用了8根地址线和16根数

据线,数据宽度也改成了16位,刚开始是读取数据不正确,后来发现了问题,STM32在16位数据宽度下有个内外地址映射的问题,只需要把FPGA中的设定的地址乘以2在STM32中访问就可以了,但是在写操作的时候会出现写当前地址的时候把后面的地址写成0的情况,比如说我给FPGA中定义的偏移地址0x01写一个16位数据,按照地址映射,在STM32中我把地址写入0x02,。实际测试发现这个地址上的数据是对的,但是FPGA中0x02地址上的数据也变成了00。

块1存储区被划分为4个NOR/PSRAM区,这四个区在内部地址上是连续排列的。但是实际上每个区共用的是同一组地址线与数据线,因此需要有 内外的一个地址映射,因此在STM32中实际上有两个地址,一个是在内部访问的地址,另外一个是实际地址线输出的地址。HADDR[27:0]对应的是需要转换到外部存储器的内部AHB地址线,其HADDR[27:26]位用于选择四个存储块之一。HADDR[25:0]包含外部存储器地址。HADDR是字节地址,而不同的外部存储器数据长度也不一样,因此在数据宽度为8位和16位时映射关系也不一样。

在数据宽度为8位时HADDR[25:0]与FSMC_A[25:0]对应相连,这时候在STM32中访

问的地址和实际地址线产生的地址是一致的。而在16位数据宽度时HADDR[25:1]与FSMC_A[24:0]对应相连,HADDR[0]未接,这时候实际地址线上给出的地址为需要访问的偏移地址的一半。

经过一晚上的测试,发现写数据时实际上是进行了多次写入,导致把后面的地址也

给写上了,最终导致数据混乱,后来经过学长提醒,决定把访问的地址定义为16位的,原来是32位的,经过测试问题解决。所以这儿也算是长了经验,因为我只用了8根地址线,为了避免可能的问题,地址最好定义成对应的位数。但是还是很纳闷为什么之前八位数据线读写的时候没有这个问题。

5.结 语

STM32作为新一代ARM Cortex-M3核处理器,其卓越的性能和功耗控制能够适用于广泛的应用领域;而其特殊的可变静态存储技术FSMC具有高度的灵活性,对于存储容量要求较高的嵌入式系统设计,能够在不增加外部分立器件的情况下,扩展多种不同类型和容量的存储芯片,降低了系统设计的复杂性,提高了系统的可靠性。

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库STM32与FPGA+之间的FSMC通信(2)在线全文阅读。

STM32与FPGA+之间的FSMC通信(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/681343.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: