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.

CC2541串口问题



在调试串口通信时,如何判断串口接收数据已经完成?我在串口回调函数中加了一个osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_UART_TIMEOUT_EVT, UART_TIMEOUT );函数,当串口接收超时,就判断数据全部接收完,这样有问题么。还有从机和主机端连接后,我想从机端发个串口命令过去可以断开连接,断开连接具体是调用系统的哪个函数。

  • ethan,

    你是指你指定的一个包发送完成吧?

    最好的方法,是你给每个包都定义一个包头和包位,或者包长,通过这些来判断。这是通用做法。

    断开连接,你可以通过 调用 GAPRole_TerminateConnection() 来实现。

  • 我的问题是如何判断一个包接收完成,如果是透明传输不加格式,最好怎样处理呢

  • ethan,

    我说的是一个意思:)

    一般的串口通信,双方都会约好一个协议,比如说包的格式,其中包括包头,包尾,包的长度等,接收方可以根据这些来判断包是否收完了。

  • Hi ethan:

        不加格式也可以,一个一个发送咯,这样会很慢,链路层开销也大。相信你不会接受的。

    我也建议你规定一桢数据的格式来传输,通过超时判断也不是不可行,只是有些小缺点:

    1.每次收到数据都要清除上一次启动的定时器(程序开销);

    2.每次收到数据都要重新设置一次定时器(程序开销);

    3.你用超时来结束数据接收,超时的等待本身就会造成你数据发送的延迟。

  • 和普通51一样,用中断接收。