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.

[参考译文] 传感器控制器- UART 示例

Guru**** 2595800 points
Other Parts Discussed in Thread: CC2640, CC2650, CC2640R2F

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/607699/sensor-controller---uart-example

主题中讨论的其他器件:CC2640CC2650CC2640R2F

大家好、

我正在尝试使用传感器控制器示例实现 UART、但可能我做了一些错误。 我创建了一个新项目、并将代码从传感器控制器复制到 CCS。

此代码:

//启动 UART 仿真器任务
scifExecuteTasksOnceNbl (BV (SCIF_UART_TASK_ID);

//启用波特率生成
scifUartSetBaudRate (57600);

//启用 RX
scifUartSetRxEnableReqIdleCount (1);scifUartRxIdleCount (
1)


;// while 环路(1);//启用

//回送收到的任何字符
while (scifUartGetRxFifoCount()){
scifUartTxPutChar ((char) scifUartRxGetChar ();
}
} 

我正在使用 PuTTY 查看来自 UART TX 的字符当我在键盘中写入内容时、什么也不知道我缺少什么?

谢谢你。

此致、

Miguel  

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

    米格尔

    您未指定要编程的设备。  请提供您在此设计中使用的器件或模块。  谢谢、

    ~Leonard

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

    通过 SCS、您需要首先生成相关代码、然后可以找到相关文件、例如 SCIF.c、SCIF.h、main.c 或 main_tirtos.c、 CC2640/CC2650或 CC2640R2等特定芯片组。
    生成文件时、必须从"I/O 映射"菜单配置所需的 UART 端口。
    可以在 SCIF.c 和 SCIF.h 中确认设置
    实际上、main_xx.c 和 scif.c 以及 scif.h 仅在更改诸如 IO 映射等配置时发生更改。
    您只需从 CCS 或 IAR 构建文件即可。 就是这样。
    只需通过 PC 终端程序确认 UART 操作即可。

    在本例中、

    我只需如下所示重命名任务创建部分、然后从 simplecentral 或 simplpleperipheral 的 main.c 中调用它。

    void ScUart_createTask (void)

    Task_Params taskParams;

    //配置操作系统任务
    Task_Params_init (&taskParams);
    taskParams.stack = ScUartTaskStack;
    taskParams.STACKSIZE = sizeof (ScUartTaskStack);
    taskParams.priority = 4;// 3.
    Task_construction (&ScUartTask、ScUart_taskFxn、&taskParams、NULL);

    //创建用于等待传感器控制器警报事件的信号量
    Semaphore_Params semParams;
    Semaphore_Params_init (semParams);
    semParams.mode = Semaphore_Mode_binary;
    Semaphore_construction (semScTaskAlert、0、semParams);

    #if 0
    int main (void){

    //初始化 PIN 驱动程序
    PIN_init (BoardGpioInitTable);

    //配置操作系统任务
    scUart_createTask();

    //启动 TI-RTOS
    BIOS_start();
    返回0;

    }// main
    #endif

    吉元

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

    现在、我将 CC2650与 smartRF06评估板配合使用、在我成功进行测试后、我将更换为其他评估板。

    感谢你的答复。

    此致、

    Miguel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。
    我使用 main_tirtos.c 更改了主程序、工作正常、因此我尝试了下一步、即向外设发送命令并检查答案。 当我测试时、我注意到当某些内容被添加到 RX 缓冲区时、程序会离开传感器控制器任务、但我想要的是先发送命令、然后检查器件应答、您知道是否存在任何模式或功能?

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

    "向外设发送命令"是否意味着您的外设应用通过 UART Tx 向外部 MCU 发送命令?

    如果有来自外部 MCU 的 UART Rx 的答案、您将进行处理。 对吧?

    如果正确、

    向外部 MCU 发送命令后、您的应用程序将通过"Semaphore_pend (Semaphore_handle (&semScTaskAlert)、BIOS_wait_forever)"等待某个操作;、

    最后,有些东西到达了,等待循环将被释放,然后您的应用程序将到达"int rxFifoCount = scifUartGetRxFifoCount();"

    如果需要、您可以生成一个处理程序、用于外设应用程序。 外设应用程序中的处理程序可以处理我用红色突出显示的接收部分。

    --------------------------------------------------

      //使能事件(半满 RX FIFO 或10位周期超时

      scifUartSetEventMask (BV_SCIF_UART_RX_组 帧错误| BV_SCIF_UART_ALERT_RX_FIFO_UPLOW_THR | BV_SCIF_UART_ALERT_RX_BYTE_TIMEOUT);

      char 输出[]={"终端调试显示启动"};

      scifUartTxPutChars (输出、sizeof (输出));

      //主循环

      while (1){

        //等待警报回调

        //允许应用程序休眠,直到收到所需的字符数。

        Semaphore_pend (Semaphore_handle (&semScTaskAlert)、BIOS_wait_forever);

        //清除警报中断源

        scifClearAlertIntSource();

        //回显 RX FIFO 中当前的所有字符

        int rxFifoCount = scifUartGetRxFifoCount();

        //即使 rxFifoCount 为0,也应使用以下过帐,然后应用程序 CPU 将清除相关的事件标志。

        //SimpleBLECentrall_scUartTransferHandler (rxFifoCount);

        while (rxFifoCount--){

          char Rx_data = scifUartRxGetChar();

          scifUartTxPutChar (rx_data);

        }

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Ji Won,
    你是对的、你的解决方案是可行的、但我注意到我没有在 pRxBuffer 中捕获所有的 Caracter、只有在下一个周期中我才能够看到它、你知道为什么以及如何更改它吗? 是否可以冲洗 De rxfio 或类似的东西、以不收集下一个水泡的垃圾?

    谢谢你。

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

    据我所知、即使外部 MCU 发送了20个字节的长度、例如、您的应用程序也会接收数据、数据被分成1个以上、因为 RX 中断是在至少4个字节被填充后生成的。 因此、'rxFifoCount'将在接收20字节数据之前继续更新。
    因此、请监控计数变量。

    有关至少4个字节的信息、您可以在此论坛中找到相关信息。
    我希望这对您解决这个问题很有用。

    BR、
    吉元

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

    是否可以更改生成中断所需的字节数? 例如7、而不是4。

    BR、
    Miguel

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

    关于、我不知道如何操作。

    在本例中、我在应用侧添加了另一个 Rx 环缓冲器以避免损耗。

    但是、供参考

    此外、请参阅我的文章"RTOS/CC2640R2F:如何将事件从 SCS 任务发送到应用任务"。