This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

用stm32f103通过模拟IIC方式读取TMP116的温度,为什么tmp116无应答?

Other Parts Discussed in Thread: TMP116

用stm32f103通过模拟IIC方式读取TMP116的温度,为什么tmp116无应答?用示波器看,应答波形都是这样斜的尖峰。这段模拟IIC程序我在别的程序上验证是通过的,为什么在TMP116上会出错呢?

  • 您好,TMP116 的从机地址写的什么?
    用stm32f103模拟I2C, 是GPIO模拟的吗, GPIO 是否内部已经上拉? 这样的话TMP116 的I2C 外部就无需上拉了。
  • TMP116从机地址是(0x48<<1)=0x90(写地址),读地址是0x91.GPIO是模拟的,内部已上拉,这部分代码如下:void IIC_Init(void)
    {
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_2);
    }
    void SDA_IN(void)
    {
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    }
    void SDA_OUT(void)
    {
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    }
    现在我就用stm32f103的四根线连接的tmp116(此部分使用的是从TMP116评估板折下来的那部分),3.3v,GND,SCL和SDA(外部没有上拉电阻)。请问我这样做有错误吗?如果没有错误,为什么应答一直是高电平呢?
  • 您好, 四根线接TMP116 是不对的吧,还有ADD0 是决定地址的引脚, 那么0X90的话,就是ADD0 接到GND上的地址。 改下将其接到VCC上验证下是否还是没有应答信号?或者看下是否焊接方面的问题,因为程序在其他程序上可以通过便不是程序的问题。
    另外,接线不会太长吧?
  • 您好,现在有一些TMP116的电路板我已经读到了温度,但是有一个芯片一直读到的数据是0X19FF,读别的寄存器数据也0x3FF,0X1FF,等等。这会跟什么有关系呢?

    焊接会影响这个吗?