Stm32 HAL_UART_传输_DMA到达接收回调后未发送

Stm32 HAL_UART_传输_DMA到达接收回调后未发送,stm32,uart,hal,Stm32,Uart,Hal,我正在努力获得UART发送数据后,接收使用循环DMA接收和正常模式的TX 主要(无效) UART设置 static void MX_USART2_UART_Init(void) { huart2.Instance = USART2; huart2.Init.BaudRate = 9600; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.I

我正在努力获得UART发送数据后,接收使用循环DMA接收和正常模式的TX

主要(无效)

UART设置

static void MX_USART2_UART_Init(void)
{

  huart2.Instance = USART2;
  huart2.Init.BaudRate = 9600;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  huart2.Init.Parity = UART_PARITY_NONE;
  huart2.Init.Mode = UART_MODE_TX_RX;
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart2) != HAL_OK)
  {
    Error_Handler();
  }
}
接收回拨

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    ProcessSerialSettings();

    HAL_UART_Transmit_DMA(&huart2,(uint8_t *)'ACK\n',5);

    memset(rx_buff,0,sizeof(rx_buff));
}
我肯定我错过了一些东西,因为它看起来太简单了。毫无疑问,“processSerialSettings”函数每次都会更新一些变量,数据会继续进入设备。我想接收一个设置字符串,更新几个变量并返回一个确认

在进一步调试之后,我现在知道端口的状态是繁忙的,但是,当我没有通过TX线路发送任何内容时,怎么会出现这种情况呢?如果我将TX DMA模式更改为circular,它基本上会对串行端口进行垃圾邮件处理,直到我的终端窗口崩溃


谢谢

通过一起移除传输DMA并使用以下方式进行传输来解决此问题:

HAL_UART_传输(&huart2,(uint8_t*)确认\n',5)

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    ProcessSerialSettings();

    HAL_UART_Transmit_DMA(&huart2,(uint8_t *)'ACK\n',5);

    memset(rx_buff,0,sizeof(rx_buff));
}