Stm32f407 Uart Dma Multiple Array Tx



我试图将Buffer从stm32f407发送到终端。类型为uint8_t,数组为15000。我的代码是有效的。但当我尝试发送2个缓冲区(如5000数组(时,第二个缓冲区出现了问题。我使用正常模式。我应该怎么做才能成功发送?

/* USART3 DMA Init */
/* USART3_TX Init */
hdma_usart3_tx.Instance = DMA1_Stream3;
hdma_usart3_tx.Init.Channel = DMA_CHANNEL_4;
hdma_usart3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_usart3_tx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_usart3_tx.Init.MemInc = DMA_MINC_ENABLE;
hdma_usart3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_usart3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_usart3_tx.Init.Mode = DMA_NORMAL;
hdma_usart3_tx.Init.Priority = DMA_PRIORITY_VERY_HIGH;
hdma_usart3_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma_usart3_tx) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(huart,hdmatx,hdma_usart3_tx);
/* USART3 interrupt Init */
HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART3_IRQn);

/*用户代码开始USART3_MspUnit 1*/

/*用户代码结束USART3_MspUnit 1*/

void Send_Dataa(void) 

HAL_UART_Transmit_DMA(wifi_uart, buf1, 5000);
HAL_UART_Transmit_DMA(wifi_uart, buf2, 5000);

}

如果您检查HAL_UART_Transmit_DMA((的返回代码,您可能会看到它正在返回HAL_BUSY。(请注意,您应该始终检查HAL函数的返回代码。(

在开始第二次传输之前,您需要等待第一次传输完成。您可以使用HAL_UART_GetState((来监视UART的状态。

HAL不会将多个DMA请求链接在一起。

最新更新