现在发现个现象,如果两个字节之间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和处理。