21ic电子技术开发论坛 单片机与嵌入式系统 ST MCU FSMC访问SRAM的问题〔找到了原因,硬件问题,结帖〕
发新帖我要提问
返回列表
打印

FSMC访问SRAM的问题〔找到了原因,硬件问题,结帖〕

[复制链接]
4258|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
skywalkzf|  楼主 | 2008-12-8 15:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用的MCU为STM32F103VC,在使用FSMC访问外部的SRAM的时候,功能脚上没有输出信号?
在使用中为数据线和地址线复用的形式,所以外部加锁存器进行地址锁存,用NADV信号来控制锁存器的lock脚。
信号连接:
    NADV---->PB7
    NOE----->PD4
    NWE----->PD5
    NE1----->PD7
    NBL0---->PE0
    NBL1---->PE1
我使用的为IAR5.0,使用STM32的库函数

我的初始化如下:
/* DMA1 and DMA2, FSMCclock enable */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 | RCC_AHBPeriph_DMA2|RCC_AHBPeriph_SRAM|RCC_AHBPeriph_FSMC, ENABLE);

void FSMC_SRAM_Init(void)
{
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;
  GPIO_InitTypeDef GPIO_InitStructure; 
  
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE , ENABLE);
  
/*-- GPIO Configuration ------------------------------------------------------*/
  /* Set PD.00(D2), PD.01(D3), PD.08(D13), PD.09(D14),
     PD.10(D15),PD.11(A16), PD.14(D0), PD.15(D1) as alternate 
     function push pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |
                         GPIO_Pin_10 |GPIO_Pin_11 | 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);
   
  /* PD.04(NOE), PD.05(NWE), PD.07(NE1) configuration */  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5|GPIO_Pin_7;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  
  /* NBL0, NBL1 configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; 
  GPIO_Init(GPIOE, &GPIO_InitStructure); 

  /*NADV configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; 
  GPIO_Init(GPIOB, &GPIO_InitStructure); 
  
/*-- FSMC Configuration ------------------------------------------------------*/
  p.FSMC_AddressSetupTime = 2;
  p.FSMC_AddressHoldTime = 2;
  p.FSMC_DataSetupTime = 3;
  p.FSMC_BusTurnAroundDuration = 2;
  p.FSMC_CLKDivision = 2;
  p.FSMC_DataLatency = 3;
  p.FSMC_AccessMode = FSMC_AccessMode_B;

  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Enable;
  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_SRAM Bank */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  
}
然后我调用FSMC_SRAM_WriteBuffer(),进行写操作。在FSMC章节中,对复用形式下,采用了模式B。
 
疑问:
1、在使用中定义IO口为AF,但是手册中D0,D1为默认值,也需要定义为AF吗?
2、我的初始化是否出了问题,我现在用示波器观察IO口发现没有波形输出?
沙发
skywalkzf|  楼主 | 2008-12-8 16:41 | 只看该作者

更是不懂了

http://www.21icbbs.com/club/bbs/list.asp?boardid=49&page=1&t=3101190&tp=%u6D4B%u8BD5STM32F101VC%u4E2D%uFF0Cfsmc%u5730%u5740/%u6570%u636E%u590D%u7528%u95EE%u9898

在上述的帖子中也是一样的设置,怎么会我的调试不出来呢??

使用特权

评论回复
板凳
ijk| | 2008-12-8 16:46 | 只看该作者

MemoryType

MemoryType,建议改为:
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;

使用特权

评论回复
地板
skywalkzf|  楼主 | 2008-12-8 16:50 | 只看该作者

3楼

FSMC 地址和数据复用 

请看STM32技术参考手册(第5版)的392页最下面

Bit 1 MUXEN: Address/data multiplexing enable bit.
   When this bit is set, the address and data values are multiplexed on the databus, valid only with NOR Flash memory:
   0: Address/Data nonmultiplexed
   1: Address/Data multiplexed on databus (default after reset)
 
在复用模式下的时候,MemoryType设置为NOR Flash?

使用特权

评论回复
5
ijk| | 2008-12-8 17:53 | 只看该作者

改为FSMC_MemoryType_SRAM

  仍然改为FSMC_MemoryType_SRAM,试试看。其实对于FSMC,NOR和SRAM是差不多的,常常并行来说。

使用特权

评论回复
6
skywalkzf|  楼主 | 2008-12-8 18:25 | 只看该作者

改动过试过了,还是总线上没有数据?

使用特权

评论回复
7
skywalkzf|  楼主 | 2008-12-9 09:30 | 只看该作者

我的连接原理图

使用特权

评论回复
8
skywalkzf|  楼主 | 2008-12-9 09:31 | 只看该作者

SRAM

使用特权

评论回复
9
香水城| | 2008-12-9 10:26 | 只看该作者

连接原理图的问题

1)NADV似应接在7楼图中74LS373的/LE端
2)为什么8楼图中NWE要接到SRAM的/OE,而NOE要接到SRAM的/WE?
3)请检查SN74LS373的响应速度,它的延迟时间可能太长。

使用特权

评论回复
10
skywalkzf|  楼主 | 2008-12-9 10:38 | 只看该作者

香版主:

1)我的NADV经过了非门产生的lock信号控制/LE端;
2)3)确实我的原理图连接问题,再实验;
谢谢香版主的解答,稍后我把我的测试结果写出来。

使用特权

评论回复
11
skywalkzf|  楼主 | 2008-12-9 11:36 | 只看该作者

谢谢咯

通过了,谢谢版主,以后我会注意的。

使用特权

评论回复
12
winloop| | 2008-12-9 16:25 | 只看该作者

介绍下经验

使用特权

评论回复
13
skywalkzf|  楼主 | 2008-12-9 18:25 | 只看该作者

我也只是按照datasheet上做的,注意自己的硬件就OK。

使用特权

评论回复
14
alin_99| | 2008-12-10 11:03 | 只看该作者

这个不错..

使用特权

评论回复
15
yemingxp| | 2009-5-26 12:01 | 只看该作者

.

请问楼主为啥不直接用573呢?  还要用个非门来接373的锁存信号...

使用特权

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

本版积分规则

7

主题

23

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部