高中生
最后登录1970-1-1
在线时间 小时
注册时间2022-1-23
|
每次读出来都是相同的内容。%d打印出来就是161.不管之前写什么,在哪里读,都是161. 而且下载进开发板后,复位键会卡死I2C,断电才行。
提供的例程可以正常运行,但是如果运行过程中,复位按快了,也会卡死报错(4);
void AT24C02_Read_Byte(uint8_t AT24C02_Data_Address,uint8_t * SaveData_Address)
{
//产生一个起始信号,等待标志位EV5
I2C_GenerateSTART(I2Cx,ENABLE);
while( ! I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_MODE_SELECT));
//发送I2C从设备地址,等待标志位EV6
I2C_Send7bitAddress(I2Cx,AT24C02_Address,I2C_Direction_Transmitter);
while( ! I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
//发送数据,只发送一次,等待标志位EV8_2(发送完成)
I2C_SendData(I2Cx,AT24C02_Data_Address);
while( ! I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
//发送要读的地址后,重新发送起始信号并等待EV5
I2C_GenerateSTART(I2Cx,ENABLE);
while( ! I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_MODE_SELECT));
//发送I2C从设备地址,等待标志位EV6,此时主机将进入接收状态
I2C_Send7bitAddress(I2Cx,AT24C02_Address,I2C_Direction_Receiver);
while( ! I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
//主机可以接受数据,本次只读一个,关闭主机的ask应答,接受完再打开,给其他进程使用,并发送结束信号
// I2C_AcknowledgeConfig(I2Cx,DISABLE);
*SaveData_Address=I2C_ReceiveData(I2Cx);
// I2C_AcknowledgeConfig(I2Cx,ENABLE);
I2C_GenerateSTOP(I2Cx,ENABLE);
}
|
-
|