数据包大于65小于128时,HalUARTRead该函数分三次读出数据,原因是在HalUARTReadDMA该函数中有这么一句
if (!HAL_UART_DMA_NEW_RX_BYTE(dmaCfg.rxHead))
{
break;
}
#define HAL_UART_DMA_NEW_RX_BYTE(IDX) (DMA_PAD == HI_UINT16(dmaCfg.rxBuf[(IDX)]))
当rxBuf中数据的高八位等于DMA_PAD时则表示有数据到来,则读出,否则退出。现在的现象是当数据量较大时,rxBuf不知道是DMA传输没来得及还是什么原因,并没有给rxBuf赋值,然后过一小段时间,再给rxBuf赋值。所以导致当我数据量过大时,小于128字节,数据分多次给我读出来,而不是一次性读完。而在协议栈中,我并没找到把DMA_PAD 赋值给rxBuf前八位的代码,这问题应该怎么解决?
VV:
static void HalUARTOpenDMA(halUARTCfg_t *config)
osal_memset(dmaCfg.rxBuf, (DMA_PAD ^ 0xFF), HAL_UART_DMA_RX_MAX*2);
JingYong Qu:
回复 VV:
不是这里吧,这里是把DMA_PAD取反,然后赋值给rxBuf,我想知道是在哪里直接把DMP_PAD直接赋值给rxBuf的。
我所描述的这个问题只有在低版本才会出现,高版本好像没这个现象得。