打印

香水城,请教你STM32F103VCT6 FSMC问题

[复制链接]
6118|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
看过以前你回答过VCT6 FSMC来控制外部RAM的问题,但是我还是没有搞定。

我的RAM是一个特殊功能的双口RAM,主要有如下接口形式可与MCU相连:

Synchronous Intel Mode
In this mode Intel CPUs like 80C51/52/32 and compatible processor series
from several manufacturers can be used.
沙发
Hurry840420|  楼主 | 2012-10-16 20:45 | 只看该作者
图片是四种接口模式

Sync_INTEL.jpg (110.14 KB )

Sync_INTEL.jpg

ASy_Intel.jpg (109.88 KB )

ASy_Intel.jpg

SYN_M.jpg (215.31 KB )

SYN_M.jpg

ASYN_M.jpg (111.43 KB )

ASYN_M.jpg

使用特权

评论回复
板凳
Hurry840420|  楼主 | 2012-10-16 20:48 | 只看该作者
具体地址锁存和数据线分散及复合模式如这两个附件

80C32.jpg (53.91 KB )

80C32.jpg

80286.jpg (66.71 KB )

80286.jpg

使用特权

评论回复
地板
Hurry840420|  楼主 | 2012-10-16 20:51 | 只看该作者
然后我按照您之前的帖上所说,把ALE通过74AHC1G00反向、高四根地址线用74HCT273配合锁存信号进行锁存,尝试了把FSMC配置成NOR 和NAND的 MULTIPLEX方式,结果都失败了,我就是看不到ALE信号出来...

使用特权

评论回复
5
Hurry840420|  楼主 | 2012-10-16 20:56 | 只看该作者
我现在要实现的是 STM32F103VCT6 数据线和地址线复用方式下,来控制我这个RAM。

我看了AN2784上说的,100脚应该只能考虑复用方式;然后手册上的timing图显示,只有Asynchronous multiplexed PSRAM/NOR 模式才能和我这个RAM的Synch. Intel模式对应, 可这问题就来了,一个是非同步,一个是同步,如何匹配?

如果选其它模式,就非要去检测XREADY信号,可是VPC3+C在复用模式下根本没有XREADY信号...

搞了几天,很蜜湖,请致电迷津

使用特权

评论回复
6
Hurry840420|  楼主 | 2012-10-17 09:08 | 只看该作者
纠结阿,没想到STM32弄得这么复杂...

使用特权

评论回复
7
IJK| | 2012-10-17 10:30 | 只看该作者
我感觉是LZ想得太复杂。
1个问题,目前LZ的首要困难是什么? 是没看到ALE信号?
按理STM32的FSMC在地址、数据线复用模式下有 NADV信号,相当于ALE信号的反相,所以用个反相器是对的。
按理只要配置STM32为复用模式,在对FSMC进行读写访问时,就会在NADV引脚看到有效信号。

使用特权

评论回复
8
Hurry840420|  楼主 | 2012-10-18 11:09 | 只看该作者
你想简单了,不是我想复杂了...

你再说理论,我再说实践。。。

使用特权

评论回复
9
lut1lut| | 2012-10-18 12:07 | 只看该作者
我的感觉和7楼一样。。。

你的ALE出不来什么意思?STM32F的NADV没有输出?那么MCU外面什么也不挂,ALE有么?

使用特权

评论回复
10
Hurry840420|  楼主 | 2012-10-21 18:42 | 只看该作者
我的main函数如下:
int main(void)
{
        u8 profibusAddress=0;
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_Configuration();
        NVIC_Configuration();
        GPIO_Configuration();
        EXTI_Config_OFF();
        FSMC_NOR_Init();
                while(1)
                {
                    LED_ON();
                   result=(UWORD)(*(vu8*) (Bank1_SRAM1_ADDR + address));
                    LED_OFF();
                 }
}
只要我去读那个我ram中数据了,就死机,LED也就不动了;把中间那句去掉,LED就来回闪动,很正常。

使用特权

评论回复
11
Hurry840420|  楼主 | 2012-10-21 18:43 | 只看该作者
我的fsmc函数如下:
void FSMC_NOR_Init(void)
{
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;
  GPIO_InitTypeDef GPIO_InitStructure;

  /* Enable the FSMC Clock */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);

  // Hurry 2012.10.16
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);

  /*-- GPIO Configuration ------------------------------------------------------*/
  /* NOR Data lines configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |
                                GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
                                GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 |
                                GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_Init(GPIOE, &GPIO_InitStructure);

  /* NOE and NWE configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;                // Hurry 2012.10.16
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  /* ALE configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                                // Hurry 2012.10.16
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* NE2 configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_Init(GPIOD, &GPIO_InitStructure);

  /*-- FSMC Configuration ----------------------------------------------------*/
  p.FSMC_AddressSetupTime = 0x0A;
  p.FSMC_AddressHoldTime = 0x0A;
  p.FSMC_DataSetupTime = 0x0A;
  p.FSMC_BusTurnAroundDuration = 0x0A;
  p.FSMC_CLKDivision = 0x08;
  p.FSMC_DataLatency = 0x00;                                  
  p.FSMC_AccessMode = FSMC_AccessMode_A;

  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Enable;//FSMC_DataAddressMux_Disable;         //
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_AsyncWait = FSMC_AsyncWait_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);

  /* Enable FSMC Bank1_NOR Bank */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE);

使用特权

评论回复
12
wekginchin| | 2014-1-22 08:41 | 只看该作者
我也在调这个,我的是STM32F4xx的,纠结着这个时序

使用特权

评论回复
13
george3023| | 2019-5-21 12:03 | 只看该作者
想跟楼主请教一下FSMC的问题,邮箱:george3023@126.com

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

9

帖子

0

粉丝