UART DMA发送20个字节才收到4096个字节

2019-07-14 16:44发布

接收和发送,都采用DMA处理,实现串口一次发送4个字节(如aa bb cc ee)给MCU,将收到的这组数据再发给串口助手。但是以当每隔1s发送一组数据的方式时,在发送20个字节(5组数据)才收到4096个字节。主函数如下:
int main(void)
{

  HAL_Init();

  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART2_UART_Init();

  /* USER CODE BEGIN 2 */
    if(yy==1)
    {
      yy=2;
      HAL_UART_Receive_DMA(&huart2,fyRxData,sizeof(fyRxData));//
    }

  while (1)
  {
  if(TX_counter==H_CNT)
  {
          TX_counter=0;
          HAL_UART_DMAResume(&huart2);//Resumes the DMA Transfer of receive.
          HAL_Delay(1);
          HAL_UART_Receive_DMA(&huart2,fyRxData,sizeof(fyRxData));//
  }
   if(RX_counter==H_CNT)
        {   
          RX_counter=0;
          HAL_UART_DMAResume(&huart2);//Resumes the DMA Transfer of send.
          HAL_Delay(1);
          HAL_UART_Transmit_DMA(&huart2,fyTxData,sizeof(fyTxData));
        }
  }
}

请问各位高手,这个现象是怎么回事啊?!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
kdkashd
1楼-- · 2019-07-14 23:29
此论坛不行啊
tonychow80
2楼-- · 2019-07-15 00:24
 精彩回答 2  元偷偷看……
tonychow80
3楼-- · 2019-07-15 03:11
用外设库,处理过DMA。个人感觉DMA适合干定时定量的活,这种接收完再发送,直接用串口的send和receive函数不就可以了。。。
wanyou2345
4楼-- · 2019-07-15 06:53
tonychow80 发表于 2018-10-22 18:13
用外设库,处理过DMA。个人感觉DMA适合干定时定量的活,这种接收完再发送,直接用串口的send和receive函数不就可以了。。。

解决了:一个字节一个字节接收;
           打开串口全局中断。
TOPCB
5楼-- · 2019-07-15 07:06
发送时修改一下发送DMA空间,一般是DMA空间满以后才会产生DMA中断。
wanyou2345
6楼-- · 2019-07-15 10:30
TOPCB 发表于 2018-10-22 18:46
发送时修改一下发送DMA空间,一般是DMA空间满以后才会产生DMA中断。

嗯,谢谢!

一周热门 更多>