TI中文支持网
TI专业的中文技术问题搜集分享网站

HalUARTRead(uint8 port, uint8 *buf, uint16 len)函数

 HalUARTRead(uint8 port, uint8 *buf, uint16 len) 理论不是最多能读128个字节吗,为什么我实际测的时候只能读进去70多个字节呢,哪位大神能帮我解答一下!
一米阳光:

回复 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 0x04

if (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

个人分析,是否正确?

赞(0)
未经允许不得转载:TI中文支持网 » HalUARTRead(uint8 port, uint8 *buf, uint16 len)函数
分享到: 更多 (0)