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.

CC2530使用Z-Stack Home 1.2.0协议栈,串口数据错乱问题

Other Parts Discussed in Thread: Z-STACK, CC2538, CC2530

求高手指点迷津!
在使用  Z-Stack Home 1.2.0--2530协议栈定义串口功能时,经常出现串口打印乱码,

搞了好久了都不知道是怎么回事。

在Option的定义如下:

FEATURE_GREEN_POWER

SECURE=0
xTC_LINKKEY_JOIN
xNV_INIT
NV_RESTORE
xPOWER_SAVING
NWK_AUTO_POLL
xHOLD_AUTO_START
xZTOOL_P1
MT_TASK
MT_APP_FUNC
MT_SYS_FUNC
MT_ZDO_FUNC
xLCD_SUPPORTED=DEBUG
ZCL_READ
ZCL_WRITE
ZCL_REPORT
xZCL_EZMODE
ZCL_BASIC
xZCL_IDENTIFY
ZCL_DOORLOCK
ZCL_SCENES
ZCL_GROUPS
xHAL_UART_DMA
HAL_UART=TRUE
xHAL_DMA=0


由于工程问题:本工程是与CC2538通信的,,我尝试过去掉MT_TASK定义,但是编译就会出错,在编译过程中我曾多次想用选择中断方式处理串口数据,但是却一直编译不过,所以一直在DMA模式下工作,并一直出现串口打印乱码。


在多次调用MT_UART层代码测试还是出现问题的情况下,添加了下面部分代码也是同样出错:

void rxCB( uint8 port, uint8 event )
{

// extern uint8 SampleApp_TaskID;
unsigned char flag=0;
uint16 j=0;
rxlen=Hal_UART_RxBufLen(0);
while (Hal_UART_RxBufLen(0)) //检测串口数据是否接收完成
{
HalUARTRead (0,&bflds[j], 1); //把数据接收放到buf中
j++; //记录字符数
flag=1; //已经从串口接收到信息
}
if(flag)
{
flag=0;
HalUARTWrite( 0, &bflds[0], j);
osal_memcpy(&bflds[0],0,j);
j=0;
}
}

void Tq_uartInit(void)
{
halUARTCfg_t uartConfig;

/* UART Configuration */
uartConfig.configured = TRUE;
uartConfig.baudRate = MT_UART_DEFAULT_BAUDRATE;
uartConfig.flowControl = FALSE;
uartConfig.flowControlThreshold = MT_UART_DEFAULT_THRESHOLD;
uartConfig.rx.maxBufSize = MT_UART_DEFAULT_MAX_RX_BUFF;
uartConfig.tx.maxBufSize = MT_UART_DEFAULT_MAX_TX_BUFF;
uartConfig.idleTimeout = MT_UART_DEFAULT_IDLE_TIMEOUT;
uartConfig.intEnable = TRUE;

uartConfig.callBackFunc = rxCB;

HalUARTOpen (0, &uartConfig);
}

总结:求高手百忙中抽空看下是什么原因,帮忙解决下问题,感激不尽!羊年大吉!

  • @Jack,

    CC2530波特率设的多少?

    你是用CC2538和CC2530串口通信吗?

  • 115200,用2538的例程就不会出现此种问题。

  • 用的是2530,

  • 以下是我zstack home 1.2.1下串口的配置,流控关闭,

    我之前也有出现乱码的情况,在禁用MT层的所有代码后就不会了,希望对你有帮助

    /* UART Configuration */
    uartConfig.configured = TRUE;
    uartConfig.baudRate = HAL_UART_BR_115200;
    uartConfig.flowControl = FALSE;
    uartConfig.flowControlThreshold = 5;
    uartConfig.rx.maxBufSize = UART_MAX_RX_BUF_SIZE;
    uartConfig.tx.maxBufSize = UART_MAX_TX_BUF_SIZE;
    uartConfig.idleTimeout = 6;
    uartConfig.intEnable = TRUE;
    uartConfig.callBackFunc = UartProcessData;

    /* Start UART */
    HalUARTOpen (HAL_UART_PORT_0, &uartConfig);

  • 都试过了,只有将MT层的宏屏蔽才可以用,不知道是什么情况,还请大侠,帮忙解决下疑问!

    谢谢了!

  • 貌似是MT层在初始化之后会发一些log消息出来,所以造成乱码。

    貌似以前有看到输出过自己的短地址和父设备的短地址

x 出现错误。请重试或与管理员联系。