你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

UART_DMA问题

[复制链接]
hithfy 提问时间:2015-9-22 13:35 /
接收和发送,都采用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));
        }
  }
}

请问各位高手,这个现象是怎么回事啊?!
收藏 评论10 发布时间:2015-9-22 13:35

举报

10个回答
hithfy 回答时间:2015-9-22 17:39:57
自己顶一个!
水说。 回答时间:2015-10-4 22:42:23
此论坛不行啊
xiaoboxiaobo 回答时间:2015-10-5 23:56:09
没用过CUBE库。。
xiaoboxiaobo 回答时间:2015-10-5 23:57:42
用外设库,处理过DMA。个人感觉DMA适合干定时定量的活,这种接收完再发送,直接用串口的send和receive函数不就可以了。。。
hithfy 回答时间:2015-10-7 16:54:15
xiaoboxiaobo 发表于 2015-10-5 23:57
用外设库,处理过DMA。个人感觉DMA适合干定时定量的活,这种接收完再发送,直接用串口的send和receive函数 ...

解决了:一个字节一个字节接收;
           打开串口全局中断。
废鱼 回答时间:2015-10-8 16:21:04
发送时修改一下发送DMA空间,一般是DMA空间满以后才会产生DMA中断。
hithfy 回答时间:2015-10-9 08:33:16
安 发表于 2015-10-8 16:21
发送时修改一下发送DMA空间,一般是DMA空间满以后才会产生DMA中断。

嗯,谢谢!
木木鱼 回答时间:2015-10-10 22:30:14
顶一个!
hithfy 回答时间:2015-10-11 11:54:12

谢谢,希望能带出一些问题来让大家思考讨论哈
木木鱼 回答时间:2015-10-18 20:34:08
hithfy 发表于 2015-10-11 11:54
谢谢,希望能带出一些问题来让大家思考讨论哈

以后会慢慢带来的,现在还在学习中。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版