
在利用原子哥的例程读写AT24C02的时候遇到了一些问题和一些总结,现在来与大家探讨一下,共同进步。
1:怎样的去定义IO用于既可以读又可以进行写?
这里需要定义端口的模式,如下所示定义:
#define SDA_IN() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;}
#define SDA_OUT() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=3<<12;}
#define IIC_SCL PCout(12) //SCL
#define IIC_SDA PCout(11) //SDA
#define READ_SDA PCin(11) //读SDA 在后面的代码中如果是直接的读写24C02,可以先声明一下端口的输入或输出模式,然后就可以进行读写了。
2:在原子哥的代码中的大一点的EEPROM芯片,其内存容量在255~2047字节的芯片,有点小问题,大家可以看下面的代码。
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0);
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr>>8);
IIC_Wait_Ack();
}
else
IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));
在EE_TYPE<=AT24C16 的时候,可能不可以用,因为发送器件地址并不是和要读的地址一起发送,错在这一句0XA0+((ReadAddr/256)<<1,感觉无论是大容量还是小容量的存储芯片都是要从发送器件地址等待应答开始。如果大家有什么想法可以和我一起讨论一下,统一关于硬件电路设计的问题也欢迎大家一起讨论。