你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

FSMC访问SRAM的问题

[复制链接]
萧星-96138 发布时间:2008-12-24 16:58
我使用的MCU为STM32F103VC,在使用FSMC访问外部的SRAM的时候,功能脚上没有输出信号?
  v9 K' t5 U/ f) _7 s在使用中为数据线和地址线复用的形式,所以外部加锁存器进行地址锁存,用NADV信号来控制锁存器的lock脚。3 l* b3 S! k3 R8 ~
信号连接:0 w+ {- r8 O: Q5 b7 c' B
    NADV---->PB7
* T0 B3 W  ^" C8 u( X0 n    NOE----->PD4* j5 H, ?6 t* ]: ^
    NWE----->PD5) i7 y, K. j0 o5 z. v6 B
    NE1----->PD7
0 d* c& u! J  C! g. f$ c. o3 W6 \* k    NBL0---->PE0+ m/ n8 g( b7 M( u
    NBL1---->PE13 y& f" \0 m  t# S3 X& g  q/ m
我使用的为IAR5.0,使用STM32的库函数% |5 y7 _6 G1 r( ]
/ o4 V) @1 X' {/ u/ y2 p1 i" I: m
我的初始化如下:
% |. A1 J7 G( R! T( |4 |/* DMA1 and DMA2, FSMCclock enable */' ?) K) q5 |5 f. r" B8 j2 g$ ?$ E
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 | RCC_AHBPeriph_DMA2|RCC_AHBPeriph_SRAM|RCC_AHBPeriph_FSMC, ENABLE);: H% C. L( u6 g+ s; k6 Z+ R1 p
% ]+ D) K* p6 v4 y: S% Z$ k+ H) N  K8 S
void FSMC_SRAM_Init(void)
8 i" W  h4 q8 ^' a% w1 x{
& c/ `4 E3 }8 R8 }0 J* f  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
9 i1 Z. c3 h3 i0 V  B: O7 ]8 T  FSMC_NORSRAMTimingInitTypeDef  p;
  G. }- l$ z- D' X  GPIO_InitTypeDef GPIO_InitStructure; ; ~! m; k5 @2 `" d
  ( \1 J$ H/ [- M! W
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE , ENABLE);& \* c+ E+ G% v4 J" ^/ T. C4 E
  ) @8 _. c$ k- B* h% ?2 J5 Y
/*-- GPIO Configuration ------------------------------------------------------*/3 o( u) A& z$ }# \% k% X
  /* Set PD.00(D2), PD.01(D3), PD.08(D13), PD.09(D14),
7 T( X9 @; g" O5 t7 Y7 b$ @  C5 @     PD.10(D15),PD.11(A16), PD.14(D0), PD.15(D1) as alternate
, K& z1 A" g. c; P" ~# c) l     function push pull */
3 \3 E- O$ S8 P1 M+ }( rGPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |) ?& }1 g- |) g5 D8 X  _' }3 E
                         GPIO_Pin_10 |GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15;+ i( A  l, Q4 d0 C1 a6 ?- j
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  n8 N% e6 _  H) U1 M6 m
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
' E7 P* R( A, e  d+ R" ~* L, V+ Y  GPIO_Init(GPIOD, &GPIO_InitStructure);
7 `4 ?2 P0 r% H' r9 B  
( Y, t8 G) J7 i6 r  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
- q- K) ?3 |1 N5 p                                GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |GPIO_Pin_15;
: d- ?8 X( u( E0 \  GPIO_Init(GPIOE, &GPIO_InitStructure);
) A+ O: z+ i% b* t3 j7 S0 m   
0 ?5 v& b! {6 d# }  /* PD.04(NOE), PD.05(NWE), PD.07(NE1) configuration */  2 w! u* D) m/ P( P1 |
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5|GPIO_Pin_7;
" @' F7 y4 i$ b8 |9 [, J7 y4 T  GPIO_Init(GPIOD, &GPIO_InitStructure);) f6 _7 t# T8 U2 O
  : h/ E# m: t! j( _; G* s( P$ t
  /* NBL0, NBL1 configuration */
1 X2 O7 N8 o6 ?3 k) J- L  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; 7 \  p6 _$ g' y9 R
  GPIO_Init(GPIOE, &GPIO_InitStructure);
7 c  n; R3 n7 H& ^' }7 Y8 t/ T# `7 N1 y3 M& y
  /*NADV configuration */: W! W6 U- V4 o) i% v$ I; D' H
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
& L' w& Z( ?+ w" M' ]  GPIO_Init(GPIOB, &GPIO_InitStructure); 8 v: b! m( S% y9 s/ S, d8 b$ ]* o
  
; p, m% c  H9 z* N/*-- FSMC Configuration ------------------------------------------------------*/
/ t& z7 g2 g0 e  p.FSMC_AddressSetupTime = 2;
1 j; F# B  U7 d9 A  p.FSMC_AddressHoldTime = 2;
) Y2 o" L4 @4 A2 J' U5 \* u/ a  p.FSMC_DataSetupTime = 3;
) g  F+ f+ T' W  c5 F  p.FSMC_BusTurnAroundDuration = 2;3 q8 Z& s5 L7 e+ h2 e. _6 M
  p.FSMC_CLKDivision = 2;
4 _- z* Z% T) x- |+ J" k  p.FSMC_DataLatency = 3;
( q0 e8 M0 L% t6 a  _7 ?1 q  p.FSMC_AccessMode = FSMC_AccessMode_B;
4 ^1 }9 K4 T5 Y1 B5 t! M. g& i" ]. Q( ~7 [# o8 u  b, d' X+ l
  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
& W+ w- m* e  M  8 l. C  t+ s1 o- t% s/ v! s
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Enable;
, s* o) \3 e! E- P! C# ^( q* i  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;& E" W' e' ^* }/ b, j5 J
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;! F+ m: k" R$ W" w
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  ]$ q% b) U2 J6 J8 f4 }  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
$ m5 W+ m# Z5 B; N. R  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
! p( j& k* ^) C: S% E, @: m  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;, ?2 \7 E8 b- T$ g- |
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
6 W" l( j8 I4 \1 ^  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
; e. M+ R0 w* y, J8 s0 {. r# R  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
" g! [8 Y  ^9 E# J# j1 |8 n& ]  FSMC_NORSRAMInitStructure.FSMC_AsyncWait = FSMC_AsyncWait_Disable;
5 V! Q- g0 Y' L/ p1 Q  d% y  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;* S- ^) ?& {6 Z4 g! y' v0 ?
  + K+ D2 u5 F0 {; p) N
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
! ?' y" O2 a7 D5 ^  ]  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
6 |4 Y$ u0 Q2 z' M0 d5 l) x, O. B( O  j& M5 ~& H
  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); ) e# A+ Z6 t  N7 @8 f

0 a: x- M8 M# u0 @6 S  /* Enable FSMC Bank1_SRAM Bank */* m: N( a/ U. O/ a9 F
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  " B1 `% ~0 I$ _0 @
}
; g% ^! k# B4 r/ m( ?9 R然后我调用FSMC_SRAM_WriteBuffer(),进行写操作。在FSMC章节中,对复用形式下,采用了模式B。
, n3 ?# l4 L/ S  e3 H
( L" k" O6 a3 R* p疑问:) V- F) J1 ~4 f: a
1、在使用中定义IO口为AF,但是手册中D0,D1为默认值,也需要定义为AF吗?
) v. Z4 v+ L7 G. u7 \( c/ t6 p2、我的初始化是否出了问题,我现在用示波器观察IO口发现没有波形输出?
3 G- h6 N) Q7 o1 ^2 E' k5 Y6 j+ @( j
2 W$ S! p4 e  p; U+ V, y0 A" @* PFSMC 地址和数据复用 + Z2 h! Q9 [5 M  z2 D( W
9 Z( Y: n( @! J( C7 D0 f# x3 V
请看STM32技术参考手册(第5版)的392页最下面
: {3 {& ?" r0 s
* D$ x+ g3 u' B5 T: vBit 1 MUXEN: Address/data multiplexing enable bit.
( {. A; C. b# q. ?+ R) s2 w  Z   When this bit is set, the address and data values are multiplexed on the databus, valid only with NOR Flash memory:& Z& ^1 h: m, p
   0: Address/Data nonmultiplexed2 z. t2 V) O2 a" e6 g
   1: Address/Data multiplexed on databus (default after reset)
8 C* C6 v" \% E! H! Y接法都对  原理图的问题 此为转帖  以便大家学习
赞 收藏 评论1 发布时间:2008-12-24 16:58

举报

1个回答
jsongyan 回答时间:2011-3-13 20:16:05

RE:FSMC访问SRAM的问题

谢谢版主的经验。

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版