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.

[参考译文] LAUNCHXL-CC2640R2:在 UART_MODE_CALLACK 中连续接收(doxygen)不起作用?

Guru**** 2586495 points
Other Parts Discussed in Thread: CC2541, CC2640R2F

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/595345/launchxl-cc2640r2-receive-continously-in-uart_mode_callback-doxygen-not-working

器件型号:LAUNCHXL-CC2640R2
主题中讨论的其他器件:CC2541CC2640R2F

您好!

  我按照 Doxygen 文档中的指令"在 UART_MODE_CALLBOART"中连续接收"、但回调仅发生一次。 为什么是这样? 下面是我的代码。

void UartApp__UartRxCB (UART_Handle handle、void *buf、size_t count)
{
if (count = wanedRxBytes){
//将字节从 RX 缓冲区复制到 TX 缓冲区
对于(size_t i = 0;i < count;i++)
txBuf[i]=(uint8_t*) rxBuf)[i];
//将接收到的字节回传到发送器
UART_WRITE (hUART、txBuf、count);
//开始另一次读取,大小与第一次调用时相同
// UART_read()
UART_READ (hUART、rxBuf、wantedRxBytes);
}
否则{
//处理错误或调用 UART_readCancel()
}

}


void UartApp_Init (void)
{
const char echoPrompt[]="UART 已初始化! !! !\r\n";
UART_Params uartParams;

/*调用驱动程序初始化函数*/
UART_init();

/*创建一个数据处理关闭的 UART。 */
UART_Params_init (&uartParams);

uartParams.readMode = UART_MODE_CALLBACK;
uartParams.readDataMode = UART_DATA_BINARTL.writeDataMode
= UART_DATA_BINARTL.readCallback
= UartApp_UartRxCB;
uartParams.baudrate = 115200;

hUART = UART_open (Board_UART0、&uartParams);
wantedRxBytes = 1;

if (hUART = NULL){
/* UART_open()失败*/
while (1);
}

UART_write (hUART、echoPrompt、sizeof (echoPrompt));
UART_read (hUART、 rxBuf、wantedRxBytes);

} 

-克尔

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

    尊敬的 TI:

      我只想添加另一个与 UART 相关的问题。 我需要能够键入 Tera 术语、例如"蜂鸣器0"。 它将回显字符、以便我可以查看我键入的内容。 超时2秒后、它将调用 UART 回调、然后处理"蜂鸣器0"字符串。 为了满足这些要求、我应该执行什么 UART 初始化? 换行后的回调不起作用、因此下一个选项是超时。 在我们基于 CC2541的产品上、UART_Callback 在超时后调用、它具有以下条件。 我想为 CC2640R2F 实现类似的功能。

    开关(事件)
    {
    案例 HAL_UART_RX_FULL:/* 0x01 */
    {
    /*不应到达此处,因为 UART 被立即读取*/
    /*因为 config.idleTimeout 设置为0ms */
    中断;
    }
    
    案例 HAL_UART_RX_abal_full://* 0x02 */
    /*如果关于完整版、则读取 UART */
    案例 HAL_UART_RX_TIMEOUT://* 0x04 *
    {
    /*获取 Rx 缓冲区中当前的字节数*/
    dataLen = hal_UART_RxBufLen (端口);
    对于(i = 0;i < dataLen;i++)
    {
    /*从 Rx 缓冲区读取一个字节*/
    HalUARTRead (port、byteRx、1);
    开关(byteRx)
    {
    /*检查终止字符*/
    case carria_return:/*'\r\n' 0x0D */
    {
    /*命令复杂度*/
    
    /*在此处执行操作*/
    //在此处处理消息
    
    
    中断;
    }
    
    /*删除缓冲区左侧的字符*/
    大小写退格:/*'\b' 0x08 */
    {
    
    中断;
    }
    
    默认值:
    {
    
    中断;
    }
    }
    /* Rx 缓冲区将在读取后更新、再次读取 RxBufLen */
    dataLen = hal_UART_RxBufLen (端口);
    }
    中断;
    }
    
    案例 HAL_UART_TX_FULL://* 0x08 *
    {
    中断;
    }
    
    案例 HAL_UART_TX_EMPTY:/* 0x10 */
    {
    /*将在发送所有数据后到达此处*/
    中断;
    }
    
    默认值:
    中断;
    }
    返回; 

    -克尔

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

    无论如何、我使 UART Echo 持续工作。 我设置 uartParams.writeMode = UART_MODE_CALLBACK;。 我设置一个空 UART TX 回调。

     我注意到的 uartParams.writeMode = UART_MODE_CALLBACK 问题是、当您向 Tera Term 输出字符串时、有时会损坏字符串。 这是下面的示例输出。

     "UART 已初始化! !! EST started (EST 已启动)"应该在下一行打印所谓的"test started"(已开始测试)。

    下面是我的 UART 回调。

    void UartApp__UartTxCB (UART_Handle handle、void *buf、size_t count)
    {
    //在此处执行操作
    }
    
    void UartApp__UartRxCB (UART_Handle handle、void *buf、size_t count)
    {
    txBuf[0]=((uint8_t*) buf)[0];
    
    if (txBuf[0]='\r\n')
    {
    cmdrxBuf[charcount]= txBuf[0];
    UartApp_WriteString ("\r\n");
    charcount++;
    
    对于(i = 0;i < charcount;i++)
    {
    TestApp_DecodeData (cmdrxBuf[i]);
    }
    charcount = 0;
    }
    否则
    {
    cmdrxBuf[charcount]= txBuf[0];
    charcount++;
    
    }
    
    UART_WRITE (hUART、txBuf、sizeof (txBuf));
    UART_read (hUART、&rxBuf、 sizeof (rxBuf)/sizeof (BUFTYPE);
    
    } 

    我的 UART RX 回调实现似乎不是最好的、因为每按1次键就会进行回调。 然后我将每个字节保存到 cmrxBuf[64]。  如果在我键入"蜂鸣器0"然后按 Enter 后进行回调、会更好。

    -克尔

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

    您好、Markel、您正在使用什么 TI-RTOS 或 Simplelink CC2640R2 SDK? 我想 UART 驱动程序在最新的 Simplelink CC2640R2 SDK 中有所发展。 您是否已经找到 UARTCC26XX.h doxygen 文档?

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

    最初、我查看的是 UART.h、并且在我的程序中也使用了 UART.h。 但是、我看到这个 UARTCC26XX.h 我认为这应该适用于 CC2640R2 Launchpad。 因此、我删除了程序中的 include UART.h 并改为包含 UARTCC26XX.h。

    无论如何、上述代码正常工作、我将在我们的产品中使用它以进行测试模式。 我所说的是,必须更好地执行。

    -克尔