工具/软件:TI C/C++编译器
您好!
我已将 timerled 和 i2cttemp 示例组合在一起,以获得每秒的温度值,但它给了我错误:I2C 总线故障。
我已尝试解决此问题,但我无法理解为什么会发生,请建议我如何解决此问题?
以下是调试页面的代码和屏幕截图:
#include
#include
#include
#include
#include
#include
#include
#include
#include "Board.h"
#define TMP006_DIE_TEMP 0x0001
uint16_t 温度;
uint8_t txBuffer[1];
uint8_t rxBuffer[2];
I2C_Transaction i2cTransaction;
I2C_Handle i2c;
I2C_Params i2cParams;
INT 标志;
void timerCallback();
void * mainThread (void * arg0)
{
Timer_handle timer0;
Timer_Params 参数;
GPIO_init();
timer_init();
I2C_init();
I2C_Params_init (&i2cParams);
i2cParams.bitrate = I2C_400kHz;
GPIO_setConfig (Board_GPIO_LED0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_OFF);
Timer_Params_init (¶ms);
params.period = 1000000;
Params.periodUnits = Timer_Period_US;
params.timerMode = Timer_Continuous_callback;
params.timerCallback = timerCallback;
timer0 = Timer_open (Board_TIMER0、params);
if (timer0 == NULL){
while (1);
}
如果(Timer_start (timer0)= Timer_STATUS_ERROR){
while (1);
}
返回(空);
}
空 timerCallback()
{
I2C = I2C_open (Board_I2C_TMP、&i2cParams);
if (i2c == NULL){
printf ("初始化 I2C\n"时出错);
while (1);
}
否则{
printf ("I2C 已初始化!\n"\});
}
txBuffer[0]= TMP006_DIE_TEMP;
i2cTransaction.slaveAddress = Board_TMP_ADDR;
i2cTransaction.writeBuf = txBuffer;
i2cTransaction.writeCount = 1;
i2cTransaction.readBuf = rxBuffer;
i2cTransaction.ReadCount = 2;
flag = I2C_transfer (i2c、&i2cTransaction);
if (flag){
温度=(rxBuffer[0]<< 6)|(rxBuffer[1]>> 2);
if (rxBuffer[0]& 0x80){
温度|= 0xF000;
}
温度/= 32;
printf ("采样%d (C)\n"、温度);
}
否则{
printf ("I2C 总线故障");
}
I2C_Close (i2c);
printf ("I2C 已关闭!\n"\});
}
