新手入门
- 积分
- 13
- 金钱
- 13
- 注册时间
- 2019-9-10
- 在线时间
- 2 小时
|
发表于 2020-1-21 16:25:54
|
显示全部楼层
void nand(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
FSMC_NANDInitTypeDef FSMC_NANDInitStruct;
FSMC_NAND_PCCARDTimingInitTypeDef time;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOG, ENABLE);//使能PD,PE,PF,PG时钟
RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);//使能FSMC时钟
GPIO_InitStructure.GPIO_Pin = (3<<0)|(0xB<<4)|(3<<11)|(3<<14);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//上拉
GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化
GPIO_InitStructure.GPIO_Pin = (0XF<<7);//PE7-10,AF OUT
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//上拉
GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//WP
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//PD6 上拉输入,NAND FLASH的R/B信号
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化
GPIO_PinAFConfig(GPIOD,GPIO_PinSource0,GPIO_AF_FSMC); //D2
GPIO_PinAFConfig(GPIOD,GPIO_PinSource1,GPIO_AF_FSMC); //D3
GPIO_PinAFConfig(GPIOD,GPIO_PinSource4,GPIO_AF_FSMC); //OE
GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_FSMC); //WE
GPIO_PinAFConfig(GPIOD,GPIO_PinSource7,GPIO_AF_FSMC); //NCE2
GPIO_PinAFConfig(GPIOD,GPIO_PinSource11,GPIO_AF_FSMC);//A16
GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_FSMC);//A17
GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_FSMC);//D0
GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_FSMC);//D1
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_SetBits(GPIOA,GPIO_Pin_4);//WP 上拉
FSMC_NANDInitStruct.FSMC_Bank = FSMC_Bank2_NAND;
FSMC_NANDInitStruct.FSMC_Waitfeature = FSMC_Waitfeature_Disable;
FSMC_NANDInitStruct.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
FSMC_NANDInitStruct.FSMC_ECC = FSMC_ECC_Disable;
FSMC_NANDInitStruct.FSMC_ECCPageSize = FSMC_ECCPageSize_512Bytes;
FSMC_NANDInitStruct.FSMC_TCLRSetupTime = 0x0;
FSMC_NANDInitStruct.FSMC_TARSetupTime = 0x0;
time.FSMC_SetupTime = 0x1;//建立时间2个HCLK(设置值+1)
time.FSMC_WaitSetupTime = 0x3;//MEMWAIT,等待时间4个HCLK(设置值+1)
time.FSMC_HoldSetupTime = 0x2;//MEMHOLD,保持时间1个HCLK
time.FSMC_HiZSetupTime = 0x1;//MEMHIZ,高阻态时2个HCLK(设置值+1)
FSMC_NANDInitStruct.FSMC_CommonSpaceTimingStruct=&time;
FSMC_NANDInitStruct.FSMC_AttributeSpaceTimingStruct=&time;
FSMC_NANDInit(&FSMC_NANDInitStruct);
FSMC_NANDCmd(FSMC_Bank2_NAND, ENABLE);
NAND_Reset(); //复位NAND
delay_ms(500);
nand_dev.id=NAND_ReadID(); //读取ID |
|