请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F030 AT24C02通信问题

[复制链接]
baotun050320 提问时间:2020-10-24 13:06 /
硬件和软件都试过了,串口出来的数据都是一样,有问题.用的代码都是网上的



// 连续写N个字节
bool I2C2_Write_NByte(uint8_t SlaveAddress, uint8_t REG_Address, uint8_t* buf, uint16_t len)
{
    uint16_t i;
    if(!I2C2_Start())return false;
    I2C2_Send_Byte(SlaveAddress);  //发送设备地址+写信号
    if(!I2C2_Wait_Ack()){I2C2_Stop(); return false;}
    I2C2_Send_Byte(REG_Address);   
    if(!I2C2_Wait_Ack()){I2C2_Stop(); return false;}
    for(i=0; i<len; i++)
    {
        I2C2_Send_Byte(buf[i]);
    if(i<len-1)
    {
            if(!I2C2_Wait_Ack()){I2C2_Stop(); return false;}
    }
    }
    I2C2_Stop();
    return true;
}

// 连续读N个字节
bool I2C2_Read_NByte(uint8_t SlaveAddress, uint8_t REG_Address, uint8_t* buf, uint16_t len)
{
    uint16_t i;
    if(!I2C2_Start())return false;
    I2C2_Send_Byte(SlaveAddress);  //发送设备地址+写信号
    if(!I2C2_Wait_Ack()){I2C2_Stop(); return false;}
    I2C2_Send_Byte(REG_Address);   
    if(!I2C2_Wait_Ack()){I2C2_Stop(); return false;}
    if(!I2C2_Start())return false;
    I2C2_Send_Byte(SlaveAddress | 1); // 读操作
    if(!I2C2_Wait_Ack()){I2C2_Stop(); return false;}
    for(i=0; i<len; i++)
    {
        buf[i] = I2C2_Read_Byte();
    if(i<len-1)
    {
        I2C2_Ack();
    }
    }
    I2C2_NAck();
    I2C2_Stop();
    return true;
}


Usartdata.PNG
收藏 评论7 发布时间:2020-10-24 13:06

举报

7个回答
小歆-2051663 回答时间:2020-10-26 09:37:00
示波器看一下波形吧,应该是你软件模拟I2C的问题。
老牛洋车 回答时间:2020-10-26 09:46:03
建议用逻辑分析仪抓取SDA和SCL的时序,看看是否符合I2C协议的要求。
大陶 回答时间:2020-10-26 11:29:18
看一下 SCL和SDA的波形
edmundlee 回答时间:2020-10-26 11:29:26
你写是用page write的吧
你先了解一下page size
然后写完一个page要等10ms, 才能再写
大陶 回答时间:2020-10-26 11:29:52
我有一个AT24C64的 你要吗?
小小超 回答时间:2020-10-26 11:45:11
24C02的速度比较慢,时序上要比较大的延时时间。
butterflyspring 回答时间:2020-11-4 16:46:28
最直接的方法是用示波器或逻辑分析仪看看波形,这样能确定是不是真正写进去了还是串口读出的数据是否是正常的。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版