0

我正在尝试通过 I2C 与温度传感器通信。为此,我使用基于 Cortex M3 的微控制器。

所以我试图获取模块的 id 以确保 evrything 启动良好。但已经在那里获得了 NAK:

信号

有人可以告诉我在我的短软件中我做错了什么吗?如您所见,0x44(我需要)被传输。但我的 mc 出于某种原因发送了 NAK。此外,当我尝试打印收到的数据时,它会打印错误的数据(大部分为 0)。

有人知道为什么吗?

void setupI2c()
{
     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
     SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C7);
     GPIOPinConfigure(0x00001002);
     GPIOPinConfigure(0x00001402);
     GPIOPinTypeI2C(GPIO_PORTA_BASE, GPIO_PIN_5);
     GPIOPinTypeI2CSCL(GPIO_PORTA_BASE, GPIO_PIN_4);

}

void getModel()
{
int i=0;
int k;
int data[1]={0};

int g_ui32SysClock = SysCtlClockFreqSet((SYSCTL_OSC_MAIN | SYSCTL_XTAL_25MHZ | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_320), 40000000);

        I2CMasterInitExpClk( I2C7Master_Base, g_ui32SysClock, false);
        I2CMasterSlaveAddrSet(I2C7Master_Base, 0x29, false); //true = read


    I2CMasterControl(I2C7Master_Base, I2C_MASTER_CMD_SINGLE_SEND);
    I2CMasterDataPut(I2C7Master_Base, 0x80|0x12); // result register
    while(I2CMasterBusy(I2C7Master_Base));

    /******************************/
    /*for(i=0;i<10000;i++)
    {k++;}
*/
    /******************************/

    I2CMasterSlaveAddrSet(I2C7Master_Base, 0x29, true); //true = read
    for(i=0;i<10000;i++)
    {k--;}
    I2CMasterControl(I2C7Master_Base, I2C_MASTER_CMD_SINGLE_RECEIVE);
    data[0]=I2CMasterDataGet(I2C7Master_Base);
    while(I2CMasterBusy(I2C7Master_Base));


    UARTprintf(" model: %x\n", data[0]);
}
4

0 回答 0