diff --git a/cores/arduino/board.h b/cores/arduino/board.h
index 1b5be5a272..72cdc11fe5 100644
--- a/cores/arduino/board.h
+++ b/cores/arduino/board.h
@@ -10,6 +10,7 @@
#include "clock.h"
#include "core_callback.h"
#include "digital_io.h"
+#include "dma.h"
#include "dwt.h"
#include "hw_config.h"
#include "low_power.h"
diff --git a/cores/arduino/stm32/dma.h b/cores/arduino/stm32/dma.h
new file mode 100644
index 0000000000..85d21d54f4
--- /dev/null
+++ b/cores/arduino/stm32/dma.h
@@ -0,0 +1,67 @@
+/**
+ ******************************************************************************
+ * @file dma.h
+ * @author xC0000005
+ * @version V1.0.0
+ * @date 12-July-2019
+ * @brief provide dma callbacks for dma
+ *
+ ******************************************************************************
+ * @attention
+ *
+ *
© COPYRIGHT(c) 2019 STMicroelectronics
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __DMA_H
+#define __DMA_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include
+
+/**
+ * @brief This function will store the DMA handle in the appropriate slot
+ * @param dma_handle : dma handle
+ * @retval None
+ */
+void prepare_dma(DMA_HandleTypeDef *dma_handle);
+
+/**
+ * @brief This function will remove the DMA handle from the appropriate slot
+ * @param dma_handle : dma handle
+ * @retval None
+ */
+void end_dma(DMA_HandleTypeDef *dma_handle);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/libraries/SrcWrapper/src/stm32/dma.c b/libraries/SrcWrapper/src/stm32/dma.c
new file mode 100644
index 0000000000..0b3aeb5a16
--- /dev/null
+++ b/libraries/SrcWrapper/src/stm32/dma.c
@@ -0,0 +1,711 @@
+/**
+ ******************************************************************************
+ * @file dma.c
+ * @author xC0000005
+ * @version V1.0.0
+ * @date 12-July-2019
+ * @brief provide dma callbacks for dma
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * © COPYRIGHT(c) 2019 STMicroelectronics
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+#include
+#include "dma.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if defined(HAL_DMA_MODULE_ENABLED)
+
+typedef enum {
+#ifdef DMA1_Channel1
+ DMA1_CHANNEL1_INDEX,
+#endif
+#ifdef DMA1_Channel2
+ DMA1_CHANNEL2_INDEX,
+#endif
+#ifdef DMA1_Channel3
+ DMA1_CHANNEL3_INDEX,
+#endif
+#ifdef DMA1_Channel4
+ DMA1_CHANNEL4_INDEX,
+#endif
+#ifdef DMA1_Channel5
+ DMA1_CHANNEL5_INDEX,
+#endif
+#ifdef DMA1_Channel6
+ DMA1_CHANNEL6_INDEX,
+#endif
+#ifdef DMA1_Channel7
+ DMA1_CHANNEL7_INDEX,
+#endif
+#ifdef DMA2_Channel1
+ DMA2_CHANNEL1_INDEX,
+#endif
+#ifdef DMA2_Channel2
+ DMA2_CHANNEL2_INDEX,
+#endif
+#ifdef DMA2_Channel3
+ DMA2_CHANNEL3_INDEX,
+#endif
+#ifdef DMA2_Channel4
+ DMA2_CHANNEL4_INDEX,
+#endif
+#ifdef DMA2_Channel5
+ DMA2_CHANNEL5_INDEX,
+#endif
+#ifdef DMA2_Channel6
+ DMA2_CHANNEL6_INDEX,
+#endif
+#ifdef DMA2_Channel7
+ DMA2_CHANNEL7_INDEX,
+#endif
+#ifdef DMA2_Channel8
+ DMA2_CHANNEL8_INDEX,
+#endif
+#ifdef DMA1_Stream0
+ DMA1_STREAM0_INDEX,
+#endif
+#ifdef DMA1_Stream1
+ DMA1_STREAM1_INDEX,
+#endif
+#ifdef DMA1_Stream2
+ DMA1_STREAM2_INDEX,
+#endif
+#ifdef DMA1_Stream3
+ DMA1_STREAM3_INDEX,
+#endif
+#ifdef DMA1_Stream4
+ DMA1_STREAM4_INDEX,
+#endif
+#ifdef DMA1_Stream5
+ DMA1_STREAM5_INDEX,
+#endif
+#ifdef DMA1_Stream6
+ DMA1_STREAM6_INDEX,
+#endif
+#ifdef DMA1_Stream7
+ DMA1_STREAM7_INDEX,
+#endif
+#ifdef DMA2_Stream0
+ DMA2_STREAM0_INDEX,
+#endif
+#ifdef DMA2_Stream1
+ DMA2_STREAM1_INDEX,
+#endif
+#ifdef DMA2_Stream2
+ DMA2_STREAM2_INDEX,
+#endif
+#ifdef DMA2_Stream3
+ DMA2_STREAM3_INDEX,
+#endif
+#ifdef DMA2_Stream4
+ DMA2_STREAM4_INDEX,
+#endif
+#ifdef DMA2_Stream5
+ DMA2_STREAM5_INDEX,
+#endif
+#ifdef DMA2_Stream6
+ DMA2_STREAM6_INDEX,
+#endif
+#ifdef DMA2_Stream7
+ DMA2_STREAM7_INDEX,
+#endif
+ DMA_CHANNEL_NUM
+} dma_index_t;
+
+#define NC (dma_index_t)-1
+
+static DMA_HandleTypeDef *dma_handles[DMA_CHANNEL_NUM] = {NULL};
+
+/**
+ * @brief This function determines the dma index
+ * @param instance : dma instance
+ * @retval None
+ */
+static dma_index_t get_dma_index(
+#if defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32F7xx)
+ DMA_Stream_TypeDef
+#else
+ DMA_Channel_TypeDef
+#endif
+ *instance)
+{
+ switch ((uint32_t)instance) {
+#ifdef DMA1_Channel1
+ case (uint32_t)DMA1_Channel1:
+ return DMA1_CHANNEL1_INDEX;
+#endif
+#ifdef DMA1_Channel2
+ case (uint32_t)DMA1_Channel2:
+ return DMA1_CHANNEL2_INDEX;
+#endif
+#ifdef DMA1_Channel3
+ case (uint32_t)DMA1_Channel3:
+ return DMA1_CHANNEL3_INDEX;
+#endif
+#ifdef DMA1_Channel4
+ case (uint32_t)DMA1_Channel4:
+ return DMA1_CHANNEL4_INDEX;
+#endif
+#ifdef DMA1_Channel5
+ case (uint32_t)DMA1_Channel5:
+ return DMA1_CHANNEL5_INDEX;
+#endif
+#ifdef DMA1_Channel6
+ case (uint32_t)DMA1_Channel6:
+ return DMA1_CHANNEL6_INDEX;
+#endif
+#ifdef DMA1_Channel7
+ case (uint32_t)DMA1_Channel7:
+ return DMA1_CHANNEL7_INDEX;
+#endif
+#ifdef DMA2_Channel1
+ case (uint32_t)DMA2_Channel1:
+ return DMA2_CHANNEL1_INDEX;
+#endif
+#ifdef DMA2_Channel2
+ case (uint32_t)DMA2_Channel2:
+ return DMA2_CHANNEL2_INDEX;
+#endif
+#ifdef DMA2_Channel3
+ case (uint32_t)DMA2_Channel3:
+ return DMA2_CHANNEL3_INDEX;
+#endif
+#ifdef DMA2_Channel4
+ case (uint32_t)DMA2_Channel4:
+ return DMA2_CHANNEL4_INDEX;
+#endif
+#ifdef DMA2_Channel5
+ case (uint32_t)DMA2_Channel5:
+ return DMA2_CHANNEL5_INDEX;
+#endif
+#ifdef DMA2_Channel6
+ case (uint32_t)DMA2_Channel6:
+ return DMA2_CHANNEL6_INDEX;
+#endif
+#ifdef DMA2_Channel7
+ case (uint32_t)DMA2_Channel7:
+ return DMA2_CHANNEL7_INDEX;
+#endif
+#ifdef DMA2_Channel8
+ case (uint32_t)DMA2_Channel8:
+ return DMA2_CHANNEL8_INDEX;
+#endif
+#ifdef DMA1_Stream0
+ case (uint32_t)DMA1_Stream0:
+ return DMA1_STREAM0_INDEX;
+#endif
+#ifdef DMA1_Stream1
+ case (uint32_t)DMA1_Stream1:
+ return DMA1_STREAM1_INDEX;
+#endif
+#ifdef DMA1_Stream2
+ case (uint32_t)DMA1_Stream2:
+ return DMA1_STREAM2_INDEX;
+#endif
+#ifdef DMA1_Stream3
+ case (uint32_t)DMA1_Stream3:
+ return DMA1_STREAM3_INDEX;
+#endif
+#ifdef DMA1_Stream4
+ case (uint32_t)DMA1_Stream4:
+ return DMA1_STREAM4_INDEX;
+#endif
+#ifdef DMA1_Stream5
+ case (uint32_t)DMA1_Stream5:
+ return DMA1_STREAM5_INDEX;
+#endif
+#ifdef DMA1_Stream6
+ case (uint32_t)DMA1_Stream6:
+ return DMA1_STREAM6_INDEX;
+#endif
+#ifdef DMA1_Stream7
+ case (uint32_t)DMA1_Stream7:
+ return DMA1_STREAM7_INDEX;
+#endif
+#ifdef DMA2_Stream0
+ case (uint32_t)DMA2_Stream0:
+ return DMA2_STREAM0_INDEX;
+#endif
+#ifdef DMA2_Stream1
+ case (uint32_t)DMA2_Stream1:
+ return DMA2_STREAM1_INDEX;
+#endif
+#ifdef DMA2_Stream2
+ case (uint32_t)DMA2_Stream2:
+ return DMA2_STREAM2_INDEX;
+#endif
+#ifdef DMA2_Stream3
+ case (uint32_t)DMA2_Stream3:
+ return DMA2_STREAM3_INDEX;
+#endif
+#ifdef DMA2_Stream4
+ case (uint32_t)DMA2_Stream4:
+ return DMA2_STREAM4_INDEX;
+#endif
+#ifdef DMA2_Stream5
+ case (uint32_t)DMA2_Stream5:
+ return DMA2_STREAM5_INDEX;
+#endif
+#ifdef DMA2_Stream6
+ case (uint32_t)DMA2_Stream6:
+ return DMA2_STREAM6_INDEX;
+#endif
+#ifdef DMA2_Stream7
+ case (uint32_t)DMA2_Stream7:
+ return DMA2_STREAM7_INDEX;
+#endif
+ default:
+ return NC;
+ }
+}
+
+/**
+ * @brief This function will store the DMA handle in the appropriate slot
+ * @param dma_handle : dma handle
+ * @retval None
+ */
+void prepare_dma(DMA_HandleTypeDef *dma_handle)
+{
+ dma_index_t dma_index = get_dma_index(dma_handle->Instance);
+ if (dma_index == NC) {
+ return;
+ }
+ dma_handles[dma_index] = dma_handle;
+}
+
+/**
+ * @brief This function will remove the DMA handle from the appropriate slot
+ * @param dma_handle : dma handle
+ * @retval None
+ */
+void end_dma(DMA_HandleTypeDef *dma_handle)
+{
+ dma_index_t dma_index = get_dma_index(dma_handle->Instance);
+ if (dma_index == NC) {
+ return;
+ }
+ dma_handles[dma_index] = NULL;
+}
+
+#ifdef DMA1_Channel1
+/**
+ * @brief DMA1 Channel1 IRQHandler
+ * @param None
+ * @retval None
+ */
+void DMA1_Channel1_IRQHandler()
+{
+ if (dma_handles[DMA1_CHANNEL1_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_CHANNEL1_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA1_Channel2
+/**
+ * @brief DMA1 Channel2 IRQHandler
+ * @param None
+ * @retval None
+ */
+void DMA1_Channel2_IRQHandler()
+{
+ if (dma_handles[DMA1_CHANNEL2_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_CHANNEL2_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA1_Channel3
+/**
+ * @brief DMA1 Channel3 IRQHandler
+ * @param None
+ * @retval None
+ */
+void DMA1_Channel3_IRQHandler()
+{
+ if (dma_handles[DMA1_CHANNEL3_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_CHANNEL3_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA1_Channel4
+/**
+ * @brief DMA1 Channel4 IRQHandler
+ * @param None
+ * @retval None
+ */
+void DMA1_Channel4_IRQHandler()
+{
+ if (dma_handles[DMA1_CHANNEL4_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_CHANNEL4_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA1_Channel5
+/**
+ * @brief DMA1 Channel5 IRQHandler
+ * @param None
+ * @retval None
+ */
+void DMA1_Channel5_IRQHandler()
+{
+ if (dma_handles[DMA1_CHANNEL5_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_CHANNEL5_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA1_Channel6/**
+ * @brief DMA1 Channel6 IRQHandler
+ * @param None
+ * @retval None
+ */
+void DMA1_Channel6_IRQHandler()
+{
+ if (dma_handles[DMA1_CHANNEL6_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_CHANNEL6_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA1_Channel7
+/**
+ * @brief DMA1 Channel3 IRQHandler
+ * @param None
+ * @retval None
+ */
+void DMA1_Channel7_IRQHandler()
+{
+ if (dma_handles[DMA1_CHANNEL7_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_CHANNEL7_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA2_Channel1
+/**
+ * @brief DMA2 Channel1 IRQHandler
+ * @param None
+ * @retval None
+ */
+void DMA2_Channel1_IRQHandler()
+{
+ if (dma_handles[DMA2_CHANNEL1_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_CHANNEL1_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA2_Channel2
+/**
+ * @brief DMA2 Channel2 IRQHandler
+ * @param None
+ * @retval None
+ */
+void DMA2_Channel2_IRQHandler()
+{
+ if (dma_handles[DMA2_CHANNEL2_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_CHANNEL2_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA2_Channel3
+/**
+ * @brief DMA2 Channel3 IRQHandler
+ * @param None
+ * @retval None
+ */
+void DMA2_Channel3_IRQHandler()
+{
+ if (dma_handles[DMA2_CHANNEL3_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_CHANNEL3_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA2_Channel4
+/**
+ * @brief DMA2 Channel4 IRQHandler
+ * @param None
+ * @retval None
+ */
+void DMA2_Channel4_IRQHandler()
+{
+ if (dma_handles[DMA2_CHANNEL4_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_CHANNEL4_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA2_Channel5
+/**
+ * @brief DMA2 Channel5 IRQHandler
+ * @param None
+ * @retval None
+ */
+void DMA2_Channel5_IRQHandler()
+{
+ if (dma_handles[DMA2_CHANNEL5_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_CHANNEL5_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA2_Channel6
+/**
+ * @brief DMA2 Channel6 IRQHandler
+ * @param None
+ * @retval None
+ */
+void DMA2_Channel6_IRQHandler()
+{
+ if (dma_handles[DMA2_CHANNEL6_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_CHANNEL6_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA2_Channel7
+/**
+ * @brief DMA2 Channel7 IRQHandler
+ * @param None
+ * @retval None
+ */
+void DMA2_Channel7_IRQHandler()
+{
+ if (dma_handles[DMA2_CHANNEL7_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_CHANNEL7_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA2_Channel8
+/**
+ * @brief DMA2 Channel8 IRQHandler
+ * @param None
+ * @retval None
+ */
+void DMA2_Channel8_IRQHandler()
+{
+ if (dma_handles[DMA2_CHANNEL8_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_CHANNEL8_INDEX]);
+ }
+}
+#endif
+
+
+/* Combined handlers
+DMA1_Ch2_3_DMA2_Ch1_2_IRQn
+DMA1_Ch4_7_DMA2_Ch3_5_IRQn
+DMA1_Channel2_3_IRQn
+DMA1_Channel4_5_6_7_IRQn
+DMA1_Channel4_5_IRQn
+DMA2_Channel4_5_IRQn
+*/
+
+#if defined(DMA1_Channel2) && defined(DMA1_Channel3) && defined(DMA2_Channel1) && defined(DMA2_Channel2)
+/**
+ * @brief DMA1 and DMA2 hander for channels 2,3 and 1,2
+ * @param None
+ * @retval None
+ */
+void DMA1_Ch2_3_DMA2_Ch1_2_IRQHandler()
+{
+ if (dma_handles[DMA1_CHANNEL2_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_CHANNEL2_INDEX]);
+ }
+
+ if (dma_handles[DMA1_CHANNEL3_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_CHANNEL3_INDEX]);
+ }
+
+ if (dma_handles[DMA2_CHANNEL1_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_CHANNEL1_INDEX]);
+ }
+
+ if (dma_handles[DMA2_CHANNEL1_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_CHANNEL2_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA1_Stream0
+void DMA1_Stream0_IRQHandler()
+{
+ if (dma_handles[DMA1_STREAM0_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_STREAM0_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA1_Stream1
+void DMA1_Stream1_IRQHandler()
+{
+ if (dma_handles[DMA1_STREAM1_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_STREAM1_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA1_Stream2
+void DMA1_Stream2_IRQHandler()
+{
+ if (dma_handles[DMA1_STREAM2_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_STREAM2_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA1_Stream3
+void DMA1_Stream3_IRQHandler()
+{
+ if (dma_handles[DMA1_STREAM3_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_STREAM3_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA1_Stream4
+void DMA1_Stream4_IRQHandler()
+{
+ if (dma_handles[DMA1_STREAM4_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_STREAM4_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA1_Stream5
+void DMA1_Stream5_IRQHandler()
+{
+ if (dma_handles[DMA1_STREAM5_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_STREAM5_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA1_Stream6
+void DMA1_Stream6_IRQHandler()
+{
+ if (dma_handles[DMA1_STREAM6_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_STREAM6_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA1_Stream7
+void DMA1_Stream7_IRQHandler()
+{
+ if (dma_handles[DMA1_STREAM7_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA1_STREAM7_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA2_Stream0
+void DMA2_Stream0_IRQHandler()
+{
+ if (dma_handles[DMA2_STREAM0_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_STREAM0_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA2_Stream1
+void DMA2_Stream1_IRQHandler()
+{
+ if (dma_handles[DMA2_STREAM1_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_STREAM1_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA2_Stream2
+void DMA2_Stream2_IRQHandler()
+{
+ if (dma_handles[DMA2_STREAM2_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_STREAM2_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA2_Stream3
+void DMA2_Stream3_IRQHandler()
+{
+ if (dma_handles[DMA2_STREAM3_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_STREAM3_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA2_Stream4
+void DMA2_Stream4_IRQHandler()
+{
+ if (dma_handles[DMA2_STREAM4_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_STREAM4_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA2_Stream5
+void DMA2_Stream5_IRQHandler()
+{
+ if (dma_handles[DMA2_STREAM5_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_STREAM5_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA2_Stream6
+void DMA2_Stream6_IRQHandler()
+{
+ if (dma_handles[DMA2_STREAM6_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_STREAM6_INDEX]);
+ }
+}
+#endif
+
+#ifdef DMA2_Stream7
+void DMA2_Stream7_IRQHandler()
+{
+ if (dma_handles[DMA2_STREAM7_INDEX] != NULL) {
+ HAL_DMA_IRQHandler(dma_handles[DMA2_STREAM7_INDEX]);
+ }
+}
+#endif
+
+#endif /* HAL_DMA_MODULE_ENABLED */
+
+#ifdef __cplusplus
+}
+#endif