|
配置使用链表配置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); |
STM32G030死机问题
stm32cubeMx生成stm32H743IIT6 cmake工程时全局变量自动定义到DTCM段
CubeMX 生成的 STM32H7 CMake 工程打开串口 DMA 无法正常发送数据,如何解决?
STM32G431 用MCSDK5.4.8 进行PMSM永磁同步电机FOC控制,转速上升到某一值(3500rpm)无法继续上升,上不去
stm32H723 tim23和tim24 中间对齐模式无效
SDIO读取TF卡,1bit模式正常,4bit模式无法读取
stm32H723 tim23和tim24是不是不支持中间对齐模式?
Cubemx的外部低速时钟已激活但时钟树中HSI无法选择
在stm32cubeAI上,打开Lanuch NeuralNet Studio提示打不开
STM32CUBEMX生成代码格式问题
微信公众号
手机版
因此有小伙伴认为先用HAL 库做好初始化,
简单调一下然后再对比和调整LL库。
这样就很容易成功。