打印

求助: STM32 F4 的 FSMC功能

[复制链接]
6204|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
quyifei|  楼主 | 2013-1-15 21:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 quyifei 于 2013-1-17 14:40 编辑

目前我在用STM32F4 Discovery的板子调LCD的程序,用的是FSMC的功能。

在执行  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);

之后我用示波器测量 PD7(FSMC_NE1)的电压, 结果是0V。 我的理解应该是3.3V才对呀? 我确定之前FSMC的时钟已经使能了。
沙发
IJK| | 2013-1-16 13:31 | 只看该作者
LZ看到的可能是正常的情况。
我也看到过类似的情况,当FSMC只用了1个bank时,这个bank的片选会一直有效。

使用特权

评论回复
板凳
quyifei|  楼主 | 2013-1-16 15:45 | 只看该作者
IJK 发表于 2013-1-16 13:31
LZ看到的可能是正常的情况。
我也看到过类似的情况,当FSMC只用了1个bank时,这个bank的片选会一直有效。 ...

后来我用测了FSMC_NOE 和FSMC_NWE, 都是0V。 感觉确实是FSMC没起作用。 晚上我把FSMC配置的代码发出来让大家看看有什么问题吧。

使用特权

评论回复
地板
IJK| | 2013-1-16 17:22 | 只看该作者
quyifei 发表于 2013-1-16 15:45
后来我用测了FSMC_NOE 和FSMC_NWE, 都是0V。 感觉确实是FSMC没起作用。 晚上我把FSMC配置的代码发出来让 ...

FSMC_NOE 和FSMC_NWE, 都是0V,是不正常的。

可以先把这些引脚配置成GPIO,看一下芯片是否是好的。

使用特权

评论回复
5
quyifei|  楼主 | 2013-1-16 19:22 | 只看该作者
IJK 发表于 2013-1-16 17:22
FSMC_NOE 和FSMC_NWE, 都是0V,是不正常的。

可以先把这些引脚配置成GPIO,看一下芯片是否是好的。 ...


配置成GPIO的OUT, 输出0V和3V都正常。 下面是配置FSMC的代码。 ST官方上只能找到基于STM32F1xx的GUI的库,我的配置代码是直接考过来的,只是改了Timing, 因为F4的HCLK=168MHz, 而F1的HCLK=72MHz。
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;
/*-- FSMC Configuration ------------------------------------------------------*/
/*----------------------- SRAM Bank 1 ----------------------------------------*/
  /* FSMC_Bank1_NORSRAM4 configuration */
  
  p.FSMC_AddressSetupTime = 3;
  p.FSMC_AddressHoldTime = 0;
  p.FSMC_DataSetupTime = 5;
  p.FSMC_BusTurnAroundDuration = 0;
  p.FSMC_CLKDivision = 0;
  p.FSMC_DataLatency = 0;
  p.FSMC_AccessMode = FSMC_AccessMode_A;
  /* Color LCD configuration ------------------------------------
     LCD configured as follow:
        - Data/Address MUX = Disable
        - Memory Type = SRAM
        - Data Width = 16bit
        - Write Operation = Enable
        - Extended Mode = Diable
        - Asynchronous Wait = Disable */
  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_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_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  
  /* BANK 1 (of NOR/SRAM Bank 1~4) is enabled */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);

使用特权

评论回复
6
quyifei|  楼主 | 2013-1-16 19:27 | 只看该作者
本帖最后由 quyifei 于 2013-1-16 20:05 编辑

这是我配置GPIOD和GPIOE的代码,也是仿照ST官方的GUI库函数的。

  GPIO_InitTypeDef GPIO_InitStructure;
  /* Enable FSMC, GPIOD, GPIOE clocks */
  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE
                         , ENABLE);
  /* Set PD.00(D2), PD.01(D3), PD.04(NOE), PD.05(NWE), PD.07(NE1/NCS), PD.08(D13), PD.09(D14),
     PD.10(D15), PD.11(A16/RS), PD.14(D0), PD.15(D1) as alternate function push pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |GPIO_Pin_7|
                                GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_14 |
                                GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource0 | GPIO_PinSource1 | GPIO_PinSource4 | GPIO_PinSource5 | GPIO_PinSource7 |
                   GPIO_PinSource8 | GPIO_PinSource9 | GPIO_PinSource10| GPIO_PinSource11 | GPIO_PinSource14 |
                     GPIO_PinSource15, GPIO_AF_FSMC);
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  
  /*
  GPIO_SetBits(GPIOD, GPIO_Pin_5);
  GPIO_ResetBits(GPIOD, GPIO_Pin_5);
  GPIO_SetBits(GPIOD, GPIO_Pin_15);
  */
  /* Set PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),
     PE.14(D11), PE.15(D12) as alternate function push pull */
  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_PinAFConfig(GPIOE, GPIO_PinSource7 | GPIO_PinSource8 | GPIO_PinSource9 | GPIO_PinSource10 |
                   GPIO_PinSource11 | GPIO_PinSource12 | GPIO_PinSource13 | GPIO_PinSource14 |
                     GPIO_PinSource15, GPIO_AF_FSMC);
  GPIO_Init(GPIOE, &GPIO_InitStructure);

使用特权

评论回复
7
quyifei|  楼主 | 2013-1-16 19:29 | 只看该作者
本帖最后由 quyifei 于 2013-1-16 20:10 编辑

现在我测PD4(FSMC_NOE)的电压,还是0V,FSMC还是没起作用呀!

使用特权

评论回复
8
quyifei|  楼主 | 2013-1-16 20:27 | 只看该作者
本帖最后由 quyifei 于 2013-1-16 21:12 编辑

找到问题所在了。 问题出在
GPIO_PinAFConfig(GPIOD, GPIO_PinSource0 | GPIO_PinSource1 | GPIO_PinSource4 | GPIO_PinSource5 | GPIO_PinSource7 |
                   GPIO_PinSource8 | GPIO_PinSource9 | GPIO_PinSource10| GPIO_PinSource11 | GPIO_PinSource14 |
                     GPIO_PinSource15, GPIO_AF_FSMC);
改成下面的代码就OK了, 多谢LJK的再次帮助。
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC);

使用特权

评论回复
9
zxm19820916| | 2017-1-17 10:57 | 只看该作者

使用特权

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

本版积分规则

个人签名:最小STM32开发板-攸米板淘宝: yifei-stm.taobao.com 博客: blog.sina.com.cn/yifeistm

29

主题

146

帖子

1

粉丝