野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8365|回复: 2

STM32的I2C读写AT24C02

[复制链接]
发表于 2022-2-10 17:01: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);
}


](U_%N@PP5{X_0K0ITN_F[P.png
回复

使用道具 举报

 楼主| 发表于 2022-2-10 17:03:33 | 显示全部楼层
再附图一张,搞不定,求
野火论坛202202101703039581..png
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 03:48 , Processed in 0.036314 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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