OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4972|回复: 2

H743DMA问题,while一直查询导致dma接收异常

[复制链接]

13

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2015-1-16
在线时间
11 小时
发表于 2021-1-14 11:32:18 | 显示全部楼层 |阅读模式
1金钱
使用H743的串口4的DMA,在while里面一直查询DMA的状态,并且若DMA的数据改变,就将改变的数据读取出来,但是遇到情况是一直查询的话会导致DMA接不到数据,有解决方案吗?
配置如下
  /* USER CODE BEGIN UART4_Init 0 */

  /* USER CODE END UART4_Init 0 */

  /* USER CODE BEGIN UART4_Init 1 */

  /* USER CODE END UART4_Init 1 */
  huart4.Instance = UART4;
  huart4.Init.BaudRate = bound;
  huart4.Init.WordLength = UART_WORDLENGTH_8B;
  huart4.Init.StopBits = UART_STOPBITS_1;
  huart4.Init.Parity = UART_PARITY_NONE;
  huart4.Init.Mode = UART_MODE_TX_RX;
  huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
        HAL_UART_Init(&huart4);                                            //HAL_UART_Init()会使能UART1
        //__HAL_UART_ENABLE_IT(&UART2_Handler, UART_IT_RXNE);        //使能接收中断
       
//  huart4.Init.OverSampling = UART_OVERSAMPLING_16;
//  huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
//  huart4.Init.ClockPrescaler = UART_PRESCALER_DIV1;
//  huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
//  HAL_UART_Init(&huart4);
//  {
//    Error_Handler();
//  }
//  if (HAL_UARTEx_SetTxFifoThreshold(&huart4, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
//  {
//    Error_Handler();
//  }
//  if (HAL_UARTEx_SetRxFifoThreshold(&huart4, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
//  {
//    Error_Handler();
//  }
//  if (HAL_UARTEx_DisableFifoMode(&huart4) != HAL_OK)
//  {
//    Error_Handler();
//  }
  /* USER CODE BEGIN UART4_Init 2 */

  /* USER CODE END UART4_Init 2 */
       
          /* UART4 DMA Init */
    /* UART4_RX Init */
    hdma_uart4_rx.Instance = DMA1_Stream0;
    hdma_uart4_rx.Init.Request = DMA_REQUEST_UART4_RX;
    hdma_uart4_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
    hdma_uart4_rx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_uart4_rx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_uart4_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;//外设数据长度:8位
                hdma_uart4_rx.Init.MemDataAlignment=DMA_MDATAALIGN_BYTE;       //存储器数据长度:8位
    hdma_uart4_rx.Init.Mode = DMA_CIRCULAR;
    hdma_uart4_rx.Init.Priority = DMA_PRIORITY_HIGH;
    hdma_uart4_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
    if (HAL_DMA_Init(&hdma_uart4_rx) != HAL_OK)
    {
//      Error_Handler();
    }

    __HAL_LINKDMA(&huart4,hdmarx,hdma_uart4_rx);
#if(USART4_RX_DMA == 1)
    if (HAL_UART_Receive_DMA(&huart4, (uint8_t *)uart4_dma_rx_buffer, UART4_DMA_LEN) != HAL_OK)
    {
//        _Error_Handler(NULL, NULL);
    }


读取如下
                                                process_num =DMA1_Stream0->NDTR;
//                                               
                                                if(flagjiexi!=UART4_DMA_LEN-process_num)
                                                {
                                                        ubx_c[0] = uart4_dma_rx_buffer[flagjiexi];
//                                                                                                HAL_UART_Transmit(&huart4,ubx_c,1,1000);        //发送接收到的数据
//                                                                                        while(__HAL_UART_GET_FLAG(&huart4,UART_FLAG_TC)!=SET);               
                                                                                flagjiexi++;
                                                        if(flagjiexi>=UART4_DMA_LEN)
                                                        {
                                                                flagjiexi=0;
                                                       
                                                        }
                                               
                                                }




在while里面访问uart4_dma_rx_buffer会导致uart4_dma_rx_buffer数据接收不正常,有知道咋回事吗

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2021-1-15 02:39:36 | 显示全部楼层
看看是不是cache的问题?禁用d cache看看?
回复

使用道具 举报

13

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2015-1-16
在线时间
11 小时
 楼主| 发表于 2021-2-2 21:00:37 | 显示全部楼层
正点原子 发表于 2021-1-15 02:39
看看是不是cache的问题?禁用d cache看看?

禁用过了,还是有问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-14 03:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表