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

关于U575RI的GPDMA_LINKED_list模式的求助

[复制链接]
szyang 提问时间:2025-2-13 19:54 / 未解决

使用HAL_DCMI_Start_DMA(&g_dcmi_handle, DCMI_MODE_CONTINUOUS, (uint32_t)p_jpeg_data_buf, 15*1024*4);
启动后,只有链表1、2生效,链表3无报错但是无效

/**

* @brief  DMA Linked-list DCMIQueue configuration
* @param  None
* @retval None
  */
  HAL_StatusTypeDef MX_DCMIQueue_Config(void)
  {
  HAL_StatusTypeDef ret = HAL_OK;
  /* DMA node configuration declaration */
  DMA_NodeConfTypeDef pNodeConfig;

/* Set node configuration */
pNodeConfig.NodeType = DMA_GPDMA_LINEAR_NODE;//DMA_GPDMA_2D_NODE;//GPDMA二维寻址
pNodeConfig.Init.Request = GPDMA1_REQUEST_DCMI;
pNodeConfig.Init.BlkHWRequest = DMA_BREQ_SINGLE_BURST;//DMA传输硬件协议,单个传输或者块传输
pNodeConfig.Init.Direction = DMA_PERIPH_TO_MEMORY;//数据搬运方向,外设到内存
pNodeConfig.Init.SrcInc = DMA_SINC_FIXED;//外设地址非自增
pNodeConfig.Init.DestInc = DMA_DINC_INCREMENTED;//内存地址自增
pNodeConfig.Init.SrcDataWidth = DMA_SRC_DATAWIDTH_WORD;//32位
pNodeConfig.Init.DestDataWidth = DMA_DEST_DATAWIDTH_WORD;
pNodeConfig.Init.SrcBurstLength = 1;
pNodeConfig.Init.DestBurstLength = 1;
pNodeConfig.Init.TransferAllocatedPort = DMA_SRC_ALLOCATED_PORT0|DMA_DEST_ALLOCATED_PORT0;
pNodeConfig.Init.TransferEventMode = DMA_TCEM_EACH_LL_ITEM_TRANSFER;//DMA_TCEM_BLOCK_TRANSFER;//传输完成事件产生方式
pNodeConfig.RepeatBlockConfig.RepeatCount = 1;//通道重复次数
pNodeConfig.RepeatBlockConfig.SrcAddrOffset = 0;
pNodeConfig.RepeatBlockConfig.DestAddrOffset = 0;
pNodeConfig.RepeatBlockConfig.BlkSrcAddrOffset = 0;
pNodeConfig.RepeatBlockConfig.BlkDestAddrOffset = 0;
pNodeConfig.TriggerConfig.TriggerPolarity = DMA_TRIG_POLARITY_MASKED;//电平边沿,无
pNodeConfig.DataHandlingConfig.DataExchange = DMA_EXCHANGE_NONE;//不开启,字节序交换
pNodeConfig.DataHandlingConfig.DataAlignment = DMA_DATA_RIGHTALIGN_ZEROPADDED;//如果源的数据和目标内存数据宽度不一致,字节对齐的方式
pNodeConfig.SrcAddress = 0;
pNodeConfig.DstAddress = 0;
pNodeConfig.DataSize = 0;

/* Build DCMINode1 Node */
ret |= HAL_DMAEx_List_BuildNode(&pNodeConfig, &DCMINode1);
/* Insert DCMINode1 to Queue */
ret |= HAL_DMAEx_List_InsertNode_Tail(&DCMIQueue, &DCMINode1);

//        printf("DCMIQueue.State = %u \r\n", DCMIQueue.State);
//        printf("DCMIQueue.ErrorCode = %u \r\n", DCMIQueue.ErrorCode);
//        printf("DCMIQueue.NodeNumber = %u \r\n", DCMIQueue.NodeNumber);
/******************************************************************/
pNodeConfig.SrcAddress = (uint32_t)p_jpeg_data_buf + 15*1024*4*1;
pNodeConfig.DstAddress = (uint32_t)&g_dcmi_handle.Instance->DR;
pNodeConfig.DataSize = 15*1024*4;

/* Build DCMINode2 Node */
ret |= HAL_DMAEx_List_BuildNode(&pNodeConfig, &DCMINode2);
/* Insert DCMINode2 to Queue */
ret |= HAL_DMAEx_List_InsertNode_Tail(&DCMIQueue, &DCMINode2);
/******************************************************************/
pNodeConfig.SrcAddress = (uint32_t)p_jpeg_data_buf + 15*1024*4*2;
pNodeConfig.DstAddress = (uint32_t)&g_dcmi_handle.Instance->DR;
pNodeConfig.DataSize = 15*1024*4;

/* Build DCMINode3 Node */
ret |= HAL_DMAEx_List_BuildNode(&pNodeConfig, &DCMINode3);
/* Insert DCMINode3 to Queue */
ret |= HAL_DMAEx_List_InsertNode_Tail(&DCMIQueue, &DCMINode3);

ret |= HAL_DMAEx_List_SetCircularModeConfig(&DCMIQueue, &DCMINode1);//GPDMA链表开启循环模式
//printf("ret2 = %d \r\n", ret);//返回值是0,hal_ok
return ret;
}
收藏 评论0 发布时间:2025-2-13 19:54

举报

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