主题中讨论的其他器件: TMP116、 TMP102、 BOOSTXL-BASSENSORS
海
我正在处理 CC1352R 传感器代码。 我正在使用 i2c 外设和回调函数读取温度数据。
在初始化时,我只打开 i2c 一次,如果每隔5秒读取一次温度值,我将获得温度值。
但是、如果 我每次尝试打开 i2c 并读取温度值并关闭 i2c、则由于 i2c 传输失败、我无法获取温度值。 如果我在事件中打开和关闭 i2c、是否有任何问题?
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.
海
我正在处理 CC1352R 传感器代码。 我正在使用 i2c 外设和回调函数读取温度数据。
在初始化时,我只打开 i2c 一次,如果每隔5秒读取一次温度值,我将获得温度值。
但是、如果 我每次尝试打开 i2c 并读取温度值并关闭 i2c、则由于 i2c 传输失败、我无法获取温度值。 如果我在事件中打开和关闭 i2c、是否有任何问题?
我尝试在 tmp007示例中添加 while (1)以重复测试 I2C_open/I2C_close、并且在测试时不会看到任何问题。
void * mainThread (void * arg0)
{
unsigned int i;
uint16_t 温度;
uint8_t txBuffer[1];
uint8_t rxBuffer[2];
I2C_Handle i2c;
I2C_Params i2cParams;
I2C_Transaction i2cTransaction;
/*调用驱动程序初始化函数*/
display_init();
GPIO_init();
I2C_init();
/*配置 LED 引脚*/
GPIO_setConfig (Board_GPIO_LED0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
/*打开主机显示屏以输出*/
Display = Display_open (Display_Type_UART、NULL);
if (display =NULL){
while (1);
}
/*打开用户 LED */
GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON);
display_printf (display、0、0、"启动 i2ctmp007示例\n");
/*创建 I2C 以供使用*/
I2C_Params_init (&i2cParams);
i2cParams.bitrate = I2C_400kHz;
while (1){
I2C = I2C_open (Board_I2C_TMP、&i2cParams);
if (i2c == NULL){
Display_printf (display、0、0、"Error Initializing I2C\n");
while (1);
}
否则{
display_printf (display、0、0、"I2C initialized!\n"\});
}
/*指向 T 环境寄存器并读取其2个字节*/
txBuffer[0]= TMP007_obj_TEMP;
i2cTransaction.slaveAddress = Board_TMP_ADDR;
i2cTransaction.writeBuf = txBuffer;
i2cTransaction.writeCount = 1;
i2cTransaction.readBuf = rxBuffer;
i2cTransaction.ReadCount = 2;
/*采集20个样本并将其打印到控制台*/
对于(i = 0;i < 20;i++){
if (I2C_transfer (i2c、&i2cTransaction)){
/*从接收到的数据中提取°C;请参阅 TMP102数据表*/
温度=(rxBuffer[0]<< 6)|(rxBuffer[1]>> 2);
/*
*如果 MSB 设置为"1"、则我们有二进制补码
*需要符号扩展的负值
*
if (rxBuffer[0]& 0x80){
温度|= 0xF000;
}
/*
*为简单起见、将温度值除以32即可摆脱
*十进制精度;请参阅 TI 的 TMP007数据表
*
温度/= 32;
display_printf (display、0、0、"Sample %u:%d (C)\n"、i、temperature);
}
否则{
display_printf (display、0、0、"I2C 总线故障\n"\});
}
/*睡眠1秒*/
睡眠(1);
}
/*已取消初始化 I2C */
I2C_Close (i2c);
display_printf (display、0、0、"I2C closed!\n"\});
}
返回(空);
}