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-CC2650:在 Project Zero 上实施 UART

Guru**** 2568585 points
Other Parts Discussed in Thread: CC2650

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/588310/launchxl-cc2650-implementing-uart-on-project-zero

器件型号:LAUNCHXL-CC2650
Thread 中讨论的其他器件:CC2650

我目前正在从事一个项目、 在该项目中、我将使用具有低功耗蓝牙的 CC2650 Launchpad 来实现手机与 MSP430之间的通信。 我们在获取 CC2650从手机接收的数据、然后通过 UART 将相同数据发送到 MSP430时遇到问题。 我们可以通过 CC2650一次性将数据从手机发送到 MSP430、但当手机向 CC2650发送新数据时、该数据永远不会更新。  
我们使用 ProjectZero 示例启动了该项目,并添加了 uartecho_CC2650_LAUNCHXLL_TI...中的代码 以获取 UART 功能。 我们在 project_zero.c 文件中确定了一个点、我们认为需要对 UART 进行读取和写入操作、但在获得初始数据后无法发送新数据的代码。 附件是代码的屏幕截图。 我们使用来自 projectzero 构造的 ProjectZero_taskFxn()调用来使用示例中给出的 for (;)循环(下面是第一个代码片段)。 第二个映像使用 project_zero.c 中的 USER_processApplicationMessage (psMg)调用 这最终会导致调用 USER_DataService_ValueChangeHandler()的第三个映像 ,在该映像中,我们实现了 UART_echo 示例的修改版本,并标记了修改后的代码 UART_MCU()。 然后、该函数调用下面标记为 UART_MCU()的第二个代码片段、并尝试使用 UART 从 MSP430进行写入和读取。 通过当前设置、我们可以连续读取(由于 while 环路)并将新数据从手机写入 MSP430一次。 但是、我们必须首先写入才能从 MSP430读取任何数据、因为我们已经在 project_zero.c 中的某个位置实现了 UART 调用、程序将等待来自电话的传入消息。 我们知道这不是正确的逻辑实现功能的方法、但是、我们无法在其他地方放置或 UART 实现时成功构建。 您对我们可以将 UART 实现置于何处有何建议、以便我们能够从 MSP430和移动应用中连续读取和写入?
P.S. 我们没有在 UART 中使用 task_construct,因为我们没有看到它的实施有任何变化,但是,我们认为这也可能是一个问题,并且可以很容易地将它重新实施。  
静态空 ProjectZero_taskFxn (UARg a0、UARg A1)
{
//初始化应用
ProjectZero_init ();
//UART_read ();
//静态 uint8_t received_string[DS_string_LEN]={0};
//UART_Start (received_string);
//应用程序主循环
(
;{;}
//等待与调用线程关联的信号量。
//请注意、当发出信号时、与线程关联的信号量会发出信号
//消息在线程的消息接收队列中排队,或在何时排队
// iCall_signal ()函数被调用到信号量上。
iCall_errno errno = iCall_Wait (ICALL_TIMEOUT_FOREVAL);
//uart_read();
if (errno =ICALL_errno_Success)
{
iCall_EntityID dest;
iCall_ServiceEnum src;
iCall_HciExtEvt *pMsg =空;

//检查我们是否由于堆栈消息而获得信号
if (iCall_fetchServiceMsg (&src、&dest、
(void **)&pMsg)=ICALL_errno_Success)
{
uint8 safeToDealloc = true;

IF (((src =ICALL_SERVICE_CLASS_BLE)&&(dest =self Entity))
{
iCall_Stack_Event *pEvt =(iCall_Stack_Event *) pMsg;

//检查接收到的事件标志(事件签名0xFFFF)
if (pEvt->signature == 0xFFFF)
{
//完成连接事件时接收到的事件
if (pEvt->EVENT_FLAG & PRZ_CONN_EVT_END_EVT)
{
//尝试重新发送待处理的 ATT 响应(如果有)
ProjectZero_sendAttRsp();
}
}
否则//它是来自堆栈的消息,而不是事件。
{
//处理任务间消息
safeToDealloc = ProjectZero_processStackMsg ((iCall_HDR *) pMsg);
}
}

if (pMsg && safeToDealloc)
{
iCall_freeMsg (pMsg);
}
}

//处理从另一个任务或另一个上下文发送的消息。
while (!Queue_empty (hApplicationMsgQ))
{
app_msg_t *pMsg = Queue_dequeue (hApplicationMsgQ);

//处理可能从我们自己发送的应用层消息。
USER_processApplicationMessage (pMsg);

//释放收到的消息。
iCall_free (pMsg);
}
}

} 

extern void UART_MCU (uint8_t * received_string)
{
字符输入[3]={0};
//char 输出[3]={0};
//int num_Bytes =0;
//int inc = 0;
int len_read =(sizeof (input)/sizeof (char));
int num_Bytes = 0;
//int len =(sizeof (received_string)/sizeof (uint8_t));
UART_Handle UART;
UART_Params uartParams;
//创建数据处理关闭的 UART。
UART_PARAMS_INIT (uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_full;
//uartParams.readMode = UART_MODE_CALLACK;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudrate = 9600;
UART = UART_OPEN (Board_UART0、uartParams);
uint8_t * write_string;
while (1)
{
write_string = received_string;
如果(UART == NULL)
{
;//System_abort ("打开 UART 时出错");
}
memset (input、0、sizeof (input));
_DELAY_CYCLES (1000000);
if (num_Bytes= UART_read (UART、INPUT、len_read))
{
if (num_Bytes =UART_ERROR)
{
printf ("从 MSP430\n"\n 读取错误");
}
其他
{
//数据服务中可提供数据的特征的初始化。
dataservice_SetParameter (DS_STRING_ID、sizeof (input)、input);
}

}
if (num_Bytes= UART_WRITE (UART、write_string、3))
{
if (num_Bytes =UART_ERROR)
{
printf ("写入 MSP430时出错");
}
//DataService_SetParameter (DS_STREE_ID、DS_STREE_LEN、initVal);
}
memset (input、0、sizeof (input));
}
} 

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

    也许看一个示例会有所帮助。 查看我们在 GitHub 上提供的串行配置文件示例:
    github.com/.../cc2650lp

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

    没有串行配置文件示例使用 UART。 您知道我们如何使用当前的项目配置通过 UART 将从手机发送到 MSP430的值写入吗? 目前我们只能写入一次、因为我们的 while 循环位于 uartecho.c 中的 UART_MCU()中 我们已经尝试在 ProjectZero_taskFxn()中使 pMsg 变量变得易失性,但它会导致生成错误。 我们是否可以通过 UART 在当前项目中持续进行读写?

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

    我相信您错了、SPP 演示肯定会使用 UART。

    看一看它们的源代码、它们通过称为 SDI 的抽象层使用 UART。

    此致、
    反叛分子