CC2530使用Z-Stack Home 1.2.0协议栈,串口数据错乱问题
求高手指点迷津!
在使用 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消息出来,所以造成乱码。
貌似以前有看到输出过自己的短地址和父设备的短地址