@@ -762,6 +762,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
762762
763763      /* Update error code */ 
764764      hdma -> ErrorCode  |= HAL_DMA_ERROR_TE ;
765+ 
766+       /* Change the DMA state */ 
767+       hdma -> State  =  HAL_DMA_STATE_ERROR ; // FIX 
765768    }
766769  }
767770  /* FIFO Error Interrupt management ******************************************/ 
@@ -774,6 +777,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
774777
775778      /* Update error code */ 
776779      hdma -> ErrorCode  |= HAL_DMA_ERROR_FE ;
780+ 
781+       /* Change the DMA state */ 
782+       hdma -> State  =  HAL_DMA_STATE_ERROR ; // FIX 
777783    }
778784  }
779785  /* Direct Mode Error Interrupt management ***********************************/ 
@@ -786,6 +792,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
786792
787793      /* Update error code */ 
788794      hdma -> ErrorCode  |= HAL_DMA_ERROR_DME ;
795+ 
796+       /* Change the DMA state */ 
797+       hdma -> State  =  HAL_DMA_STATE_ERROR ; // FIX 
789798    }
790799  }
791800  /* Half Transfer Complete Interrupt management ******************************/ 
@@ -802,6 +811,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
802811        /* Current memory buffer used is Memory 0 */ 
803812        if ((hdma -> Instance -> CR  &  DMA_SxCR_CT ) ==  RESET )
804813        {
814+           /* Change DMA peripheral state */ 
815+           hdma -> State  =  HAL_DMA_STATE_READY_HALF_MEM0 ; // FIX 
816+ 
805817          if (hdma -> XferHalfCpltCallback  !=  NULL )
806818          {
807819            /* Half transfer callback */ 
@@ -811,6 +823,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
811823        /* Current memory buffer used is Memory 1 */ 
812824        else 
813825        {
826+           /* Change DMA peripheral state */ 
827+           hdma -> State  =  HAL_DMA_STATE_READY_HALF_MEM1 ; // FIX 
828+ 
814829          if (hdma -> XferM1HalfCpltCallback  !=  NULL )
815830          {
816831            /* Half transfer callback */ 
@@ -827,6 +842,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
827842          hdma -> Instance -> CR   &= ~(DMA_IT_HT );
828843        }
829844
845+         /* Change DMA peripheral state */ 
846+         hdma -> State  =  HAL_DMA_STATE_READY_HALF_MEM0 ; // FIX 
847+ 
830848        if (hdma -> XferHalfCpltCallback  !=  NULL )
831849        {
832850          /* Half transfer callback */ 
@@ -875,6 +893,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
875893        /* Current memory buffer used is Memory 0 */ 
876894        if ((hdma -> Instance -> CR  &  DMA_SxCR_CT ) ==  RESET )
877895        {
896+           /* Change DMA peripheral state */ 
897+           hdma -> State  =  HAL_DMA_STATE_READY_MEM1 ; // FIX 
898+      
878899          if (hdma -> XferM1CpltCallback  !=  NULL )
879900          {
880901            /* Transfer complete Callback for memory1 */ 
@@ -884,6 +905,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
884905        /* Current memory buffer used is Memory 1 */ 
885906        else 
886907        {
908+           /* Change DMA peripheral state */ 
909+           hdma -> State  =  HAL_DMA_STATE_READY_MEM0 ; // FIX 
910+      
887911          if (hdma -> XferCpltCallback  !=  NULL )
888912          {
889913            /* Transfer complete Callback for memory0 */ 
@@ -894,6 +918,9 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
894918      /* Disable the transfer complete interrupt if the DMA mode is not CIRCULAR */ 
895919      else 
896920      {
921+     	/* Change DMA peripheral state */ 
922+     	hdma -> State  =  HAL_DMA_STATE_READY_MEM0 ; // FIX 
923+      
897924        if ((hdma -> Instance -> CR  &  DMA_SxCR_CIRC ) ==  RESET )
898925        {
899926          /* Disable the transfer complete interrupt */ 
0 commit comments