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.

CC1312R: 在例程的基础上添加其他功能,却不能正常运行其他功能,只能运行例程上的功能。

Part Number: CC1312R
Other Parts Discussed in Thread: TMP112

Dear TI:

现在做的项目中包含几个模块功能,1是RF射频,2是通过RS485进行上位机通讯,3,使用IIC采集TMP112温度传感器的温度。

每个模块我都通过例程测试过,第一的功能使用“rfEasyLinkEchoRx_CC1312R1_LAUNCHXL_tirtos_ccs”这个例程可以通讯;

第二个功能使用uartecho_CC1312R1_LAUNCHXL_tirtos_ccs例程通过修改也实现了;

第三个功能本人在CC1352R1Launchpad上面通过外接TMP112芯片实现了这段代码的实用性。

但是我需要将这些功能放到一个工程里的时候就会出现问题。

比如,我都是通过COPY和paste rfEasyLinkEchoRx_CC1312R1_LAUNCHXL_tirtos_ccs这个例程然后更改工程名字,然后在.syscfg文件中选择我需要的模块,比如,iic,比如,uart。

但是实际操作时候却不成功。会卡死在UART_read(uart, (&data[i]), 1);这里,TMP112读取出来的温度信息也是0xFFFF。

请问你们知道这种是什么情况吗,在新建工程的时候需要注意什么问题。在一个例程上添加其他功能需要更改哪些问题吗

  • 你在哪里使用的UART_read? UART_read会产生阻塞,放在callback里面会出现问题

    在新建工程的时候需要注意什么问题

    参考例程multi_sensor中的实现方式

    C:\ti\simplelink_cc13x2_26x2_sdk_5_10_00_48\examples\rtos\CC1352R1_LAUNCHXL\ble5stack\multi_sensor

  • UART_init();

    // Initialize UART parameters
    UART_Params_init(&params);
    params.readMode = UART_MODE_BLOCKING;
    params.writeMode = UART_MODE_BLOCKING;
    params.readTimeout = UART_WAIT_FOREVER;
    params.writeTimeout = UART_WAIT_FOREVER;
    params.readCallback = NULL;
    params.writeCallback = NULL;
    params.writeDataMode = UART_DATA_BINARY;
    params.readDataMode = UART_DATA_BINARY;
    params.readReturnMode = UART_RETURN_FULL;
    params.readEcho = UART_ECHO_OFF;
    params.baudRate = 9600;
    params.dataLength = UART_LEN_8;
    params.stopBits = UART_STOP_ONE;
    params.parityType = UART_PAR_NONE;

    // Open the UART
    uart = UART_open(CONFIG_UART_RS485, &params);
    if (uart == NULL) {
    /* UART_open() failed */
    while (1);
    }

    while(1)
    {
    memset(recv_buf, 0, MAX_BUF_SIZE);
    uart_read(&recv_buf[0], &recv_len);
    func_unpackage(&recv_buf[0], recv_len);
    UART_control(uart,(UART_CMD_RESERVED + 2),NULL);//清除uart_read中的buffer
    chargeBaudFun();
    }

    这是初始化和使用地方,下面是uart_read函数

    int32_t uart_read(uint8_t* data, int32_t* len)
    {
    int32_t ret = 0;
    int32_t i = 0;
    if((NULL == data) || (NULL == len))
    {
    ret = -1;
    }
    else
    {
    //字符串数据读取逻辑
    *len = 0;
    for(i = 0; i < MAX_BUF_SIZE; i++)
    {
    UART_read(uart, (&data[i]), 1);
    *len += 1;
    if(*len == 8)
    {
    break;
    }
    }
    uart_read_flag = 1;
    ret = 0;
    }
    return ret;
    }

    运行到UART_read(uart, (&data[i]), 1);时候会一直卡死,不执行到下一步。我在其他例程里实现过这个功能,可以正常运行,但在这里却一直不行。

  • UART_read()会一直阻塞,直到所有数据读完成或者超时时间到了为止

    The context of calling UART_read() or UART_write() must be a Task when using UART_MODE_BLOCKING. The UART_write() or UART_read() call will block until all data is sent or received, or the write timeout or read timeout expires, whichever happens first.