使用 I2C_master 库 AVR
Using I2C_master library AVR
我正在为 AVR 使用 I2C_master 库,通信工作正常,但我有一点问题,如何获取数据。
我正在使用这个功能
uint16_t i2c_2byte_readReg(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length){
devaddr += 1;
if (i2c_start(devaddr<<1|0)) return 1;
i2c_write(regaddr >> 8);
i2c_write(regaddr & 0xFF);
if (i2c_start(devaddr<<1| 1)) return 1;
for (uint16_t i = 0; i < (length-1); i++)
{
data[i] = i2c_read_ack();
}
data[(length-1)] = i2c_read_nack();
i2c_stop();
return 0;}
现在我需要使用接收到的数据,通过UART发送给PC
uint8_t* DevId;
i2c_2byte_readReg(address,REVISION_CODE_DEVID,DevId,2);
deviceH=*DevId++;
deviceL=*DevId;
UART_send(deviceH);
UART_send(deviceL);
我觉得我迷路了。你能帮我吗,我怎样才能得到接收到的数据以备将来使用? (在这种情况下,UART 对我来说工作正常,但它只发送 0x00 和这个代码)
函数i2c_2byte_readReg
将第三个参数作为指向数据写入缓冲区的指针。请注意,它的大小必须大于名为 length
的第四个参数。您的 DevId
指针未指向任何缓冲区,因此在调用该函数时您遇到了访问冲突。
要获取数据,您应该在调用函数之前定义一个数组:
const size_t size = 8;
uint8_t data[size];
然后你可以调用将缓冲区地址作为参数传递的函数(数组名称转换为它的地址):
const uin16_t length = 2;
i2c_2byte_readReg(address, REVISION_CODE_DEVID, data, length);
假设函数运行良好,这两个字节将被保存到 data
缓冲区中。请记住 size
必须大于或等于 length
参数。
然后您可以通过 UART 发送数据:
UART_send(data[0]);
UART_send(data[1]);
我正在为 AVR 使用 I2C_master 库,通信工作正常,但我有一点问题,如何获取数据。
我正在使用这个功能
uint16_t i2c_2byte_readReg(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length){
devaddr += 1;
if (i2c_start(devaddr<<1|0)) return 1;
i2c_write(regaddr >> 8);
i2c_write(regaddr & 0xFF);
if (i2c_start(devaddr<<1| 1)) return 1;
for (uint16_t i = 0; i < (length-1); i++)
{
data[i] = i2c_read_ack();
}
data[(length-1)] = i2c_read_nack();
i2c_stop();
return 0;}
现在我需要使用接收到的数据,通过UART发送给PC
uint8_t* DevId;
i2c_2byte_readReg(address,REVISION_CODE_DEVID,DevId,2);
deviceH=*DevId++;
deviceL=*DevId;
UART_send(deviceH);
UART_send(deviceL);
我觉得我迷路了。你能帮我吗,我怎样才能得到接收到的数据以备将来使用? (在这种情况下,UART 对我来说工作正常,但它只发送 0x00 和这个代码)
函数i2c_2byte_readReg
将第三个参数作为指向数据写入缓冲区的指针。请注意,它的大小必须大于名为 length
的第四个参数。您的 DevId
指针未指向任何缓冲区,因此在调用该函数时您遇到了访问冲突。
要获取数据,您应该在调用函数之前定义一个数组:
const size_t size = 8;
uint8_t data[size];
然后你可以调用将缓冲区地址作为参数传递的函数(数组名称转换为它的地址):
const uin16_t length = 2;
i2c_2byte_readReg(address, REVISION_CODE_DEVID, data, length);
假设函数运行良好,这两个字节将被保存到 data
缓冲区中。请记住 size
必须大于或等于 length
参数。
然后您可以通过 UART 发送数据:
UART_send(data[0]);
UART_send(data[1]);