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 和 UART 时出现问题

Guru**** 2540720 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1121390/cc1352r-problem-with-simultaneous-use-of-i2c-and-uart

器件型号:CC1352R

您好!

将 i2c 添加到项目时遇到问题。 当我单独使用 i2c 或 UART 时、一切工作正常。

当我要 将 i2c 初始化为 UART 程序时、问题就会开始。 然后 UART 开始接收不正确的数据。

有效代码:

#include
#include
#include

UART_Handle UART;
UART_Params uartParams;

I2C_Handle i2c;
I2C_Params i2cParams;

PIN_STATE 引脚状态;
PIN_Config pinInitTable[]={
PIN_ID (29)| PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_DRVSTR_MAX、
PIN_TERMINATE
};

void * mainThread (void * arg0)

PIN_INIT (pinInitTable);
PIN_OPEN (&pinState、pinInitTable);
Display_printf (display、0、0、"Interrupt init");

Display = Display_open (Display_Type_UART、NULL);

UART_PARAMS_INIT (uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_full;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.parityType = UART_PAR_even;
uartParams.dataLength = UART_LEN_8;
uartParams.stopbits = UART_STOP_ONE;
uartParams.baudrate = 9600;

UART = UART_OPEN (CONFIG_UART_RS485、uartParams);

// I2C_Params_init (&i2cParams);
// i2cParams.bitrate = I2C_400kHz;
// i2c = I2C_open (CONFIG_I2C_0、&i2cParams);
// if (i2c == NULL){
// while (1);
//}


// struct SD24_CalculatedResults calRes;
浮点温度、humi、pres、alti;

uint8_t i;
while (1){

PIN_setOutputValue (&pinState、PIN_ID (29)、1);
Display_printf (display、0、0、"Power on");

for (i=0;i<5;i++){
uint8_t cmd[8]={0x01、0x03、0x00、0x00、0x00、 0x09、0x85、0xCC};
uint8_t recvBuf[23];

UART_WRITE (UART、cmd、8);

UART_READ (UART、&recvBuf、23);

uint32_t temp_=((recvBuf[7]<< 24)+(recvBuf[8]<< 16)+(recvBuf[5]<< 8)+ recvBuf[6]);
temp =*((float*)&temp_);
uint32_t humi_=((recvBuf[11]<< 24)+(recvBuf[12]<< 16)+(recvBuf[9]<< 8)+ recvBuf[10]);
humi =*((float*)&humi_);
uint32_t pres_=((recvBuf[15]<< 24)+(recvBuf[16]<< 16)+(recvBuf[13]<< 8)+ recvBuf[14]);
Pres =*((float*)&pres_);
uint32_t Alti_=((recvBuf[19]<< 24)+(recvBuf[20]<< 16)+(recvBuf[17]<< 8)+ recvBuf[18]);
alti =*(((float*)&Alti_);

display_printf (display、0、0、"temp =%f C"、temp);
display_printf (display、0、0、"humi =%f %%%%%"、humi);
display_printf (display、0、0、"pres =%f hPa、pres);
display_printf (display、0、0、"Alti =%f m"、Alti);

睡眠(1);

PIN_setOutputValue (&pinState、PIN_ID (29)、0);
display_printf (display、0、0、"sleep 5s");
睡眠(5);

每当我取消注释与 i2c 初始化相关的行时。 UART 开始接收无效数据。

有人有这样的问题吗? 或者他知道如何解决这个问题吗?

提前感谢您提供所有提示

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

    如果我们能够研究这一点、我们将需要一种方法来重新创建 LP 上的问题。 请使用最新的 SDK 并从默认 UART 示例之一开始、然后对示例进行最小的更改(添加 I2C 等)以说明问题。 然后、我们可以在最后进行相同的修改、并尝试弄清发生了什么情况。

    Siri

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

    你(们)好、Siri。

    感谢您的回答。
    我在新 SDK 上运行了该程序、一切看起来都正常。

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

    很高兴听到你能让它工作:-)