@@ -2996,21 +2996,6 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAdd
29962996
29972997 if (hi2c -> XferSize > 0U )
29982998 {
2999- /* Set the I2C DMA transfer complete callback */
3000- hi2c -> hdmatx -> XferCpltCallback = I2C_DMAXferCplt ;
3001-
3002- /* Set the DMA error callback */
3003- hi2c -> hdmatx -> XferErrorCallback = I2C_DMAError ;
3004-
3005- /* Set the unused DMA callbacks to NULL */
3006- hi2c -> hdmatx -> XferHalfCpltCallback = NULL ;
3007- hi2c -> hdmatx -> XferM1CpltCallback = NULL ;
3008- hi2c -> hdmatx -> XferM1HalfCpltCallback = NULL ;
3009- hi2c -> hdmatx -> XferAbortCallback = NULL ;
3010-
3011- /* Enable the DMA Stream */
3012- HAL_DMA_Start_IT (hi2c -> hdmatx , (uint32_t )hi2c -> pBuffPtr , (uint32_t )& hi2c -> Instance -> DR , hi2c -> XferSize );
3013-
30142999 /* Send Slave Address and Memory Address */
30153000 if (I2C_RequestMemoryWrite (hi2c , DevAddress , MemAddress , MemAddSize , I2C_TIMEOUT_FLAG , tickstart ) != HAL_OK )
30163001 {
@@ -3027,6 +3012,24 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAdd
30273012 return HAL_TIMEOUT ;
30283013 }
30293014 }
3015+
3016+ /* message from ea040a4f9ace1c50abc22ab755415305fd2bda41 */
3017+ /* dpgeorge: DMA initialisation is moved to after sending the address */
3018+
3019+ /* Set the I2C DMA transfer complete callback */
3020+ hi2c -> hdmatx -> XferCpltCallback = I2C_DMAXferCplt ;
3021+
3022+ /* Set the DMA error callback */
3023+ hi2c -> hdmatx -> XferErrorCallback = I2C_DMAError ;
3024+
3025+ /* Set the unused DMA callbacks to NULL */
3026+ hi2c -> hdmatx -> XferHalfCpltCallback = NULL ;
3027+ hi2c -> hdmatx -> XferM1CpltCallback = NULL ;
3028+ hi2c -> hdmatx -> XferM1HalfCpltCallback = NULL ;
3029+ hi2c -> hdmatx -> XferAbortCallback = NULL ;
3030+
3031+ /* Enable the DMA Stream */
3032+ HAL_DMA_Start_IT (hi2c -> hdmatx , (uint32_t )pData , (uint32_t )& hi2c -> Instance -> DR , Size );
30303033
30313034 /* Clear ADDR flag */
30323035 __HAL_I2C_CLEAR_ADDRFLAG (hi2c );
@@ -3118,21 +3121,6 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddr
31183121
31193122 if (hi2c -> XferSize > 0U )
31203123 {
3121- /* Set the I2C DMA transfer complete callback */
3122- hi2c -> hdmarx -> XferCpltCallback = I2C_DMAXferCplt ;
3123-
3124- /* Set the DMA error callback */
3125- hi2c -> hdmarx -> XferErrorCallback = I2C_DMAError ;
3126-
3127- /* Set the unused DMA callbacks to NULL */
3128- hi2c -> hdmarx -> XferHalfCpltCallback = NULL ;
3129- hi2c -> hdmarx -> XferM1CpltCallback = NULL ;
3130- hi2c -> hdmarx -> XferM1HalfCpltCallback = NULL ;
3131- hi2c -> hdmarx -> XferAbortCallback = NULL ;
3132-
3133- /* Enable the DMA Stream */
3134- HAL_DMA_Start_IT (hi2c -> hdmarx , (uint32_t )& hi2c -> Instance -> DR , (uint32_t )hi2c -> pBuffPtr , hi2c -> XferSize );
3135-
31363124 /* Send Slave Address and Memory Address */
31373125 if (I2C_RequestMemoryRead (hi2c , DevAddress , MemAddress , MemAddSize , I2C_TIMEOUT_FLAG , tickstart ) != HAL_OK )
31383126 {
@@ -3149,6 +3137,21 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddr
31493137 return HAL_TIMEOUT ;
31503138 }
31513139 }
3140+
3141+ /* Set the I2C DMA transfer complete callback */
3142+ hi2c -> hdmarx -> XferCpltCallback = I2C_DMAXferCplt ;
3143+
3144+ /* Set the DMA error callback */
3145+ hi2c -> hdmarx -> XferErrorCallback = I2C_DMAError ;
3146+
3147+ /* Set the unused DMA callbacks to NULL */
3148+ hi2c -> hdmarx -> XferHalfCpltCallback = NULL ;
3149+ hi2c -> hdmarx -> XferM1CpltCallback = NULL ;
3150+ hi2c -> hdmarx -> XferM1HalfCpltCallback = NULL ;
3151+ hi2c -> hdmarx -> XferAbortCallback = NULL ;
3152+
3153+ /* Enable the DMA Stream */
3154+ HAL_DMA_Start_IT (hi2c -> hdmarx , (uint32_t )& hi2c -> Instance -> DR , (uint32_t )pData , Size );
31523155
31533156 if (Size == 1U )
31543157 {
0 commit comments