Skip to content

Commit cf75543

Browse files
authored
Merge pull request #3424 from bcostm/fix_dma_f4
STM32F4 - FIX to add the update of hdma->State variable
2 parents 8966d15 + fe73b43 commit cf75543

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

targets/TARGET_STM/TARGET_STM32F4/device/stm32f4xx_hal_dma.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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 */

targets/TARGET_STM/TARGET_STM32F4/device/stm32f4xx_hal_dma.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,13 @@ typedef enum
122122
{
123123
HAL_DMA_STATE_RESET = 0x00U, /*!< DMA not yet initialized or disabled */
124124
HAL_DMA_STATE_READY = 0x01U, /*!< DMA initialized and ready for use */
125+
HAL_DMA_STATE_READY_MEM0 = 0x11U, /*!< DMA Mem0 process success */ // FIX
126+
HAL_DMA_STATE_READY_MEM1 = 0x21U, /*!< DMA Mem1 process success */ // FIX
127+
HAL_DMA_STATE_READY_HALF_MEM0 = 0x31U, /*!< DMA Mem0 Half process success */ // FIX
128+
HAL_DMA_STATE_READY_HALF_MEM1 = 0x41U, /*!< DMA Mem1 Half process success */ // FIX
125129
HAL_DMA_STATE_BUSY = 0x02U, /*!< DMA process is ongoing */
130+
HAL_DMA_STATE_BUSY_MEM0 = 0x12U, /*!< DMA Mem0 process is ongoing */ // FIX
131+
HAL_DMA_STATE_BUSY_MEM1 = 0x22U, /*!< DMA Mem1 process is ongoing */ // FIX
126132
HAL_DMA_STATE_TIMEOUT = 0x03U, /*!< DMA timeout state */
127133
HAL_DMA_STATE_ERROR = 0x04U, /*!< DMA error state */
128134
HAL_DMA_STATE_ABORT = 0x05U, /*!< DMA Abort state */

0 commit comments

Comments
 (0)