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.

[参考译文] CC1310:运行模式 UART?

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1491907/cc1310-operating-modes-uart

器件型号:CC1310

工具与软件:

4)运行模式 UART?


我已将一个具有 LoRa 的传感器连接到 CC1310上的 UART 总线。 当我向传感器发送一条命令时、它的响应"+OK"表示该命令成功。 当我发送命令请求它响应我的数据时、帧看起来像这样"+OK\r\n+RCV=3、5、hello、-13、23"。

我已经读取当缓冲区已满或在接收时检测到新线路时返回以下配置。

void uart4.11v(void){ Ra_Init

uart_init();
UART_Params uartParams;
UART_Params_init (&uartParams);
uartParams.writeDataMode = UART_DATA_TEXT;//UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_TEXT;//UART_DATA_BINARY;
uartParams.readMode = UART_MODE_CALLBACK;
uartParams.readReturnMode = UART_RETURN_NEWLINE;  
uartParams.writeMode = UART_mode_callback;
uartParams.readCallback = RXUartCb;
uartParams.writeCallback = TXUartCb;
uartParams.baudrate = 115200;
UART = UART_open (Board_UART0、&uartParams);//*/


}


在此 UART 配置下、当我的数据响应中检测到字符"\n"时、是否会调用回调?

提前感谢。

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

    您好、J:

    我们的驱动程序如下所述:

    您是否尝试过分享的代码? 有错误吗?

    此致、

    Arthur

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

    您好、Arthur。

    我已经测试了共享代码、没有观察到任何差异。 我正在阅读以下文章。


    e2e.ti.com/.../cc1310-cc1310-uart-interrupt-using-callback-api-s

    根据我现在的理解、驱动程序中的某些功能不可用。

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

    您好、Arthur。

    我现在在 UART 中使用以下配置。

    void uart4.11v(void){ Ra_Init

    uart_init();
    UART_Params uartParams;
    UART_Params_init (&uartParams);
    uartParams.writeDataMode = UART_DATA_BINARY;
    uartParams.readDataMode = UART_DATA_BINARY;
    uartParams.readMode = UART_MODE_CALLBACK;
    uartParams.writeMode = UART_mode_callback;
    uartParams.readCallback = RXUartCb;
    uartParams.writeCallback = TXUartCb;
    uartParams.baudrate = 115200;
    UART = UART_open (Board_UART0、&uartParams);
    }

    我依靠在另一篇文章中的这一评论。

    CC1310:CC1310:使用回调 API 的 UART 中断-低于1GHz 论坛-低于1GHz - TI E2E 支持论坛

    "如果不使用部分返回、则只有在接收到给定数量的字节数或检测到错误(因为这会导致操作取消)后才能获取回调。 返回部分很有用、因为它允许您接收未知数量的字节。 假设您知道您的物联网设备最多发送200字节、那么您可以说您预计最多200字节、如果仅接收50字节、仍将获得回调。 "

    在我的应用中、当接收器在线时、它会回答我一个包含69字节的帧、这非常完美。
    问题是当接收器离线且 CC1310 UART 仅接收5个字节时。
    根据我在上一篇文章中的评论,我知道我的最大字节(69 ),这是可以的,但根据理论,即使只接收5字节,我应该调用回调,但它不起作用。

    您是否知道为什么它不能这样做?

    提前感谢。

    char buffer01[]="AT+SEND=5,4,CMD1\r\n";
    
    static void Task_RF(UArg arg0, UArg arg1){
    uartLoRa_Init();
    
    
    
    while(1){
    
       
    
    if(motionFlag){
    
    switch(status){
    
           case Send_CMD01:{
    
           UART_write(uart,buffer01, strlen(buffer01));
           usleep(300000);
    
           Noc.status = RX_CMD01;
           break;
    }
    
    case RX_CMD01:{
    
        UART_control(uart, UARTCC26XX_CMD_RETURN_PARTIAL_ENABLE, NULL);
        UART_read(uart, &data,69);
        usleep(100000);
    
    
         break;
    }
    	}
    		}
    			}	
    			
    static void RXUartCb(UART_Handle handle, void *buf, size_t count){
    
           uint8_t BytesEsperados = 69;
            uint8_t i;
            if (count == BytesEsperados) {
    
               for( i = 0; i < count; i++){
                dataEstado[i] = ((char*)buf)[i];
               }
            }
            else{
                //I will return to the initial state Send_CMD01
    
            }
        
    }
    
    			
    
    void uart_Init(void){
    
         UART_init();
         UART_Params   uartParams;
         UART_Params_init(&uartParams);
         uartParams.writeDataMode = UART_DATA_BINARY;
         uartParams.readDataMode  = UART_DATA_BINARY;
         uartParams.readMode = UART_MODE_CALLBACK;
         uartParams.writeMode = UART_MODE_CALLBACK;
         uartParams.readCallback = RXUartCb;
         uartParams.writeCallback = TXUartCb;
         uartParams.baudRate = 115200;
         uart = UART_open(Board_UART0, &uartParams);
    
    
    }