微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > CC1350(CC1310)串口通讯的问题

CC1350(CC1310)串口通讯的问题

时间:12-23 整理:3721RD 点击:

Hello:

最近在做CC1310低功耗的产品,调试串口时出现了问题,串口将接收的数据打印出来,使用串口工具自动发送,每帧数据大小为14字节,接收缓冲区足够大,不会溢出,硬件为TI提供的CC1350 LaunchPad(CC1310和CC1350的软件设计一样)

串口发送的速率为100ms时,发送450~700左右帧数据时,串口不工作了;串口发送的速率为300ms时,发送350左右帧数据时,串口不工作了;发送数速率为1000ms时,发送2000多帧数据时,串口不工作了;

在线仿真时,运行逻辑是对的,复位之后模块又重新开始工作了,串口停止工作之后如果不复位则会一直处于这种状态;以下是测试代码(不能上传附件,文件在公司会被加密的)

static UART_Handle uart = NULL;
uint8_t buf[256];

// 硬件资源初始化
int uart_init(uint8_t baudIndex)
{
static const uint32_t baudRateTable[] = {
4800,9600,19200,38400,57600,115200
};
UART_init();
UART_Params uartParams;
UART_Params_init(&uartParams);
uartParams.baudRate = baudRateTable[baudIndex];
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_RETURN_FULL;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.readTimeout = 20*1000ul/Clock_tickPeriod;
uart = UART_open(UART_BASE, &uartParams);
if(!uart){
return -1;
}
return 0;
}

void uart_task_function(UArg arg0, UArg arg1)
{
int_fast32_t ret = -1;
uint8_t index = 0;
uint8_t rx_busy = 0;

while(1)
{
ret = UART_read(uart,buf + index,1);
if(1 == ret)
{
if(index ++ >= 255){
index = 0;
}
rx_busy = 1;
}
else
{
if(rx_busy)
{
rx_busy = 0;
UART_write(uart,buf,index);
index = 0;
}
}
}
}

除了上述串口工作一段时间侯异常之外,还有几个问题

1、串口死机的与uartParams.readTimeout 设置的值有关,设置比较小时,很容易就死机了,请问这个参数一般设置多少合适?

2、目前在使用CC1310做低功耗的产品,需要串口中断唤醒,该怎么处理?是否有相应的范例可供参考

UART口的代码可以参考例程:

C:\ti\simplelink_cc13x0_sdk_1_50_00_08\examples\rtos\CC1310_LAUNCHXL\drivers\uartecho

CC1310进入休眠状态的时候,可以通过GPIO口唤醒,在进入休眠之前将IO口配成GPIO,然后在主机端发送0x55就可以唤醒

第二个问题解决了了,但是串口的问题还是会卡死;使用阻塞的方式读数据,对那些未知长度的数据不好处理

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top