打印
[STM8]

应将i2c发送完地址收不到数据

[复制链接]
616|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aaa1125456|  楼主 | 2015-7-28 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
state_tmp102 tmp102_tmpConversion()
{
    while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));
    I2C_GenerateSTART(I2C1,ENABLE);
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));
    I2C_Send7bitAddress(I2C1,0x90,I2C_Direction_Transmitter);
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
    I2C_SendData(I2C1,0x01);
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTING));
    I2C_SendData(I2C1,0xe0);
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTING));
    I2C_SendData(I2C1,0xa0);
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
    I2C_GenerateSTOP(I2C1,ENABLE);
    return SUCCESS_TMP102;
}

state_tmp102 tmp102_read(unsigned int *byte)
{
    unsigned int byte1 = 0,byte2 = 0;
    if(tmp102_tmpConversion() == ERROR_TMP102)
    {
        return ERROR_TMP102;
    }
    while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));
    I2C_GenerateSTART(I2C1,ENABLE);
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));
    I2C_Send7bitAddress(I2C1,0x90,I2C_Direction_Transmitter);
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
    I2C_SendData(I2C1,0x00);
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));  
    I2C_GenerateSTOP(I2C1,ENABLE);
   
    while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));
    I2C_GenerateSTART(I2C1,ENABLE);
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));
    I2C_Send7bitAddress(I2C1,0x91,I2C_Direction_Transmitter);
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
   
   
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED));  ////////////////等待收到数据
    byte1 = (unsigned char)I2C_ReceiveData(I2C1);
    while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED));
    byte2 = (unsigned char)I2C_ReceiveData(I2C1);
    I2C_AcknowledgeConfig(I2C1,DISABLE);
    I2C_GenerateSTOP(I2C1,ENABLE);
    *byte = (byte1 << 8) | byte2;   
    *byte = *byte >>4;   
    return SUCCESS_TMP102;
}


程序卡在 ///////等待接收数据哪里    是上一步没把寄存器清理干净吗?
沙发
aaa1125456|  楼主 | 2015-7-28 11:18 | 只看该作者
真心服了 用寄存器就行  用库函数就不行  这是玩我呢

使用特权

评论回复
板凳
aaa1125456|  楼主 | 2015-7-28 11:21 | 只看该作者
自己解决了  原来是光复制上面的内容了 忘了改 接收地址
I2C_Send7bitAddress(I2C1,0x91,I2C_Direction_Receiver);

使用特权

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

本版积分规则

7

主题

44

帖子

0

粉丝