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

stm32u575 gpdma burst length=1 配置其他数值不工作

[复制链接]
fighter 提问时间:2026-1-25 22:08 / 未解决


stm32u575 gpdma burst length配置为8 定时器update触发fmc操作外部adc芯片ads8588不成功,根本不触发,burst length配置为1能触发但是单次触发

跪求大神指点,感激涕零!我需要burst功能一次timeupdate 触发8次dma操作搬运8路adc数据到内存,谢谢!

配置及其代码如下:



    __HAL_RCC_TIM3_CLK_ENABLE();

    /* TIM3 DMA Init */
    /* GPDMA1_REQUEST_TIM3_UP Init */
    handle_GPDMA1_Channel13.Instance = GPDMA1_Channel13;
    handle_GPDMA1_Channel13.Init.Request = GPDMA1_REQUEST_TIM3_UP;
    handle_GPDMA1_Channel13.Init.BlkHWRequest = DMA_BREQ_SINGLE_BURST;
    handle_GPDMA1_Channel13.Init.Direction = DMA_PERIPH_TO_MEMORY;
    handle_GPDMA1_Channel13.Init.SrcInc = DMA_SINC_FIXED;
    handle_GPDMA1_Channel13.Init.DestInc = DMA_DINC_INCREMENTED;
    handle_GPDMA1_Channel13.Init.SrcDataWidth = DMA_SRC_DATAWIDTH_HALFWORD;
    handle_GPDMA1_Channel13.Init.DestDataWidth = DMA_DEST_DATAWIDTH_HALFWORD;
    handle_GPDMA1_Channel13.Init.Priority = DMA_LOW_PRIORITY_HIGH_WEIGHT;
    handle_GPDMA1_Channel13.Init.SrcBurstLength = 8;
    handle_GPDMA1_Channel13.Init.DestBurstLength = 8;
    handle_GPDMA1_Channel13.Init.TransferAllocatedPort = DMA_SRC_ALLOCATED_PORT0|DMA_DEST_ALLOCATED_PORT0;
    handle_GPDMA1_Channel13.Init.TransferEventMode = DMA_TCEM_BLOCK_TRANSFER;
    handle_GPDMA1_Channel13.Init.Mode = DMA_NORMAL;
    if (HAL_DMA_Init(&handle_GPDMA1_Channel13) != HAL_OK)
    {
      Error_Handler();
    }

    __HAL_LINKDMA(htim_base, hdma[TIM_DMA_ID_UPDATE], handle_GPDMA1_Channel13);

    if (HAL_DMA_ConfigChannelAttributes(&handle_GPDMA1_Channel13, DMA_CHANNEL_NPRIV) != HAL_OK)
    {
      Error_Handler();
    }

    /* TIM3 interrupt Init */
    HAL_NVIC_SetPriority(TIM3_IRQn, 3, 0);
    HAL_NVIC_EnableIRQ(TIM3_IRQn);



void start_ads8588s_convert222(void)
{
        //1、开启pwm convert 开始转换
        __HAL_RCC_GPDMA1_CLK_ENABLE();        
        //HAL_TIM_Base_MspDeInit(&htim3);
        tim3_reinit();


        pwm_OutPut(); //PWM输出映射到io
      
                 
        HAL_TIM_Base_Start_IT(&htim3);

        if (HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4) != HAL_OK)
        {
                Error_Handler();
        }
        HAL_Delay(2);

        
        //2、使能DMA传输
        __HAL_DMA_ENABLE_IT(&handle_GPDMA1_Channel13, DMA_IT_TC);        
        __HAL_DMA_DISABLE_IT(&handle_GPDMA1_Channel13,DMA_IT_HT);
        /* 使能定时器中断  */
        __HAL_TIM_ENABLE_DMA(&htim3, TIM_DMA_UPDATE);
         

       __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE);
  

        //3、开始采集数据 操作FMC总线
        HAL_DMA_Start_IT(&handle_GPDMA1_Channel13, (u32)Bank1_BASE1, (u32)g_adcBuf, ADC_BUFSIZE);



}


上图的SrcBurstLength改为1  DestBurstLenth改为1  能单次触发 一但改为其他不行

谢谢
收藏 评论1 发布时间:2026-1-25 22:08

举报

1个回答
butterflyspring 回答时间:2026-1-26 17:59:09

如果是FMC接口的话,那么源地址应该是多个的吧,不应该是 “DMA_SINC_FIXED





关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版