Skip to main content
Explorer
May 21, 2024
Solved

CubeIDE linked list code generation error

  • May 21, 2024
  • 1 reply
  • 1608 views

Hi all,

I'm using STM32Cube IDE (version 1.15.1 Build: 21094_20240412_1041 (UTC)) and have the STM32H573 chip with the LinkedList feature.

Unfortunately the code generation of the linked list does not work properly and forgets to set some config settings.

The LinkedList is a List with 3 nodes.

My third node is a 2D sorting node which should be set to:

joker_0-1716281151165.png

But these lines are missing:

pNodeConfig.Init.SrcInc = DMA_SINC_INCREMENTED;
pNodeConfig.Init.SrcDataWidth = DMA_SRC_DATAWIDTH_HALFWORD;
pNodeConfig.Init.DestDataWidth = DMA_DEST_DATAWIDTH_HALFWORD;

The generated code looks like this:

HAL_StatusTypeDef ret = HAL_OK;

/* DMA node configuration declaration */
DMA_NodeConfTypeDef pNodeConfig;


/* Set node configuration ################################################*/
pNodeConfig.NodeType = DMA_GPDMA_2D_NODE;
pNodeConfig.Init.Request = GPDMA1_REQUEST_SPI1_RX;
pNodeConfig.Init.BlkHWRequest = DMA_BREQ_SINGLE_BURST;
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_HALFWORD;
pNodeConfig.Init.DestDataWidth = DMA_DEST_DATAWIDTH_HALFWORD;
pNodeConfig.Init.SrcBurstLength = 1;
pNodeConfig.Init.DestBurstLength = 1;
pNodeConfig.Init.TransferAllocatedPort = DMA_SRC_ALLOCATED_PORT0|DMA_DEST_ALLOCATED_PORT0;
pNodeConfig.Init.TransferEventMode = DMA_TCEM_LAST_LL_ITEM_TRANSFER;
pNodeConfig.Init.Mode = DMA_NORMAL;
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 = (uint32_t)&(SPI1->RXDR);
pNodeConfig.DstAddress = spi_adc_data_raw;
pNodeConfig.DataSize = 5*2*100;



/* Build SPI_node Node */
ret |= HAL_DMAEx_List_BuildNode(&pNodeConfig, &SPI_node);


/* Insert SPI_node to Queue */
ret |= HAL_DMAEx_List_InsertNode_Tail(&ADC_queue, &SPI_node);


/* Set node configuration ################################################*/
pNodeConfig.Init.Request = DMA_REQUEST_SW;
pNodeConfig.Init.Direction = DMA_MEMORY_TO_MEMORY;
pNodeConfig.Init.DestInc = DMA_DINC_FIXED;
pNodeConfig.Init.SrcDataWidth = DMA_SRC_DATAWIDTH_WORD;
pNodeConfig.Init.DestDataWidth = DMA_DEST_DATAWIDTH_WORD;
pNodeConfig.SrcAddress = (uint32_t) &TIM1_CR1_CEN_disable;
pNodeConfig.DstAddress = (uint32_t) &(TIM1->CR1);
pNodeConfig.DataSize = 4;


/* Build TIM1_STOP_node1 Node */
ret |= HAL_DMAEx_List_BuildNode(&pNodeConfig, &TIM1_STOP_node1);

/* Insert TIM1_STOP_node1 to Queue */
ret |= HAL_DMAEx_List_InsertNode_Tail(&ADC_queue, &TIM1_STOP_node1);


/* Set node configuration ################################################*/
pNodeConfig.Init.SrcInc = DMA_SINC_INCREMENTED;
pNodeConfig.Init.TransferEventMode = DMA_TCEM_BLOCK_TRANSFER;
pNodeConfig.RepeatBlockConfig.RepeatCount = 100;
pNodeConfig.RepeatBlockConfig.DestAddrOffset = 200-2;
pNodeConfig.RepeatBlockConfig.BlkDestAddrOffset = -1000+2;
pNodeConfig.SrcAddress = spi_adc_data_raw;
pNodeConfig.DstAddress = spi_adc_data_sorted_raw1;
pNodeConfig.DataSize = 5*2;

/* Build Sorting2D_node Node */
ret |= HAL_DMAEx_List_BuildNode(&pNodeConfig, &Sorting2D_node);

/* Insert Sorting2D_node to Queue */
ret |= HAL_DMAEx_List_InsertNode_Tail(&ADC_queue, &Sorting2D_node);

 

It seems like the second node overwrites it and the third node doesn't.

 

Am I missing something or is it a code generation problem?

Thanks in advance for any insights.

    This topic has been closed for replies.
    Best answer by Imen.D

    Hello @joker and welcome to the Community :)

    Thank you for having reported this point.

    I confirm this issue and submit an internal ticket (number 181922) in order to fix this.

    Thank you for your contribution.

    1 reply

    Imen.DBest answer
    Technical Moderator
    May 21, 2024

    Hello @joker and welcome to the Community :)

    Thank you for having reported this point.

    I confirm this issue and submit an internal ticket (number 181922) in order to fix this.

    Thank you for your contribution.

    In order to give better visibility on the answered topics, please click on 'Best answer' on the reply which solved your issue or answered your question. Thanks