野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 848|回复: 2

硬件IIC读EEPROM报错,卡EV6

[复制链接]
发表于 2023-11-20 13:13:30 | 显示全部楼层 |阅读模式
//从eeprom中读取数据
int I2C_EE_ReadData(uint8_t addr, uint8_t *Data,uint8_t numRead)
{
        I2CTimeout = I2CT_FLAG_TIMEOUT;
        I2C_GenerateSTART(I2C1, ENABLE);//起始信号
        while(!(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT )))
        {
                if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback(4);
        }
       
       
        //ev5被检测到,发送设备地址
        I2C_Send7bitAddress(I2C1,0xA0, I2C_Direction_Transmitter);
        I2CTimeout = I2CT_FLAG_TIMEOUT;
        while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
        {
                if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback(5);
        }
       
        I2C_Cmd(I2C1,ENABLE);
        //ev6被检测到,发送要操作的寄存器单元地址
        I2C_SendData(I2C1, addr);
  I2CTimeout = I2CT_FLAG_TIMEOUT;
        //检测ev8
        while(!(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTING)))
        {
                if((I2CTimeout--) == 0) return I2C_TIMEOUT_UserCallback(6);
        }
       
        //产生第二次起始信号
        I2C_GenerateSTART(I2C1, ENABLE);//起始信号

        while(!(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT )));
        //ev5被检测到,发送接收设备地址
        I2C_Send7bitAddress(I2C1,0xA0, I2C_Direction_Receiver);

        while(!(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)));
        //ev6被检测到,表示有从机应答,向主机发送数据
       
        while(numRead--){
       
        while(!(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)));
        //ev6被检测到,表示有从机应答,向主机发送数据
       
        while(!(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)));
        //ev7被检测到,即数据寄存器有新的的数据
        *Data = I2C_ReceiveData(I2C1);
        if (numRead == 1)
                {
                        I2C_AcknowledgeConfig(I2C1,DISABLE);
                        while(!(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)));
                        //ev6被检测到
                        *Data = I2C_ReceiveData(I2C1);
                }
       
       
       
        }
       
        I2C_GenerateSTOP(I2C1, ENABLE);
        I2C_AcknowledgeConfig(I2C1,ENABLE);//方便下次通信
       
        return 1;
}

回复

使用道具 举报

 楼主| 发表于 2023-11-20 14:15:06 | 显示全部楼层
有时候也卡,EV5
回复 支持 反对

使用道具 举报

发表于 2023-11-21 08:49:23 | 显示全部楼层
使用软件的来试试看看效果怎么样
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 02:19 , Processed in 0.105047 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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