TI中文支持网
TI专业的中文技术问题咨询交流网站

CC2640串口接收数据,每个字节的定时时间(超时)是多久?

现在发现个现象,如果两个字节之间500us左右,就不能被识别成1包数据,从而导致解析出错,在240us左右,是可以正常解析的。

CC2640串口接收数据,每个字节的定时时间(超时)是多久?

我想改成2ms,请问在哪里可以修改这个?

Kevin Qiu1:

看下C:/ti/simplelink_cc2640r2_sdk_4_30_00_08/docs/tidrivers/doxygen/html/_u_a_r_t_c_c26_x_x_8h.html
中的Use Cases

user6193948:

回复 Kevin Qiu1:

.readTimeout 这个成员是不是定时不准?
s_UART_Params.readTimeout= 5000000 / ClockP_tickPeriod;
我设置是 5s 读取超时。

int k = 0;
while (1){k = UART_read(s_UART_Handle, g_UART_RxBuf, 10);UART_write(s_UART_Handle, g_UART_RxBuf, k);}
为什么有时候快一两秒,有时候慢一两秒?

Kevin Qiu1:

回复 user6193948:

ClockP_tickPeriod是10us,可以到10us级,不会相差1秒

user6193948:

回复 Kevin Qiu1:

这个定时的先放一下。。
如果用.readMode = UART_MODE_CALLBACK;RX数据可以在 .readCallback = UART_ReadCallback中处理。
那我使用.readMode = UART_MODE_BLOCKING; RX数据可以在哪里处理?
是要新创建个UART Task才可以吗?

Kevin Qiu1:

回复 user6193948:

不用新建任务,参考例程C:\ti\simplelink_cc2640r2_sdk_4_30_00_08\examples\rtos\CC2640R2_LAUNCHXL\drivers\uartecho
就是阻塞模式

user6193948:

回复 Kevin Qiu1:

 你好,我把相关的逻辑放到代码里了。

但编译总是报错误。

c语言编译的时候,如果使用线程需要链接一个线程库,这里我是否需要链接?怎么链接?

Kevin Qiu1:

回复 user6193948:

oad例程中没有用到posix,你这是自己改的?

user6193948:

回复 Kevin Qiu1:

是的,因项目需要,所以把串口的接收方式UART_MODE_CALLBACK改成UART_MODE_BLOCKING,来控制每个字节之间的超时时间。

Kevin Qiu1:

回复 user6193948:

那不需要移植posix部分,只添加串口驱动就行了

user6193948:

回复 Kevin Qiu1:

你是说修改串口参数的配置吗?
UART_Params_init(&UART_Params);UART_Params.baudRate= 115200;UART_Params.readDataMode = UART_DATA_BINARY;UART_Params.writeDataMode = UART_DATA_BINARY;UART_Params.readReturnMode = UART_RETURN_NEWLINE;UART_Params.readTimeout= 5000 / ClockP_tickPeriod;

我已经改成这样了,然后问题就是RX收到数据后,我去哪里处理?
按上面的回复,我移植了posix部分,在这个串口线程里循环read和处理。

赞(0)
未经允许不得转载:TI中文支持网 » CC2640串口接收数据,每个字节的定时时间(超时)是多久?
分享到: 更多 (0)