stm32学习笔记0516.docx

上传人:b****4 文档编号:4877719 上传时间:2022-12-11 格式:DOCX 页数:10 大小:679.19KB
下载 相关 举报
stm32学习笔记0516.docx_第1页
第1页 / 共10页
stm32学习笔记0516.docx_第2页
第2页 / 共10页
stm32学习笔记0516.docx_第3页
第3页 / 共10页
stm32学习笔记0516.docx_第4页
第4页 / 共10页
stm32学习笔记0516.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

stm32学习笔记0516.docx

《stm32学习笔记0516.docx》由会员分享,可在线阅读,更多相关《stm32学习笔记0516.docx(10页珍藏版)》请在冰豆网上搜索。

stm32学习笔记0516.docx

stm32学习笔记0516

STM32 FSMC学习笔记

 

(2012-08-3115:

26:

53)

转载▼

标签:

 

stm32f103

 

fsmc

 

it

分类:

 嵌入式计算机技术

(文章写的很乱,见谅!

FSMC全称“灵活静态存储器控制器”。

FSMC包括4个模块:

(1)AHB接口(包括FSMC配置寄存器)

(2)NOR闪存和PSRAM控制器(驱动LCD的时候LCD就好像一个PSRAM的里面只有2个16位的存储空间,一个是DATARAM一个是CMDRAM)

(3)NAND闪存和PC卡控制器

(4)外部设备接口

每个模块通过片选信号控制

--------------------------------------------------------------------------------------------------

硬件电路(这里给出的是非复用连接)

可以这样接 

地址线A0接RS

NE接CS

NEW–WR

NOE–RD

FSMC与外设连接好以后,就等于对于使用者屏蔽了对外设备的具体操作,只要对应类型的映射地址空间写入数据,这些数据+地址就会被自动翻译,并写入外围存储设备。

对于写LCD来说,STM官方库里有一些常用写法:

#defineLCD_BASE    ((u32)(0x60000000|0x0C000000))//我解释一下,地址是BANK1的第四块

#defineLCD         ((LCD_TypeDef*)LCD_BASE)

voidLCD_WriteReg(u8LCD_Reg,u16LCD_RegValue)

{

 

  LCD->LCD_REG=LCD_Reg;

 

  LCD->LCD_RAM=LCD_RegValue;

}

u16LCD_ReadReg(u8LCD_Reg)

{

 

  LCD->LCD_REG=LCD_Reg;

 

  return(LCD->LCD_RAM);

}

当然也可以自己操作,完全在于自己。

--------------------------------------------------------------------------------------------------

 初始化问题:

1位宽:

主要是AHB到NOR/PSRAM位宽的,比如如果AHB设为32位,NOR为16位,他会分两次传输

2:

设置地址

手册是这样写的:

在NOR/PSRAM模式下HADDR[27:

26](HADDRareinternalAHBaddresslinesthataretranslatedtoexternalmemory)用来片选NOR/PSRAM的四个分区。

A[25:

0]是地址线,因为HADDR是字节地址但是存取其按字编址,所以根据位宽的不同由以下情况。

(1)当存储数据设为8位时,    地址各位对应FSMC_A[25:

0],数据位对应FSMC_D[7:

0](存储大小64MB*8=512MB)

(2)当存储数据设为16位时,    地址各位对应FSMC_A[25:

1]>>1(即FSMC_A[24:

0]),数据位对应FSMC_D[15:

0]

(存储大小(64MB/2)*16=512MB)

注意:

在16位外部存储宽度下,FSMC内部会用A[25:

1]去生成A[24:

0]。

不论8位或16位的情况,FSMC_A[0]必需连接外部存储的A[0]。

--------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------

FSMC的好处就是你一旦设置好之后,WR、RD、DB0-DB15这些控制线和数据线,都是FSMC自动控制的。

打个比方,当你在程序中写到:

(volatileunsignedshortint*)(0x60000000)=val;

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

FSMC-D15=val)。

地址0x60000000会被呈现在数据线上(即A0-A25=0,地址线的对应最麻烦,要根据具体情况来,好好看看FSMC手册)。

     连接好之后,读写时序都会被FSMC自动完成。

但是还有一个很关键的问题,就是RS没有接,CS没有接。

因为在FSMC里面,根本就没有对应RS和CS的脚。

怎么办呢?

这个时候,有一个好方法,就是用某一根地址线来接RS。

比如我们选择了A16这根地址线来接,那么当我们要写寄存器的时候,我们需要RS,也就是A16置高。

软件中怎么做呢?

也就是将FSMC要写的地址改成0x60020000,如下:

(volatileunsignedshortint*)(0x60020000)=val;

这个时候,A16在执行其他FSMC的同时会被拉高,因为A0-A18要呈现出地址0x60020000。

0x60020000里面的Bit17=1,就会导致A16为1。

当要读数据时,地址由0x60020000改为了0x60000000,这个时候A16就为0了。

--------------------------------------------------------------------------------------------------

下来就是关于FSCM时序问题,大家都有讨论:

一.当FSMC选择NOR和PSRAM模块时:

分为两种:

1.异步事务2.同步突发事务

异步事务分为普通模式(mode1,mode2)和模式1与模式2的4种扩展模式(modeA,B,C,D);

二.Generaltimingrules(通用时序规则):

 1.Allcontrolleroutputsignalschangeontherisingedgeoftheinternalclock(HCLK)

(所有输出控制信号在内部时钟(HCLK)的上升沿改变)

2.Insynchronousreadandwritemode,theoutputdatachangesonthefallingedgeofthe

memoryclock(FSMC_CLK).

(在同步读和写模式下,输出信号在存储器CLK的下降沿改变)

三.采样规则

TheFSMCalwayssamplesthedatabeforede-assertingthechipselectsignalNE.This

guaranteesthatthememorydata-holdtimingconstraintismet(chipenablehighto

datatransition,usually0nsmin.)

(FSMC总是在撤销片选信号NE前采样数据,这保证了了储存器数据保持时间的约束能够满足。

四:

时序计算

设定值都是以Hclk为基本单位的

公式:

现在没有完全弄明白的是,因为是异步模式,数据通过延迟一个HCLK通知给了对端,地址线上的信号怎么通知对端有效呢?

--------------------------------------------------------------------------------------------------

下面是一些资料上的数据,可以估算时间是否大概满足应用的要求:

--------------------------------------------------------------------------------------------------

一些常见问题的FAQ:

1.STM32F103FSMC是不是所有型号都有?

 

ANS:

VC,VD,VE,ZC,ZD,ZE只有这几个型号有。

---------------------------------------------------------------------------------------------------------------------------------

 

2.复用和非复用?

STM32的FSMC支持数据与地址线复用或非复用两种模式

非复用模式:

16位数据线及26位地址线分开始用。

推荐在144脚及以上的STM32产品上使用该模式。

复用模式:

低16位数据/地址线复用。

在该模式下,推荐使用地址锁存器以区分数据与地址。

若不使用锁存器:

当NADV为低时,ADx(x=0…15)上出现地址信号Ax,当NADV变高时,ADx上出现数据信号Dx。

若使用锁存器:

可同时在ADx上得到Ax和Dx。

FSMC中未使用的数据线或地址线可配置为GPIO

对于16位宽度的外部存储器,FSMC将在内部使用HADDR[25:

1]产生外部存储器的地址FSMC_A[24:

0]。

因此,实际的访问地址为右移一位之后的地址。

---------------------------------------------------------------------------------------------------------------------------------

 

3.时序图(扩展模式)

普通模式和扩展模式的不同主要用途我觉得,就是把读、写设置成不尽相同的时序。

所谓的模式A、B、C、D,其实没多大区别。

引用手册原文:

Thedifferenceswithmode1arethetogglingofNADVandtheindependentreadandwritetimingswhenextendedmodeisset。

---------------------------------------------------------------------------------------------------------------------------------

 

4. FSMC_NWAIT和FSMC_NE1/FSMC_NCE2.不明白这两个怎么用?

ANS:

NBL0,NBL1,在STM32F103的数据手册里面有规定IO的,不能随便换.(PSRAM时使用)

NWAIT应该是FLASH操作才用的.NE1,NCE2就是一些片选信号.STM32的FSMC支持同时挂多个器件,每个器件都必须有一个CS(也就是NEx,NCEx).

NADV(NL)在复用时时所存信号。

在非复用模式控制PSRAM输出有效。

看了1天的英文资料和论坛,这是我总结出来的一些杂乱的信息,由于刚到嵌入式开发行列,底子太弱,所以先把这些保存下来,供以后使用。

下周一实验板就来了,估计花些时间调一下FSMC,再加上DMA的功能,希望能改善产品。

PS:

纠结了快一个礼拜。

终于搞定了

,现在只需测一下性能,再加上DMA。

最后测下DMA对CPU有多少开销就OK了!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机软件及应用

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1