一米阳光:
回复 Susan Yang:
都是128,这是我读长度的代码:
len= HalUARTRead( HAL_UART_PORT_0, pBuf, RX_BUF_LEN ); HalUARTWrite(0,&len,1);
一米阳光:
回复 Susan Yang:
都是128的,
#define MT_UART_TX_BUFF_MAX 128#define MT_UART_RX_BUFF_MAX 128
YUE ZHAO:
回复 一米阳光:
haluartread函数从串口读的数据怎么会有丢失,读不出完整的数据
xin dong:
RE: HalUARTRead(uint8 port, uint8 *buf, uint16 len)函数
1、可以从产生回调事件的原因查看:
#define HAL_UART_RX_FULL 0x01
#define HAL_UART_RX_ABOUT_FULL 0x02
#define HAL_UART_RX_TIMEOUT 0x04if (cnt >= HAL_UART_DMA_FULL)
{
evt = HAL_UART_RX_FULL;
}
else if (cnt >= HAL_UART_DMA_HIGH)
{
evt = HAL_UART_RX_ABOUT_FULL;
PxOUT |= HAL_UART_Px_RTS; // Disable Rx flow.(关闭了接收,瞬间感觉这里比较像)
}
else if (cnt && !dmaCfg.rxTick)
{
evt = HAL_UART_RX_TIMEOUT;
}2、分析
(1)既然读取不到128个字节,则不是HAL_UART_RX_FULL 事件(#define MT_UART_RX_BUFF_MAX 128)
(2)读取70个字节左右,有点像HAL_UART_RX_ABOUT_FULL 事件
#define HAL_UART_DMA_HIGH MT_UART_DEFAULT_THRESHOLD
#define MT_UART_THRESHOLD (MT_UART_RX_BUFF_MAX / 2)
(3)超时事件:超时时间是多少呢?6ms左右,如果两个字节的时间差 > 6ms,则一帧数据接收完成
dmaCfg.rxTick = HAL_UART_DMA_IDLE;
#define HAL_UART_DMA_IDLE (MT_UART_DEFAULT_IDLE_TIMEOUT * HAL_UART_MSECS_TO_TICKS)
#define MT_UART_IDLE_TIMEOUT 6
// The timeout tick is at 32-kHz, so multiply msecs by 33.
#define HAL_UART_MSECS_TO_TICKS 33符合HAL_UART_RX_ABOUT_FULL
个人分析,是否正确?