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

smt32h5 gpdma LL库无法初始化?

[复制链接]
ROYIOU 提问时间:2025-9-7 16:42 / 未解决

配置使用链表配置gpdma,USEF一直置1。SDR、ADR(源、目的地址)寄存器为空。是我哪里少配置了吗?代码如下:

LL_DMA_InitLinkedListTypeDef DMA_InitLinkedListStruct = {0};

/ Peripheral clock enable / LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPDMA1);

/ GPDMA1 interrupt Init / NVIC_SetPriority(GPDMA1_Channel0_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0)); NVIC_EnableIRQ(GPDMA1_Channel0_IRQn);

/ USER CODE BEGIN GPDMA1_Init 1 /

/ USER CODE END GPDMA1_Init 1 /

/ USER CODE BEGIN GPDMA1_Init 2 /

LL_DMA_InitNodeTypeDef node = {0};

/ LLI0:完整配置,写入 Buffer A /

node.Request = LL_GPDMA1_REQUEST_SPI1_RX; node.Direction = LL_DMA_DIRECTION_PERIPH_TO_MEMORY; node.SrcAddress = (uint32_t)&SPI1->RXDR; node.DestAddress = (uint32_t)ADC_Buf1; node.BlkDataLength = Buf_Size * 2U; node.SrcDataWidth = LL_DMA_SRC_DATAWIDTH_HALFWORD; node.DestDataWidth = LL_DMA_DEST_DATAWIDTH_HALFWORD; node.SrcIncMode = LL_DMA_SRC_FIXED; node.DestIncMode = LL_DMA_DEST_INCREMENT; node.UpdateRegisters = LL_DMA_UPDATE_CTR1|LL_DMA_UPDATE_CTR2|LL_DMA_UPDATE_CSAR|LL_DMA_UPDATE_CDAR; node.NodeType = LL_DMA_GPDMA_LINEAR_NODE;

node.SrcAllocatedPort = LL_DMA_SRC_ALLOCATED_PORT0; node.DestAllocatedPort = LL_DMA_DEST_ALLOCATED_PORT1; node.SrcBurstLength = 2; node.DestBurstLength = 2; node.BlkHWRequest = LL_DMA_HWREQUEST_SINGLEBURST; node.TransferEventMode = LL_DMA_TCEM_BLK_TRANSFER;

node.UpdateRegisters = LL_DMA_UPDATE_CTR1 | LL_DMA_UPDATE_CTR2 | LL_DMA_UPDATE_CSAR | LL_DMA_UPDATE_CDAR; node.NodeType = LL_DMA_GPDMA_LINEAR_NODE;

LL_DMA_CreateLinkNode(&node, &LLI0);

/ LLI1:仅重设 DestAddress 指向 Buffer B / // node.SrcAddress = (uint32_t)&SPI1->RXDR; node.DestAddress = (uint32_t)ADC_Buf2; node.BlkDataLength = Buf_Size; LL_DMA_CreateLinkNode(&node, &LLI1);

/ 链表连接:LLI0 -> LLI1 -> LLI0 / LL_DMA_ConnectLinkNode(&LLI0, LL_DMA_CLLR_OFFSET1, &LLI1, LL_DMA_CLLR_OFFSET1); LL_DMA_ConnectLinkNode(&LLI1, LL_DMA_CLLR_OFFSET1, &LLI0, LL_DMA_CLLR_OFFSET1);

/ 设置链表基地址 & 初始化通道 / LL_DMA_SetLinkedListBaseAddr(GPDMA1, LL_DMA_CHANNEL_0, (uint32_t)&LLI0);

DMA_InitLinkedListStruct.Priority = LL_DMA_HIGH_PRIORITY; DMA_InitLinkedListStruct.LinkStepMode = LL_DMA_LSM_1LINK_EXECUTION; DMA_InitLinkedListStruct.LinkAllocatedPort = LL_DMA_LINK_ALLOCATED_PORT0; DMA_InitLinkedListStruct.TransferEventMode = LL_DMA_TCEM_LAST_LLITEM_TRANSFER; LL_DMA_List_Init(GPDMA1, LL_DMA_CHANNEL_0, &DMA_InitLinkedListStruct);

/ 开启 Half-Transfer 和 Transfer-Complete 事件 / LL_DMA_EnableIT_HT(GPDMA1, LL_DMA_CHANNEL_0); LL_DMA_EnableIT_TC(GPDMA1, LL_DMA_CHANNEL_0);

/ 启用 DMA 通道 / LL_DMA_EnableChannel(GPDMA1, LL_DMA_CHANNEL_0);

/ 启用外设 DMA 请求并启动外设(如 ADC) / LL_SPI_EnableDMAReq_RX(SPI1); LL_SPI_Enable(SPI1);

收藏 评论1 发布时间:2025-9-7 16:42

举报

1个回答
butterflyspring 回答时间:5 小时前
LL库偏向底层,有很多逻辑未必能注意到。芯片功能也很强大。

因此有小伙伴认为先用HAL 库做好初始化,
简单调一下然后再对比和调整LL库。
这样就很容易成功。

所属标签

相似问题

官网相关资源

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