【发布时间】:2017-08-01 20:47:03
【问题描述】:
我正在使用 I2C 通信,我需要读取单词而不是字节,但我被卡住了。 要读取字节,我会这样做:
void I2CReadBytes(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint8_t *value)
{
uint8_t i=0;
I2C_MasterSendStart(devAddr, I2C_WRITE_XFER_MODE);
I2C_MasterWriteByte(regAddr);
I2C_MasterSendRestart(devAddr, I2C_READ_XFER_MODE);
while (i++ < (length-1)) {
*value++ = I2C_MasterReadByte(I2C_ACK_DATA);
}
*value = I2C_MasterReadByte(I2C_NAK_DATA);
I2C_MasterSendStop();
}
如果我想阅读单词怎么办?我必须使用 int16_t *value 但之后我被困住了
while (i++ < (length-1)) {
*value++ = I2C_MasterReadByte(I2C_ACK_DATA);
}
*value = I2C_MasterReadByte(I2C_NAK_DATA);
谢谢
【问题讨论】:
-
最简单的做法是根据您现有的字节读取函数编写一个单词读取函数,如下所示:
void I2CReadWords(uint8_t devAddr, uint8_t regAddr, uint8_t length, uint16_t *value) { I2CReadBytes(devAddr, regAddr, length * 2, (uint8_t *)value); }。但是您可能会遇到字节排序问题。