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/MSP430FR6989:BME280的 I2C 读取问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/835755/ccs-msp430fr6989-i2c-read-issues-with-bme280

器件型号:MSP430FR6989

工具/软件:Code Composer Studio

你(们)好

我尝试使用单个 i2c 函数读取单个或多个字节。 下面是代码的一部分

unsigned char * i2c_data; 
unsigned char RX_Data; unsigned char * i2c_read (unsigned char SLV_addr、unsigned char reg_addr、unsigned int len){ unsigned char data[36]; unsigned int i = 0; while (UCB1STAT 和 UCBBUSY); UCB1I2CSA = SLV_addr; UCB1CTLW0 |= UCTR | UCTXSTT; while (UCB1CTLW0和 UCTXSTT); UCB1TXBUF = REG_addr; while (!(UCB1IFG & UCTXIFG0)); UCB1CTLW0 &=~UCTR; UCB1CTLW0 |= UCTXSTT; while (UCB1CTLW0和 UCTXSTT); for (i = 0;i < len;i++) { if (i == len - 1) { UCB1CTLW0 |= UCTXSTP; } while (!(UCB1IFG & UCRXIFG0)); DATA[i]= UCB1RXBUF; } while (UCB1CTLW0和 UCTXSTP); return (data); }

当我根据所需的值检查读取值时、该值为 true、但当我尝试打印该值时、我会收到垃圾邮件。

I2C_DATA = i2c_read_bytes2 (BME280_I2C_address、BME280_CHIP_ID_ADDR、1);
IF (i2c_data[0]= 0x60)
{
UART_PUs ("芯片地址为:");
sprintf (RX_Data、"%x"、i2c_data);
UART_Ps (RX_Data);
UART_PUs ("\r\n");
} 

它正在打印2Ðð 而不是60

此致

Vijay

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

    您好!

    [报价用户="Vijay Kolaventy"]当我对照所需的值检查读取值时,该值为 true

    这是一个良好的开始。

    [报价用户="Vijay Kolaventy"]当我尝试打印该值时,我会收到垃圾邮件。

    这必须与字符转换为 ASCII 或类似内容的方式相关。 这可能是因为当您对无符号十六进制整数使用"%x"格式标志时、"i2c_data"数组被声明为"char"。 您可以尝试将数组声明为无符号整数。

    此致、

    James

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

    谢谢你。 这解决了问题。 但是、我还必须编写一些代码来将整数转换为文本、以便通过 UART 发送其 ASCII 字符。