|

楼主 |
发表于 2019-1-16 10:26:15
|
显示全部楼层
仔细阅读了HAL_UART_Receive_DMA函数,里面有条语句指明了回调函数huart->hdmarx->XferCpltCallback = UART_DMAReceiveCplt;
UART_DMAReceiveCplt最终就是串口接收完成回调函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
我的串口TX RX都是用的DMA,TX是Normal,RX是Circular,下面是我的处理函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
//方法一
memset(aTxBuffer,0,DMABUFF_SIZE);
memcpy(aTxBuffer,aRxBuffer,DMABUFF_SIZE);
HAL_UART_Transmit_DMA(huart,aTxBuffer, DMABUFF_SIZE);
memset(aRxBuffer,0,DMABUFF_SIZE);
//方法二
/*memset(aTxBuffer,0,DMABUFF_SIZE);
memcpy(aTxBuffer,aRxBuffer,DMABUFF_SIZE);
HAL_UART_Transmit(huart,aTxBuffer,DMABUFF_SIZE,0x0FFF);
memset(aRxBuffer,0,DMABUFF_SIZE);*/
}
方法一用DMA回传至上位机,只能传回一次数据。方法二用串口传输函数回传,上位机发一次,回传一次,是正常的。
高手能给我解惑一下吗,为什么方法一后面就不能回传了? |
|