OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6196|回复: 3

stm32f103zet6 外接8位并口EEPROM无法读写

[复制链接]

1

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-4-10
在线时间
2 小时
发表于 2015-4-10 21:01:52 | 显示全部楼层 |阅读模式
5金钱
原子哥:
   我用的EEPROM是AT28LV010,我把资料上传了,见附件,资料上说AT28LV010可以像SRAM一样进行访问,我用示波器看了一下,NWE,NE3,A0,D0的状态,发现NWE 写一次,会有两次变成低电平,数据传输太快,地址还未建立,数据已经有效了,我将BCR寄存器设置为SRAM已经8位宽度了,可是为什么NWE会变低两次呢?
请看我的原理图和源码:

 

#define Bank1_SRAM3_ADDR    ((u32)(0x68000000)) 
          
//初始化SRAM
void FSMC_SRAM_Init(void)
{          
 RCC->AHBENR |=(1<<8)|(1<<2); //使能FSMC时钟
 RCC->APB2ENR|=(1<<5);        //端口D使能
 RCC->APB2ENR|=(1<<6);        //端口E使能
  RCC->APB2ENR|=(1<<7);        //端口F使能
 RCC->APB2ENR|=(1<<8);        //端口G使能
   

 //RCC->APB2ENR|=1<0;      //复用功能使能
 
 //PORTD复用功能配置 
 /* PD.00(D2), PD.01(D3), PD.04(NOE), PD.05(NWE) PD.07(NE)*/
 GPIOD->CRL&=0X0F00FF00;
 GPIOD->CRL|=0XB0BB00BB;
 /* PD.11(A16),  PD.14(D0), PD.15(D1) */
 GPIOD->CRH&=0X00FF0FFF;
 GPIOD->CRH|=0XBB00B000;
 //PORTE复用功能配置 
 /* PE.07(D4) */
 GPIOE->CRL&=0X0FFFFFFF;
 GPIOE->CRL|=0XB0000000;
 /* PE.08(D5), PE.09(D6), PE.10(D7) */
 GPIOE->CRH&=0XFFFFF000;
 GPIOE->CRH|=0X00000BBB;
 
 //PORTF复用功能配置 
 /* PF.00(A0), PF.01(A1), PF.02(A2), PF.03(A3), PF.04(A4), PF.05(A5) */
 GPIOF->CRL&=0XFF000000;
 GPIOF->CRL|=0X00BBBBBB;
 /* PF.12(A6), PF.13(A7), PF.14(A8), PF.15(A9) */
 GPIOF->CRH&=0X0000FFFF;
 GPIOF->CRH|=0XBBBB0000; 

 //PORTG复用功能配置
 /* PG.00(A10), PG.01(A11), PG.02(A12), PG.03(A13), PG.04(A14), PG.05(A15) */
  GPIOG->CRL&=0XFF000000;
 GPIOG->CRL|=0X00BBBBBB; 
 //PG10 NE3
 GPIOG->CRH&=0XFFFFF0FF;
 GPIOG->CRH|=0X00000B00; 
 
 //时序配置      
 FSMC_Bank1->BCR3=0X00000000;
 FSMC_Bank1->BTR3=0X00000000;
 FSMC_Bank1E->BWTR[2]=0X00000000;
  FSMC_Bank1->BCR3&=(~(1<<19));//
 FSMC_Bank1->BCR3|=((1<<14));//扩展模式禁止

 FSMC_Bank1->BCR3&=(~(1<<13));//禁用WAIT信号

 FSMC_Bank1->BCR3|=(1<<12);//存储器写使能
 FSMC_Bank1->BCR3&=(~(3<<4)); //宽度为8位  
 FSMC_Bank1->BCR3&=(~(3<<2)); //存储器为sram
 FSMC_Bank1->BCR3&=(~(1<<1)); //不复用数据地址总线
 FSMC_Bank1->BCR3|=(1<<0); //使能存储快 
 //时序配置 
    FSMC_Bank1->BTR3&=(~(15<<28)); 
//都采用最大值
 FSMC_Bank1->BTR3|=(255<<8);      
 FSMC_Bank1->BTR3|=(15<<4);        
 FSMC_Bank1->BTR3|=(15<<0);      
 
 FSMC_Bank1E->BWTR[2]=0x0FFFFFFF;       
}                
void FSMC_SRAM_WriteBuffer(u8* pBuffer,u32 WriteAddr,u32 n)
{
 u32 i;
 
 for(i=0;i<n;i++)
 {             
  *((vu8*)(Bank1_SRAM3_ADDR+WriteAddr+i))=pBuffer;  
 } 
  delay_ms(12); 
}                      
void FSMC_SRAM_ReadBuffer(u8* pBuffer,u32 ReadAddr,u32 n)
{
 u32 i;
 for(i=0;i<n;i++) 
 {              
  pBuffer=*((vu8*)(Bank1_SRAM3_ADDR+ReadAddr+i));   
 } 
}

 }
我将芯片CE引脚挂在NE1和NE3上都分别试过,发现都不行,附件是AT28LV010资料
原理图如下:

at28lv010.pdf

501.41 KB, 下载次数: 80

把研发进行到底
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-4-10
在线时间
2 小时
 楼主| 发表于 2015-4-10 21:02:39 | 显示全部楼层
请原子哥帮忙看看,谢谢啦,调试三周时间了,焦虑中
把研发进行到底
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-10 22:19:31 | 显示全部楼层
帮顶。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-4-10
在线时间
2 小时
 楼主| 发表于 2015-4-13 11:35:03 | 显示全部楼层
各位,为了直观,我用示波器抓了波形图:
其中
黄色线:NE3
蓝色线:NWE
红色线:地址线的A0
绿色线:数据线的D0
NWE线总是变低两次,我只写一次,不知道为什么?
请帮忙看看,应该怎么弄?

boxingtu.JPG
把研发进行到底
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 22:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表