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 NORTOS下串口接收问题

Other Parts Discussed in Thread: CC1310

目前项目在使用CC1310的串口接收时,发现在接收过程中,在本次接收完成进入callback函数后,如果在下次串口数据到再来前,没有调用到UART_read函数,则后续在进行UART_read后,收到的数据相对于给UART_read函数的Rx Buffer参数的位置已经偏移了32Byte,而且一直如此,无法再恢复过来。

1. 目前串口使用的callback模式,每次固定接收64字节;

2. 看UART_read函数介绍,是不能在它的callback函数内调用的,所以在本次接收完成后,需要轮询到主流程中才能再次调用UART_read进行接收,如果其他流程耗时较久,而串口数据又来得快,就很容易发生这种问题。

针对CC1310的串口问题,想咨询一下,

1. 有没有其他好的调用接口,可以接收不定长度的数据,目前使用call back模式只能每次接收固定长度,这是十分不方便;

2. 在callback模式中,如果本次接收完成进入callback函数后,不再调用UART_read函数,对于到来的串口数据CC1310是怎么处理的。

3. 串口接收数据错位的问题跟定义的ringbuffer有关吗,这个ringbuffer是在哪里使用,怎么使用。

如上,感谢!

  • 使用

    dma或者中断。

  • 可以看一下这边的讨论:e2e.ti.com/.../611339
  • xd z 说:

    2. 看UART_read函数介绍,是不能在它的callback函数内调用的,所以在本次接收完成后,需要轮询到主流程中才能再次调用UART_read进行接收,如果其他流程耗时较久,而串口数据又来得快,就很容易发生这种问题。

    ——这个看其他文档的描述,callback中是可以调用UART_read函数的。

    针对CC1310的串口问题,想咨询一下,

    1. 有没有其他好的调用接口,可以接收不定长度的数据,目前使用call back模式只能每次接收固定长度,这是十分不方便;

    ——部分接收的问题,callback模式下在调用UART_read后,再调用如下函数即可使能部分接收,达到不定长接收的功能;

    // Enable RETURN_PARTIAL
    UART_control(_uartHandle, UARTCC26XX_CMD_RETURN_PARTIAL_ENABLE, NULL);

    调用该函数接口就相当于使能了串口的IDLE中断;

    2. 在callback模式中,如果本次接收完成进入callback函数后,不再调用UART_read函数,对于到来的串口数据CC1310是怎么处理的。

    ——Uart callback后(即本次接收完成后)即便不再调用UART_read函数,CC1310仍然在read模式下接收串口数据,直达它内部的buffer被填满,等待用户调用UART_read函数将数据取走。内部buffer应该跟CC1310_LAUNCHXL.c文件中定义的串口的ringbuffer相关,具体的情况我也没有去弄清楚;

    3. 串口接收数据错位的问题跟定义的ringbuffer有关吗,这个ringbuffer是在哪里使用,怎么使用。

    ——这个目前看起来是的,如果串口接收的数据没有及时被UART_read取走,就会经常出现这种问题,解决的办法就是在callback函数中调用UART_read函数【虽然TI的函数注释上有警告不要在自己的callback函数中调用UART_read,但是看TI的关于串口函数的说明(下面贴链接)里面,这样调用是安全的。】

    另外串口接口使用中有个值得注意的地方:UART_close和UART_readCancel函数的调用都会导致进入其callback函数,所以不要在callback函数中调用这两个函数。