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.

[参考译文] CCS/TM4C1294NCPDT:从基于 i2c 的传感器读取 CCS/tm4c1294ncpdt 简单 i2c

Guru**** 2392945 points
Other Parts Discussed in Thread: TM4C1294NCPDT, TMP100

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/654858/ccs-tm4c1294ncpdt-ccs-tm4c1294ncpdt-simple-i2c-read-from-a-i2c-based-sensor

器件型号:TM4C1294NCPDT
主题中讨论的其他器件: TMP100

工具/软件:Code Composer Studio

我将 TM4C1294NCPDT 与 Code Composer Studio 结合使用。

我想从基于 I2C 的传感器读取数据。

在库中的 i2c.c 文件中有许多函数。

读取 i2c 传感器的数据时应使用哪些函数?

我想执行一个简单的读取操作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="m_vedsharma"]

    读取 i2c 传感器的数据时应使用哪些函数?

    我想执行个简单的读取操作。 [/报价]

    正如您列出的"I2C 传感器"一样、任何这样的"传感器读取"都很可能证明"远不简单"。

    此类传感器通常提供多种操作模式-以及可能"多"字节的数据-这些模式会泄露"简单"-这难道不是吗?

    "简单"正如您所列出的-最好通过选择(而不是)基于 I2C 的小容量 EEPROM 来获得、该 EEPROM 实际上可能符合"简单"的要求。

    该供应商提供了示例代码、其中详细介绍了如何实现此类 EEPROM 的"读取"。   (EEPROM 很小、价格低廉且"简单"。)

    KISS 规定、在选择(未指定) I2C 传感器时、"学习和实验"开始较小且受到控制(可能违反)。

    MCU 的手册和外设驱动程序库用户手册"深入"介绍了 I2C 操作-您还没有注意到您对 I2C 操作的熟悉程度-此类阅读/评论"一定要提供指导/帮助"。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    下面是读取 DK-TM4C129X 开发板上的 TMP100温度传感器的示例程序。 它基于最初来自此线程的代码: e2e.ti.com/.../2158708

    #include 
    #include 
    #include "inc/hw_i2c.h"
    #include "inc/hw_ints.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "driverlib/gpio.h"
    #include "driverlib/i2c.h"
    #include "driverlib/interrupt.h"
    
    
    
    
    
    
    
    
    #include "drivermap_intrunion.h"#define "#include "driverlib_rom_int_rom_intrl"#define "#define "#define "#t_ine_intrunion.tag.try"#define "#include "#define "driver8_int_ine_inu.tot_it_inu.tot_it_inc.h"#define #define "driverlib_intry"#include "driver
    
    
    uint8_t HIGH;
    }u8;
    };
    
    静态浮点温度;
    
    int main ()
    
    {
    
    union temp_tag temp;
    uint32_t sys_clock、error;
    sys_clock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、120000000);
    
    SysCtlPeripheralEnable (SYSCTL_Periph_I2C6);
    while (!(SysCtlPeripheralReady (SYSCCtl_Periph_I2C6))
    ){
    }SysCtlPeripheralEnable
    (SYSCTL_Periph_GPIOB);
    while (SYSCIPBLE_GPIO6_GPIO6_GPIO6)
    
    
    (GPIPB_GPIO6_GPIO6_GPIO6_GPIOB_GPIOB_GPIOB_PHIN);
    
    
    
    GPIO_PIN_7);
    
    I2CMasterInitExpClk (I2C6_BASE、SYS_CLOCK、false);// False = 100KHz
    
    
    while (1)
    {
    I2CMastereAddrSet (I2C6_BASE、SLAVE_ADDRESS、FALSE);
    
    //配置寄存器*/
    I2CMasterDataPut (I2C6_SIDRK、I2C6_START
    
    );0xC6_SIT_START (I2CMC6 SIT_SIT_START);
    while (I2CMasterBusy (I2C6_BASE));
    error = I2CMasterErr (I2C6_BASE);
    if (I2CMasterErr (I2C6_BASE)!= I2C_MASTER_ERR_NONE)
    {
    I2CMasterIntClear (I2C6_BASE);//清除任何发生的中断。
    返回错误;
    }
    I2CMasterDataPut (I2C6_BASE、0xA1);
    I2CMasterControl (I2C6_BASE、I2C_MASTER_CMD_BURST_SEND_FINISH);
    MAP_SysCtlDelay (100);
    while (I2CMasterBusy (I2C6_BASE);
    I2CMasterSlaveAddrSet (I2C6_BASE、SLAVE_ADDRESS、FALSE);
    I2CMasterDataPut (I2C6_BASE、0x00); //P1 P0 = 01 =配置寄存器 字节进入 PR
    I2CMasterControl (I2C6_BASE、I2C_MASTER_CMD_BURST_SEND_START);
    MAP_SysCtlDelay (100);
    while (I2CMasterBusy (I2C6_BASE));
    I2CMasterSlaveAddrSet (I2C6_BASE、 SLAVE_ADDRESS、TRUE);// TRUE 表示主器件正在发起接收。
    I2CMasterControl (I2C6_BASE、I2C_MASTER_CMD_BURST_RECEIVE_START);
    MAP_SysCtlDelay (300);
    while (I2CMasterBusy (I2C6_BASE));
    temp.u8.high = I2CMasterDataGet (I2C6_BASE);
    I2CMasterControl (I2C6_BASE、I2C_MASTER_CMD_BURST_RECEIVE_FINISH);
    MAP_SysCtlDelay (300);
    while (I2CMasterBusy (I2C6_BASE));
    temp.u8.low = I2CMasterDataGet (I2C6_BASE);
    温度=(temp.i16>6)* 0.25;
    //温度现在保持温度的浮点值,单位为摄氏度
    }