Showing results for 
Search instead for 
Did you mean: 

Configuring STM32U575 for I2C DMA transfer


I am working through a workshop tutorial on how to configure and use GPDMA transfers via the linked list functionality provided in STM32CUBEMX. When setting the linked list runtime configuration a Source Address, Destination Address and Data size are specified. In the case of the workshop examples configurations are made for a read from the ADC data register to a user defined buffer named "data" (Source Address: (uint32_t)&(ADC1->DR), Destination Address: data, Data Size: (64*2)) and then subsequently a read from data to the USART transmit data register (Source Address: data, Destination Address: (uint32_t)&(USART1->TDR), Data Size:(64*2)). 

I would like to apply the learnings from the workshop to configure an I2C read to a slave device with address 0xBB using a circular linked list. Do I define the source address to be the I2C channel's receive register (i.e. Source Address: (uint32_t)&(I2C1->RXDR)) if so do I need to initiate a separate I2C read with the select slave address independent of the peripheral to memory DMA transfer in software prior to reading the register? If so what function should be used, it seems as though using HAL_I2C_MEM_READ_DMA() would make using the linked list redundant as the function will read the data from the receive register to a user defined data buffer.  Perhaps I2C_RequestMemoryRead()? 


I have combed through all of the HAL STM32U5 Drivers and GPDMA documentation that STM32 offers as well as examples on the github but I cannot seem to find an answer to this  question.