打印

在用100脚STM32F407的FSMC驱动NAND FLASH遇到问题

[复制链接]
5281|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lihaolongli|  楼主 | 2013-8-1 14:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
之前在103上用控制器调好的代码,就想稍作修改放到100脚的407上,可是怎么也不能正常工作,连ID号都读取不出来,407用的是25M晶振,以下是初始化部分代码,请各位看看,有没有问题
        FSMC_NANDInitTypeDef FSMC_NANDInitStructure;
  FSMC_NAND_PCCARDTimingInitTypeDef  p;
         /* Enable GPIOs clock */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE , ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
                        

//   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);//2013年7月7日12:10:51屏蔽 in STM32F105RB Let compiler happy
        RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
/*-- GPIO Configuration ------------------------------------------------------*/

  GPIO_PinAFConfig(GPIOD, GPIO_PinSource0,         GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource1,         GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC);
       
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource7,         GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource8,         GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource9,         GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource10,        GPIO_AF_FSMC);
       
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource4,         GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource5,         GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource6,         GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource7,  GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_FSMC);

       

/* CLE, ALE, D0->D3, NOE, NWE and NCE2  NAND pin configuration  */
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_14 | GPIO_Pin_15 | GPIO_Pin_0 | GPIO_Pin_1 ;
        GPIO_Init(GPIOD, &GPIO_InitStructure);
        /* D4->D7 NAND pin configuration  */  
  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
        GPIO_Init(GPIOE, &GPIO_InitStructure);
       
//         GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC);
//   GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
        GPIO_Init(GPIOD, &GPIO_InitStructure);
        /* ALE and CLE configuration */
//   GPIO_PinAFConfig(GPIOD,GPIO_PinSource11, GPIO_AF_FSMC);
//   GPIO_PinAFConfig(GPIOD,GPIO_PinSource12, GPIO_AF_FSMC);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
        GPIO_Init(GPIOD, &GPIO_InitStructure);
       
        /* NE1 configuration */
//   GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
        GPIO_Init(GPIOD, &GPIO_InitStructure);
        /* NWAIT Configuration */
//   GPIO_PinAFConfig(GPIOD,GPIO_PinSource6, GPIO_AF_FSMC);
        /* NWAIT NAND pin configuration */
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);


       


/* INT2 NAND pin configuration */  
//   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;  //在100脚的407上没用到该管脚                                                          
//   GPIO_Init(GPIOG, &GPIO_InitStructure);                  //
  /*-- FSMC Configuration ------------------------------------------------------*/
  p.FSMC_SetupTime                  = 0x1;//2013年7月19日18:29:14,jack.li
  p.FSMC_WaitSetupTime = 0x3;
  p.FSMC_HoldSetupTime = 0x2;
  p.FSMC_HiZSetupTime  = 0x1;

  FSMC_NANDInitStructure.FSMC_Bank = FSMC_Bank2_NAND;
  FSMC_NANDInitStructure.FSMC_Waitfeature = FSMC_Waitfeature_Disable;
  FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
  FSMC_NANDInitStructure.FSMC_ECC = FSMC_ECC_Enable;
  FSMC_NANDInitStructure.FSMC_ECCPageSize = FSMC_ECCPageSize_512Bytes;
//FSMC_NANDInitStructure.FSMC_AddressLowMapping = FSMC_AddressLowMapping_Direct;//2013年7月6日21:16:52屏蔽,在STM32F105RB上没有该结构体内容//在407上同样需要屏蔽
  FSMC_NANDInitStructure.FSMC_TCLRSetupTime = 0x00;
  FSMC_NANDInitStructure.FSMC_TARSetupTime =         0x00;
  FSMC_NANDInitStructure.FSMC_CommonSpaceTimingStruct = &p;
  FSMC_NANDInitStructure.FSMC_AttributeSpaceTimingStruct = &p;
        FSMC_NANDInit(&FSMC_NANDInitStructure);
/* FSMC NAND Bank Cmd Test */
  FSMC_NANDCmd(FSMC_Bank2_NAND, ENABLE);
        /* Enables the FSMC NAND ECC feature */
        FSMC_NANDECCCmd(FSMC_Bank2_NAND, ENABLE);

沙发
puchuang| | 2013-8-1 18:50 | 只看该作者
不是很了解  这一块   楼主   帮你顶一个   看看别人的意见   顶一个

使用特权

评论回复
板凳
dream215| | 2014-1-24 16:34 | 只看该作者
楼主 问题解决没?我也遇到同样问题了。。。

使用特权

评论回复
地板
airwill| | 2014-1-24 17:34 | 只看该作者
原来调好的程序,那就可以从F4 的差别来考虑,所以可以看看最大区别,主频提高导致可能时序里的时间不够长了,还有就是 lO 口的设置变了。

使用特权

评论回复
5
njchenmin| | 2014-1-25 08:27 | 只看该作者
看初始化程序,两者好像有差别

使用特权

评论回复
6
zhoujianyong| | 2014-12-15 13:37 | 只看该作者
楼主,您的问题解决了吗? 我也遇到类似的问题。

帮忙看下:
https://bbs.21ic.com/icview-849727-1-1.html

使用特权

评论回复
7
fang19931130| | 2015-12-25 17:34 | 只看该作者
同样遇到ID读出来是FF

使用特权

评论回复
8
zhuotuzi| | 2015-12-25 21:58 | 只看该作者
有没有人做过这个,分享一下经验,这个如何搞。

使用特权

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

本版积分规则

个人签名:练好内功,摘花伤人,单片机交流群:219349984

1

主题

58

帖子

0

粉丝