打印
[STM32F1]

I2c ack 无应答信号,请大神帮忙看看代码是否有错

[复制链接]
1766|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
msly|  楼主 | 2017-3-20 09:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 msly 于 2017-3-20 09:16 编辑

以下是我从别人抄来的代码:

返回 ack
u8 I2C_RACK(void)
{
        u8 ERRTIME=0;
        SCL_H;
        Delay_us(2);
        SDA_H;
        printf("SCL_RACK_H:%X SDA_RACK_H:%X \n",SCL_Read,SDA_Read);
        Delay_us(2);
        while(SDA_Read)
        {
                ERRTIME++;
                if(ERRTIME>250)
                {
                        I2C_STOP();
                        return 0;
                }
        }
        SCL_L;
        Delay_us(2);
        printf("SCL_RACK_L:%X SDA_RACK_L:%X \n",SCL_Read,SDA_Read);
        return 1;
}

写一个字节
void i2C_Wbyte(u8 Wstring)
{
        u8 i;
        SCL_L;
        for(i=0;i<8;i++)
        {
                if((Wstring&0x80)>>7)
                        SDA_H;
                else
                        SDA_L;
                Wstring<<=1;
                Delay_us(2);
                SCL_H;
                Delay_us(2);
                SCL_L;
                Delay_us(2);
        }
}

写一个字

u8 I2C_SendByte(u8 Saddr,u8 addr,u8 sdata)
{
        if(!I2C_Start()) return 1;
        i2C_Wbyte(Saddr);
        if(!I2C_RACK()) return 2;
        i2C_Wbyte(addr);
        I2C_RACK();
        i2C_Wbyte(sdata);
        I2C_RACK();
        I2C_STOP();
        return 3;
}

以下是串口返回I2c 状态

SCL_Start_H:40 SDA_Start_H:80
SCL_Start_H:40 SDA_Start_L:0
SCL_Start_L:0 SDA_Start_L:0
ASendByte:A0
BSendByte:0
SendString:A0
SCL_RACK:40 SDA_RACK:80
SCL_STOP_L:0 SDA_STOP_L:0
SCL_STOP_H:40 SDA_STOP_H:80
RACK
NULL
沙发
grant_jx| | 2017-3-20 11:05 | 只看该作者
本帖最后由 grant_jx 于 2017-3-20 11:07 编辑

你这样问,肯定没人回答,抄来的代码硬件都不一样,问题要上机调试才能发现的。
一般IIC的问题都是时序,你自己用示波器一步一步跟下去,理解了时序就明白了IIC。

附件是ST的一份专门针对IIC的应用笔记,上面有些说明可以自己参考参考。
UM1029 - Communication peripheral application library (CPAL) v2.0.pdf (548.09 KB)

使用特权

评论回复
板凳
msly|  楼主 | 2017-3-20 11:41 | 只看该作者
本帖最后由 msly 于 2017-3-20 11:42 编辑
grant_jx 发表于 2017-3-20 11:05
你这样问,肯定没人回答,抄来的代码硬件都不一样,问题要上机调试才能发现的。
一般IIC的问题都是时序,你 ...

我是用 STM32F103ZT6  与24C02 的I2c 通信 PB6 SCL ,PB7 SDA    I2C1

使用特权

评论回复
地板
mnynt121| | 2017-3-20 13:22 | 只看该作者
这个谁来看,是不是地址写错了。

使用特权

评论回复
5
mnynt121| | 2017-3-20 13:23 | 只看该作者
建议使用别人现成的代码移植使用吧。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

34

帖子

0

粉丝