1.请问下面的flowControlThreshold 是什么意思?idleTimeout 是什么意思?
intEnable 设为FALSE是不是就是查询的方式了?
uartConfig.configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_4800;//HAL_UART_BR_9600;
uartConfig.flowControl = FALSE;
uartConfig.flowControlThreshold = 0;
uartConfig.rx.maxBufSize = 128;//默认128;
uartConfig.tx.maxBufSize = 128;//默认128;
uartConfig.idleTimeout = 6;//默认6
uartConfig.intEnable = FALSE; uartConfig.callBackFunc = uartRxCb;
HalUARTOpen (HAL_UART_PORT_0, &uartConfig);
2.串口处理函数能否用下面的方式?
方式1测了没啥问题,我这边串口只接收,40ms一帧数据,发现用下面方式2的时候会偶现死机现象
方式1这样的方式可行?方式2为什么会死机
我的处理是把缓存里的数据取出来再发出去,发现方式2有的时候发不出去
方式1:
void uartRxCb( uint8 port, uint8 event )
{ HalUARTRead(port,UartDataBuf,128); //把数据接收放到buf中}
方式2
void uartRxCb( uint8 port, uint8 event )
{
while(Hal_UART_RxBufLen(port))
{
HalUARTRead(port,&UartDataBuf[Head++],1); //把数据接收放到buf中
}
}
Susan Yang:
请问您现在使用的是什么芯片?软硬件情况是怎样的?
user5367314:
回复 Susan Yang:
2530zstack 3.0.2
Susan Yang:
1
#define MT_UART_TX_BUFF_MAX 128#define MT_UART_RX_BUFF_MAX 128#define MT_UART_THRESHOLD (MT_UART_RX_BUFF_MAX / 2)#define MT_UART_IDLE_TIMEOUT 6
主要是数据的流控.
采用Rx/Tx两根线的方式进行通信时必须关闭流控,否则不能发送信息.即需要将默认流控所对应的宏定义MT_UART_DEFAULT_OVERFLOW的值更改为FALSE
user5367314intEnable 设为FALSE是不是就是查询的方式了?
是的
2 方式1是可以的,方式2的话Hal_UART_RxBufLen()是检查Rx缓冲区中剩余的字节数。
您现在在使用方式2的时候Hal_UART_RxBufLen,返回值是多少?
Susan Yang:
回复 user5367314:
一般来说,在Z-Stack-3.0.2 CC2530作为Coordinator 时 RAM/Flash受限严重,建议更换为CC2652R或者CC2538。
另外您可以参考下面的文档进行调整
http://www.ti.com/lit/wp/swra635/swra635.pdf
user5367314:
回复 Susan Yang:
2530作为终端的,只是终端上要用2530的串口收发数据协调器是2538