at24c16读出为0的问题

2019-03-23 17:13发布

我用STM32F030F4P6读写AT24C16,可是写入0x55,读出为0.
我第一次用STM32F030,不知道跟F1有什么不同。
贴出部分代码:

//I2C??????
#define SDA     GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6)
//I2C??????
#define SDA_0        GPIO_ResetBits(GPIOA, GPIO_Pin_6)
#define SDA_1   GPIO_SetBits(GPIOA, GPIO_Pin_6)
#define SCL_0   GPIO_ResetBits(GPIOA, GPIO_Pin_5)
#define SCL_1          GPIO_SetBits(GPIOA, GPIO_Pin_5)



        void GPIOForEEPROMInit(void)
{        
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//??
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;//??
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6);
}

主程序
GPIOForEEPROMInit();
        WriteByteToEEROM(0,0x55);
        ms_delay(1000);
        temp=ReadByteFromEEROM(0);

请高手指教,谢谢!


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
chenbingjy
1楼-- · 2019-03-24 02:17
/ void ack()//′ó»úÏìó|DÅoÅ£¬±íê¾òѽóêüêy¾Y
{        
        SDA_1;
        SCL_0;i2c_delay();
        SCL_1;i2c_delay();
        
        while(SDA);        
        SCL_0;        
}
我一开始初始化为输出,请问运行这句while(SDA);之前,还用不用初始化为输入
chenbingjy
2楼-- · 2019-03-24 07:41
 精彩回答 2  元偷偷看……
ienglgge
3楼-- · 2019-03-24 13:29
chenbingjy 发表于 2017-11-21 17:52
搞好了。看了下时序图,如上图。
AT24C16不是2K字节吗?用一个字节的地址怎么够用呢?

手册里写的是 The AT24C01A/02/04/08A/16A provides 1024/2048/4096/8192/16384 bits  。2048 bits。不是bytes。  只有256 bytes。
chenbingjy
4楼-- · 2019-03-24 17:57
ienglgge 发表于 2017-11-22 09:00
手册里写的是 The AT24C01A/02/04/08A/16A provides 1024/2048/4096/8192/16384 bits  。2048 bits。不是 ...

24c16是16kbit,2k字节。
256字节的是24c02
ienglgge
5楼-- · 2019-03-24 18:50
 精彩回答 2  元偷偷看……
chenbingjy
6楼-- · 2019-03-24 19:28
ienglgge 发表于 2017-11-22 09:25
不好意思,弄错型号了。对于24c16, A2, A1 and A0不是芯片的地址选择线,而是用于存储页地址。是11bits ...

谢谢

一周热门 更多>