在线时间6 小时
UID124601
ST金币0
蝴蝶豆0
注册时间2009-4-25
初级会员
- 最后登录
- 2020-7-10
|
a0a.1 0b0c
GPIO_InitTypeDef GPIO_InitStructure;
void Flash_Init(void)
{
/*ALE PE15 WE PE14 推免输出*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
/*CLE PB10 CE PB11*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/*RE PD10*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/*R/B PD11*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
void Write_Byte(u8 byte)
{
/*PD12 -- PD15 IO(L)开漏输出*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/*PC6 -- PC9 IO(H)开漏输出*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIOC->ODR = GPIOC->ODR&0x0000FC3F|((byte&0xF0)ODR&0x00000FFF|((byte&0x0f)>2)&0xf0)|((GPIOD->IDR>>12)&0x0f));
return byte;
}
u8 RB_State(void)
{
while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_11) == 0);
return 1;
}
void Write_CMD(u8 cmd)
{
CLR_ALE();
CLR_CE();
SET_CLE();
CLR_WE();
Write_Byte(cmd);
SET_WE();
CLR_CLE();
SET_ALE();
}
void Write_Data(u8 data)
{
Write_Byte(0xFF);
SET_WE();
CLR_CLE();
CLR_CE();
CLR_ALE();
CLR_WE();
while(RB_State() != 1);
Write_Byte(data);
while(RB_State() != 1);
SET_WE();
}
u8 Read_Data(void)
{
u8 data;
Write_Byte(0xFF);
SET_WE();
CLR_CLE();
CLR_ALE();
CLR_CE();
CLR_RE();
while(RB_State() != 1);
data = Read_Byte();
while(RB_State() != 1);
CLR_RE();
return data;
}
void Write_ADDR(u8 addr)
{
SET_WE();
CLR_CE();
CLR_CLE();
SET_ALE();
CLR_WE();
Write_Byte(addr);
SET_WE();
while(RB_State() != 1);
CLR_ALE();
}
/********************************************/
u8 Read_ID(void)
{
Maker_ID = 0;
Write_CMD(0x90);
Write_ADDR(0x00);
Maker_ID = Read_Data();
Device_ID = Read_Data();
Third_ID = Read_Data();
Fourth_ID = Read_Data();
Fifth_ID = Read_Data();
return Device_ID;
}
void Flash_Reset(void)
{
Write_CMD(0XFF);
while(RB_State() != 1);
}
****************************************************************************************************
上面是我的程序,我用的GPIO模拟总线方式连接三星的nandflash,但程序无法读取到ID,读写page也不行,帮我分析下问题出那个地方了啊,谢谢了
另我的数据线和stm32连接没上拉,我直接用上拉输入,不知道问题是不是这里,输出配置的是推免;
另我的板子上没上拉,所以我无法用开漏输出实现普通的IO功能。
附件中的是的程序 |
-
-
266 KB, 下载次数: 14, 下载积分: ST金币 -1
|