stm32h5xx_hal_dma_ex.h 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735
  1. /**
  2. **********************************************************************************************************************
  3. * @file stm32h5xx_hal_dma_ex.h
  4. * @author MCD Application Team
  5. * @brief Header file of DMA HAL extension module.
  6. **********************************************************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) 2023 STMicroelectronics.
  10. * All rights reserved.
  11. *
  12. * This software is licensed under terms that can be found in the LICENSE file
  13. * in the root directory of this software component.
  14. * If no LICENSE file comes with this software, it is provided AS-IS.
  15. *
  16. **********************************************************************************************************************
  17. */
  18. /* Define to prevent recursive inclusion -----------------------------------------------------------------------------*/
  19. #ifndef STM32H5xx_HAL_DMA_EX_H
  20. #define STM32H5xx_HAL_DMA_EX_H
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. /* Includes ----------------------------------------------------------------------------------------------------------*/
  25. #include "stm32h5xx_hal_def.h"
  26. /** @addtogroup STM32H5xx_HAL_Driver
  27. * @{
  28. */
  29. /** @addtogroup DMAEx
  30. * @{
  31. */
  32. /* Exported types ----------------------------------------------------------------------------------------------------*/
  33. /** @defgroup DMAEx_Exported_Types DMAEx Exported Types
  34. * @brief DMAEx Exported types
  35. * @{
  36. */
  37. /**
  38. * @brief DMAEx Data Handling Configuration Structure Definition.
  39. */
  40. typedef struct
  41. {
  42. uint32_t DataExchange; /*!< Specifies the DMA channel data exchange mode.
  43. This parameter can be a value of @ref DMAEx_Data_Exchange */
  44. uint32_t DataAlignment; /*!< Specifies the DMA channel data padding and alignment mode
  45. This parameter can be a value of @ref DMAEx_Data_Alignment */
  46. } DMA_DataHandlingConfTypeDef;
  47. /**
  48. * @brief DMAEx Trigger Configuration Structure Definition.
  49. */
  50. typedef struct
  51. {
  52. uint32_t TriggerMode; /*!< Specifies the DMA channel trigger mode.
  53. This parameter can be a value of @ref DMAEx_Trigger_Mode */
  54. uint32_t TriggerPolarity; /*!< Specifies the DMA channel trigger event polarity.
  55. This parameter can be a value of @ref DMAEx_Trigger_Polarity */
  56. uint32_t TriggerSelection; /*!< Specifies the DMA channel trigger event selection.
  57. This parameter can be a value of @ref DMAEx_Trigger_Selection */
  58. } DMA_TriggerConfTypeDef;
  59. /**
  60. * @brief DMAEx Repeated Block Configuration Structure Definition.
  61. */
  62. typedef struct
  63. {
  64. uint32_t RepeatCount; /*!< Specifies the DMA channel repeat count (the number of repetitions of block).
  65. This parameter can be a value between 1 and 2048 */
  66. int32_t SrcAddrOffset; /*!< Specifies the DMA channel single/burst source address offset :
  67. This parameter can be a value between -8191 and 8191.
  68. * If source address offset > 0 => Increment the source address by offset from where
  69. the last single/burst transfer ends.
  70. * If source address offset < 0 => Decrement the source address by offset from where
  71. the last single/burst transfer ends.
  72. * If source address offset == 0 => The next single/burst source address starts from
  73. where the last transfer ends */
  74. int32_t DestAddrOffset; /*!< Specifies the DMA channel single/burst destination address offset signed value :
  75. This parameter can be a value between -8191 and 8191.
  76. * If destination address offset > 0 => Increment the destination address by offset
  77. from where the last single/burst transfer ends.
  78. * If destination address offset < 0 => Decrement the destination address by offset
  79. from where the last single/burst transfer ends.
  80. * If destination address offset == 0 => The next single/burst destination address
  81. starts from where the last transfer ends. */
  82. int32_t BlkSrcAddrOffset; /*!< Specifies the DMA channel block source address offset signed value :
  83. This parameter can be a value between -65535 and 65535.
  84. * If block source address offset > 0 => Increment the block source address by offset
  85. from where the last block ends.
  86. * If block source address offset < 0 => Decrement the next block source address by
  87. offset from where the last block ends.
  88. * If block source address offset == 0 => the next block source address starts from
  89. where the last block ends */
  90. int32_t BlkDestAddrOffset; /*!< Specifies the DMA channel block destination address offset signed value :
  91. This parameter can be a value between -65535 and 65535.
  92. * If block destination address offset > 0 => Increment the block destination address
  93. by offset from where the last block ends.
  94. * If block destination address offset < 0 => Decrement the next block destination
  95. address by offset from where the last block ends.
  96. * If block destination address offset == 0 => the next block destination address
  97. starts from where the last block ends */
  98. } DMA_RepeatBlockConfTypeDef;
  99. /**
  100. * @brief DMAEx Queue State Enumeration Definition.
  101. */
  102. typedef enum
  103. {
  104. HAL_DMA_QUEUE_STATE_RESET = 0x00U, /*!< DMA queue empty */
  105. HAL_DMA_QUEUE_STATE_READY = 0x01U, /*!< DMA queue ready for use */
  106. HAL_DMA_QUEUE_STATE_BUSY = 0x02U /*!< DMA queue execution on going */
  107. } HAL_DMA_QStateTypeDef;
  108. /**
  109. * @brief DMAEx Linked-List Node Configuration Structure Definition.
  110. */
  111. typedef struct
  112. {
  113. uint32_t NodeType; /*!< Specifies the DMA channel node type.
  114. This parameter can be a value of @ref DMAEx_Node_Type */
  115. DMA_InitTypeDef Init; /*!< Specifies the DMA channel basic configuration */
  116. DMA_DataHandlingConfTypeDef DataHandlingConfig; /*!< Specifies the DMA channel data handling channel configuration */
  117. DMA_TriggerConfTypeDef TriggerConfig; /*!< Specifies the DMA channel trigger configuration */
  118. DMA_RepeatBlockConfTypeDef RepeatBlockConfig; /*!< Specifies the DMA channel repeated block configuration */
  119. uint32_t SrcAddress; /*!< Specifies the source memory address */
  120. uint32_t DstAddress; /*!< Specifies the destination memory address */
  121. uint32_t DataSize; /*!< Specifies the source data size in bytes */
  122. #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
  123. uint32_t SrcSecure; /*!< Specifies the source security attribute */
  124. uint32_t DestSecure; /*!< Specifies the destination security attribute */
  125. #endif /* (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
  126. } DMA_NodeConfTypeDef;
  127. /**
  128. * @brief DMAEx Linked-List Node Structure Definition.
  129. */
  130. typedef struct
  131. {
  132. uint32_t LinkRegisters[8U]; /*!< Physical Node register description */
  133. uint32_t NodeInfo; /*!< Node information */
  134. } DMA_NodeTypeDef;
  135. /**
  136. * @brief DMAEx Linked-List Queue Structure Definition.
  137. */
  138. typedef struct __DMA_QListTypeDef
  139. {
  140. DMA_NodeTypeDef *Head; /*!< Specifies the queue head node */
  141. DMA_NodeTypeDef *FirstCircularNode; /*!< Specifies the queue first circular node */
  142. uint32_t NodeNumber; /*!< Specifies the queue node number */
  143. __IO HAL_DMA_QStateTypeDef State; /*!< Specifies the queue state */
  144. __IO uint32_t ErrorCode; /*!< Specifies the queue error code */
  145. __IO uint32_t Type; /*!< Specifies whether the queue is static or dynamic */
  146. } DMA_QListTypeDef;
  147. /**
  148. * @}
  149. */
  150. /* Exported constants ------------------------------------------------------------------------------------------------*/
  151. /** @defgroup DMAEx_Exported_Constants DMAEx Exported Constants
  152. * @brief DMAEx Exported Constants
  153. * @{
  154. */
  155. /** @defgroup Queue_Error_Codes Queue Error Codes
  156. * @brief Queue Error Codes
  157. * @{
  158. */
  159. #define HAL_DMA_QUEUE_ERROR_NONE (0x00U) /*!< No error */
  160. #define HAL_DMA_QUEUE_ERROR_BUSY (0x01U) /*!< Error busy */
  161. #define HAL_DMA_QUEUE_ERROR_EMPTY (0x02U) /*!< Error unallowed operation for empty queue */
  162. #define HAL_DMA_QUEUE_ERROR_UNSUPPORTED (0x03U) /*!< Error unsupported feature */
  163. #define HAL_DMA_QUEUE_ERROR_INVALIDTYPE (0x04U) /*!< Error incompatible node type or circular initialization
  164. and queue circular types are incompatible */
  165. #define HAL_DMA_QUEUE_ERROR_OUTOFRANGE (0x05U) /*!< Error out of range node memory */
  166. #define HAL_DMA_QUEUE_ERROR_NOTFOUND (0x06U) /*!< Error node not found in queue */
  167. /**
  168. * @}
  169. */
  170. /** @defgroup DMAEx_LinkedList_Mode DMAEx LinkedList Mode
  171. * @brief DMAEx LinkedList Mode
  172. * @{
  173. */
  174. #define DMA_LINKEDLIST_NORMAL DMA_LINKEDLIST /*!< Linear linked-list DMA channel transfer */
  175. #define DMA_LINKEDLIST_CIRCULAR (DMA_LINKEDLIST | (0x01U)) /*!< Circular linked-list DMA channel transfer */
  176. /**
  177. * @}
  178. */
  179. /** @defgroup DMAEx_Data_Alignment DMAEx Data Alignment
  180. * @brief DMAEx Data Alignment
  181. * @{
  182. */
  183. #define DMA_DATA_RIGHTALIGN_ZEROPADDED 0x00000000U /*!< If source data width < destination data width
  184. => Right aligned padded with 0 up to destination data
  185. width */
  186. #define DMA_DATA_RIGHTALIGN_LEFTTRUNC 0x00000000U /*!< If source data width > destination data width
  187. => Right aligned left Truncated down to destination
  188. data width */
  189. #define DMA_DATA_RIGHTALIGN_SIGNEXT DMA_CTR1_PAM_0 /*!< If source data width < destination data width
  190. => Right Aligned padded with sign extended up to
  191. destination data width */
  192. #define DMA_DATA_LEFTALIGN_RIGHTTRUNC DMA_CTR1_PAM_0 /*!< If source data width > destination data width
  193. => Left Aligned Right Truncated down to the
  194. destination data width */
  195. #define DMA_DATA_PACK DMA_CTR1_PAM_1 /*!< If source data width < destination data width
  196. => Packed at the destination data width */
  197. #define DMA_DATA_UNPACK DMA_CTR1_PAM_1 /*!< If source data width > destination data width
  198. => Unpacked at the destination data width */
  199. /**
  200. * @}
  201. */
  202. /** @defgroup DMAEx_Data_Exchange DMAEx Data Exchange
  203. * @brief DMAEx Data Exchange
  204. * @{
  205. */
  206. #define DMA_EXCHANGE_NONE 0x00000000U /*!< No data exchange */
  207. #define DMA_EXCHANGE_DEST_BYTE DMA_CTR1_DBX /*!< Destination Byte exchange when destination data width is > Byte */
  208. #define DMA_EXCHANGE_DEST_HALFWORD DMA_CTR1_DHX /*!< Destination Half-Word exchange when destination data width is > Half-Word */
  209. #define DMA_EXCHANGE_SRC_BYTE DMA_CTR1_SBX /*!< Source Byte endianness exchange when source data width is word */
  210. /**
  211. * @}
  212. */
  213. /** @defgroup DMAEx_Trigger_Polarity DMAEx Trigger Polarity
  214. * @brief DMAEx Trigger Polarity
  215. * @{
  216. */
  217. #define DMA_TRIG_POLARITY_MASKED 0x00000000U /*!< No trigger of the selected DMA request. Masked trigger event */
  218. #define DMA_TRIG_POLARITY_RISING DMA_CTR2_TRIGPOL_0 /*!< Trigger of the selected DMA request on the rising edge of the selected trigger event input */
  219. #define DMA_TRIG_POLARITY_FALLING DMA_CTR2_TRIGPOL_1 /*!< Trigger of the selected DMA request on the falling edge of the selected trigger event input */
  220. /**
  221. * @}
  222. */
  223. /** @defgroup DMAEx_Trigger_Mode DMAEx Trigger Mode
  224. * @brief DMAEx Trigger Mode
  225. * @{
  226. */
  227. #define DMA_TRIGM_BLOCK_TRANSFER 0x00000000U /*!< A block transfer is conditioned by (at least) one hit trigger */
  228. #define DMA_TRIGM_REPEATED_BLOCK_TRANSFER DMA_CTR2_TRIGM_0 /*!< A repeated block transfer is conditioned by (at least) one hit trigger */
  229. #define DMA_TRIGM_LLI_LINK_TRANSFER DMA_CTR2_TRIGM_1 /*!< A LLI link transfer is conditioned by (at least) one hit trigger */
  230. #define DMA_TRIGM_SINGLE_BURST_TRANSFER DMA_CTR2_TRIGM /*!< A single/burst transfer is conditioned by (at least) one hit trigger */
  231. /**
  232. * @}
  233. */
  234. /** @defgroup DMAEx_Trigger_Selection DMAEx Trigger Selection
  235. * @brief DMAEx Trigger Selection
  236. * @{
  237. */
  238. /* GPDMA1 triggers */
  239. #define GPDMA1_TRIGGER_EXTI_LINE0 0U /*!< GPDMA1 HW Trigger signal is EXTI_LINE0 */
  240. #define GPDMA1_TRIGGER_EXTI_LINE1 1U /*!< GPDMA1 HW Trigger signal is EXTI_LINE1 */
  241. #define GPDMA1_TRIGGER_EXTI_LINE2 2U /*!< GPDMA1 HW Trigger signal is EXTI_LINE2 */
  242. #define GPDMA1_TRIGGER_EXTI_LINE3 3U /*!< GPDMA1 HW Trigger signal is EXTI_LINE3 */
  243. #define GPDMA1_TRIGGER_EXTI_LINE4 4U /*!< GPDMA1 HW Trigger signal is EXTI_LINE4 */
  244. #define GPDMA1_TRIGGER_EXTI_LINE5 5U /*!< GPDMA1 HW Trigger signal is EXTI_LINE5 */
  245. #define GPDMA1_TRIGGER_EXTI_LINE6 6U /*!< GPDMA1 HW Trigger signal is EXTI_LINE6 */
  246. #define GPDMA1_TRIGGER_EXTI_LINE7 7U /*!< GPDMA1 HW Trigger signal is EXTI_LINE7 */
  247. #define GPDMA1_TRIGGER_TAMP_TRG1 8U /*!< GPDMA1 HW Trigger signal is TAMP_TRG1 */
  248. #define GPDMA1_TRIGGER_TAMP_TRG2 9U /*!< GPDMA1 HW Trigger signal is TAMP_TRG2 */
  249. #if defined (TAMP_CR1_TAMP3E)
  250. #define GPDMA1_TRIGGER_TAMP_TRG3 10U /*!< GPDMA1 HW Trigger signal is TAMP_TRG3 */
  251. #endif /* TAMP_CR1_TAMP3E */
  252. #define GPDMA1_TRIGGER_LPTIM1_CH1 11U /*!< GPDMA1 HW Trigger signal is LPTIM1_CH1 */
  253. #define GPDMA1_TRIGGER_LPTIM1_CH2 12U /*!< GPDMA1 HW Trigger signal is LPTIM1_CH2 */
  254. #define GPDMA1_TRIGGER_LPTIM2_CH1 13U /*!< GPDMA1 HW Trigger signal is LPTIM2_CH1 */
  255. #define GPDMA1_TRIGGER_LPTIM2_CH2 14U /*!< GPDMA1 HW Trigger signal is LPTIM2_CH2 */
  256. #define GPDMA1_TRIGGER_RTC_ALRA_TRG 15U /*!< GPDMA1 HW Trigger signal is RTC_ALRA_TRG */
  257. #define GPDMA1_TRIGGER_RTC_ALRB_TRG 16U /*!< GPDMA1 HW Trigger signal is RTC_ALRB_TRG */
  258. #define GPDMA1_TRIGGER_RTC_WUT_TRG 17U /*!< GPDMA1 HW Trigger signal is RTC_WUT_TRG */
  259. #define GPDMA1_TRIGGER_GPDMA1_CH0_TCF 18U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH0_TCF */
  260. #define GPDMA1_TRIGGER_GPDMA1_CH1_TCF 19U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH1_TCF */
  261. #define GPDMA1_TRIGGER_GPDMA1_CH2_TCF 20U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH2_TCF */
  262. #define GPDMA1_TRIGGER_GPDMA1_CH3_TCF 21U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH3_TCF */
  263. #define GPDMA1_TRIGGER_GPDMA1_CH4_TCF 22U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH4_TCF */
  264. #define GPDMA1_TRIGGER_GPDMA1_CH5_TCF 23U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH5_TCF */
  265. #define GPDMA1_TRIGGER_GPDMA1_CH6_TCF 24U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH6_TCF */
  266. #define GPDMA1_TRIGGER_GPDMA1_CH7_TCF 25U /*!< GPDMA1 HW Trigger signal is GPDMA1_CH7_TCF */
  267. #define GPDMA1_TRIGGER_GPDMA2_CH0_TCF 26U /*!< GPDMA1 HW Trigger signal is GPDMA2_CH0_TCF */
  268. #define GPDMA1_TRIGGER_GPDMA2_CH1_TCF 27U /*!< GPDMA1 HW Trigger signal is GPDMA2_CH1_TCF */
  269. #define GPDMA1_TRIGGER_GPDMA2_CH2_TCF 28U /*!< GPDMA1 HW Trigger signal is GPDMA2_CH2_TCF */
  270. #define GPDMA1_TRIGGER_GPDMA2_CH3_TCF 29U /*!< GPDMA1 HW Trigger signal is GPDMA2_CH3_TCF */
  271. #define GPDMA1_TRIGGER_GPDMA2_CH4_TCF 30U /*!< GPDMA1 HW Trigger signal is GPDMA2_CH4_TCF */
  272. #define GPDMA1_TRIGGER_GPDMA2_CH5_TCF 31U /*!< GPDMA1 HW Trigger signal is GPDMA2_CH5_TCF */
  273. #define GPDMA1_TRIGGER_GPDMA2_CH6_TCF 32U /*!< GPDMA1 HW Trigger signal is GPDMA2_CH6_TCF */
  274. #define GPDMA1_TRIGGER_GPDMA2_CH7_TCF 33U /*!< GPDMA1 HW Trigger signal is GPDMA2_CH7_TCF */
  275. #define GPDMA1_TRIGGER_TIM2_TRGO 34U /*!< GPDMA1 HW Trigger signal is TIM2_TRGO */
  276. #if defined (TIM15)
  277. #define GPDMA1_TRIGGER_TIM15_TRGO 35U /*!< GPDMA1 HW Trigger signal is TIM15_TRGO */
  278. #endif /* TIM15 */
  279. #if defined (TIM12)
  280. #define GPDMA1_TRIGGER_TIM12_TRGO 36U /*!< GPDMA1 HW Trigger signal is TIM12_TRGO */
  281. #endif /* TIM12 */
  282. #if defined (LPTIM3)
  283. #define GPDMA1_TRIGGER_LPTIM3_CH1 37U /*!< GPDMA1 HW Trigger signal is LPTIM3_CH1 */
  284. #define GPDMA1_TRIGGER_LPTIM3_CH2 38U /*!< GPDMA1 HW Trigger signal is LPTIM3_CH2 */
  285. #endif /* LPTIM3 */
  286. #if defined (LPTIM4)
  287. #define GPDMA1_TRIGGER_LPTIM4_AIT 39U /*!< GPDMA1 HW Trigger signal is LPTIM4_AIT */
  288. #endif /* LPTIM4 */
  289. #if defined (LPTIM5)
  290. #define GPDMA1_TRIGGER_LPTIM5_CH1 40U /*!< GPDMA1 HW Trigger signal is LPTIM5_CH1 */
  291. #define GPDMA1_TRIGGER_LPTIM5_CH2 41U /*!< GPDMA1 HW Trigger signal is LPTIM5_CH2 */
  292. #endif /* LPTIM5 */
  293. #if defined (LPTIM6)
  294. #define GPDMA1_TRIGGER_LPTIM6_CH1 42U /*!< GPDMA1 HW Trigger signal is LPTIM6_CH1 */
  295. #define GPDMA1_TRIGGER_LPTIM6_CH2 43U /*!< GPDMA1 HW Trigger signal is LPTIM6_CH2 */
  296. #endif /* LPTIM6 */
  297. #if defined (COMP1)
  298. #define GPDMA1_TRIGGER_COMP1_OUT 44U /*!< GPDMA1 HW Trigger signal is COMP1_OUT */
  299. #endif /* COMP1 */
  300. #if defined (STM32H503xx) || defined(STM32H523xx) || defined(STM32H533xx)
  301. #define GPDMA1_TRIGGER_EVENTOUT 45U /*!< GPDMA1 HW Trigger signal is EVENTOUT */
  302. #endif /* STM32H503xx || STM32H523xx || STM32H533xx */
  303. /* GPDMA2 triggers */
  304. #define GPDMA2_TRIGGER_EXTI_LINE0 0U /*!< GPDMA2 HW Trigger signal is EXTI_LINE0 */
  305. #define GPDMA2_TRIGGER_EXTI_LINE1 1U /*!< GPDMA2 HW Trigger signal is EXTI_LINE1 */
  306. #define GPDMA2_TRIGGER_EXTI_LINE2 2U /*!< GPDMA2 HW Trigger signal is EXTI_LINE2 */
  307. #define GPDMA2_TRIGGER_EXTI_LINE3 3U /*!< GPDMA2 HW Trigger signal is EXTI_LINE3 */
  308. #define GPDMA2_TRIGGER_EXTI_LINE4 4U /*!< GPDMA2 HW Trigger signal is EXTI_LINE4 */
  309. #define GPDMA2_TRIGGER_EXTI_LINE5 5U /*!< GPDMA2 HW Trigger signal is EXTI_LINE5 */
  310. #define GPDMA2_TRIGGER_EXTI_LINE6 6U /*!< GPDMA2 HW Trigger signal is EXTI_LINE6 */
  311. #define GPDMA2_TRIGGER_EXTI_LINE7 7U /*!< GPDMA2 HW Trigger signal is EXTI_LINE7 */
  312. #define GPDMA2_TRIGGER_TAMP_TRG1 8U /*!< GPDMA2 HW Trigger signal is TAMP_TRG1 */
  313. #define GPDMA2_TRIGGER_TAMP_TRG2 9U /*!< GPDMA2 HW Trigger signal is TAMP_TRG2 */
  314. #define GPDMA2_TRIGGER_TAMP_TRG3 10U /*!< GPDMA2 HW Trigger signal is TAMP_TRG3 */
  315. #define GPDMA2_TRIGGER_LPTIM1_CH1 11U /*!< GPDMA2 HW Trigger signal is LPTIM1_CH1 */
  316. #define GPDMA2_TRIGGER_LPTIM1_CH2 12U /*!< GPDMA2 HW Trigger signal is LPTIM1_CH2 */
  317. #define GPDMA2_TRIGGER_LPTIM2_CH1 13U /*!< GPDMA2 HW Trigger signal is LPTIM2_CH1 */
  318. #define GPDMA2_TRIGGER_LPTIM2_CH2 14U /*!< GPDMA2 HW Trigger signal is LPTIM2_CH2 */
  319. #define GPDMA2_TRIGGER_RTC_ALRA_TRG 15U /*!< GPDMA2 HW Trigger signal is RTC_ALRA_TRG */
  320. #define GPDMA2_TRIGGER_RTC_ALRB_TRG 16U /*!< GPDMA2 HW Trigger signal is RTC_ALRB_TRG */
  321. #define GPDMA2_TRIGGER_RTC_WUT_TRG 17U /*!< GPDMA2 HW Trigger signal is RTC_WUT_TRG */
  322. #define GPDMA2_TRIGGER_GPDMA1_CH0_TCF 18U /*!< GPDMA2 HW Trigger signal is GPDMA1_CH0_TCF */
  323. #define GPDMA2_TRIGGER_GPDMA1_CH1_TCF 19U /*!< GPDMA2 HW Trigger signal is GPDMA1_CH1_TCF */
  324. #define GPDMA2_TRIGGER_GPDMA1_CH2_TCF 20U /*!< GPDMA2 HW Trigger signal is GPDMA1_CH2_TCF */
  325. #define GPDMA2_TRIGGER_GPDMA1_CH3_TCF 21U /*!< GPDMA2 HW Trigger signal is GPDMA1_CH3_TCF */
  326. #define GPDMA2_TRIGGER_GPDMA1_CH4_TCF 22U /*!< GPDMA2 HW Trigger signal is GPDMA1_CH4_TCF */
  327. #define GPDMA2_TRIGGER_GPDMA1_CH5_TCF 23U /*!< GPDMA2 HW Trigger signal is GPDMA1_CH5_TCF */
  328. #define GPDMA2_TRIGGER_GPDMA1_CH6_TCF 24U /*!< GPDMA2 HW Trigger signal is GPDMA1_CH6_TCF */
  329. #define GPDMA2_TRIGGER_GPDMA1_CH7_TCF 25U /*!< GPDMA2 HW Trigger signal is GPDMA1_CH7_TCF */
  330. #define GPDMA2_TRIGGER_GPDMA2_CH0_TCF 26U /*!< GPDMA2 HW Trigger signal is GPDMA2_CH0_TCF */
  331. #define GPDMA2_TRIGGER_GPDMA2_CH1_TCF 27U /*!< GPDMA2 HW Trigger signal is GPDMA2_CH1_TCF */
  332. #define GPDMA2_TRIGGER_GPDMA2_CH2_TCF 28U /*!< GPDMA2 HW Trigger signal is GPDMA2_CH2_TCF */
  333. #define GPDMA2_TRIGGER_GPDMA2_CH3_TCF 29U /*!< GPDMA2 HW Trigger signal is GPDMA2_CH3_TCF */
  334. #define GPDMA2_TRIGGER_GPDMA2_CH4_TCF 30U /*!< GPDMA2 HW Trigger signal is GPDMA2_CH4_TCF */
  335. #define GPDMA2_TRIGGER_GPDMA2_CH5_TCF 31U /*!< GPDMA2 HW Trigger signal is GPDMA2_CH5_TCF */
  336. #define GPDMA2_TRIGGER_GPDMA2_CH6_TCF 32U /*!< GPDMA2 HW Trigger signal is GPDMA2_CH6_TCF */
  337. #define GPDMA2_TRIGGER_GPDMA2_CH7_TCF 33U /*!< GPDMA2 HW Trigger signal is GPDMA2_CH7_TCF */
  338. #define GPDMA2_TRIGGER_TIM2_TRGO 34U /*!< GPDMA2 HW Trigger signal is TIM2_TRGO */
  339. #if defined (TIM15)
  340. #define GPDMA2_TRIGGER_TIM15_TRGO 35U /*!< GPDMA2 HW Trigger signal is TIM15_TRGO */
  341. #endif /* TIM15 */
  342. #if defined (TIM12)
  343. #define GPDMA2_TRIGGER_TIM12_TRGO 36U /*!< GPDMA2 HW Trigger signal is TIM12_TRGO */
  344. #endif /* TIM12 */
  345. #if defined (LPTIM3)
  346. #define GPDMA2_TRIGGER_LPTIM3_CH1 37U /*!< GPDMA2 HW Trigger signal is LPTIM3_CH1 */
  347. #define GPDMA2_TRIGGER_LPTIM3_CH2 38U /*!< GPDMA2 HW Trigger signal is LPTIM3_CH2 */
  348. #endif /* LPTIM3 */
  349. #if defined (LPTIM4)
  350. #define GPDMA2_TRIGGER_LPTIM4_AIT 39U /*!< GPDMA2 HW Trigger signal is LPTIM4_AIT */
  351. #endif /* LPTIM4 */
  352. #if defined (LPTIM5)
  353. #define GPDMA2_TRIGGER_LPTIM5_CH1 40U /*!< GPDMA2 HW Trigger signal is LPTIM5_CH1 */
  354. #define GPDMA2_TRIGGER_LPTIM5_CH2 41U /*!< GPDMA2 HW Trigger signal is LPTIM5_CH2 */
  355. #endif /* LPTIM5 */
  356. #if defined (LPTIM6)
  357. #define GPDMA2_TRIGGER_LPTIM6_CH1 42U /*!< GPDMA2 HW Trigger signal is LPTIM6_CH1 */
  358. #define GPDMA2_TRIGGER_LPTIM6_CH2 43U /*!< GPDMA2 HW Trigger signal is LPTIM6_CH2 */
  359. #endif /* LPTIM6 */
  360. #if defined (COMP1)
  361. #define GPDMA2_TRIGGER_COMP1_OUT 44U /*!< GPDMA2 HW Trigger signal is COMP1_OUT */
  362. #endif /* COMP1 */
  363. #if defined (STM32H503xx) || defined(STM32H523xx) || defined(STM32H533xx)
  364. #define GPDMA2_TRIGGER_EVENTOUT 45U /*!< GPDMA2 HW Trigger signal is EVENTOUT */
  365. #endif /* STM32H503xx || STM32H523xx || STM32H533xx */
  366. /**
  367. * @}
  368. */
  369. /** @defgroup DMAEx_Node_Type DMAEx Node Type
  370. * @brief DMAEx Node Type
  371. * @{
  372. */
  373. #define DMA_GPDMA_LINEAR_NODE (DMA_CHANNEL_TYPE_GPDMA | DMA_CHANNEL_TYPE_LINEAR_ADDR) /*!< Defines the GPDMA linear addressing node type */
  374. #define DMA_GPDMA_2D_NODE (DMA_CHANNEL_TYPE_GPDMA | DMA_CHANNEL_TYPE_2D_ADDR) /*!< Defines the GPDMA 2 dimension addressing node type */
  375. /**
  376. * @}
  377. */
  378. /** @defgroup DMAEx_Link_Allocated_Port DMAEx Linked-List Allocated Port
  379. * @brief DMAEx Linked-List Allocated Port
  380. * @{
  381. */
  382. #define DMA_LINK_ALLOCATED_PORT0 0x00000000U /*!< Link allocated port 0 */
  383. #define DMA_LINK_ALLOCATED_PORT1 DMA_CCR_LAP /*!< Link allocated port 1 */
  384. /**
  385. * @}
  386. */
  387. /** @defgroup DMAEx_Link_Step_Mode DMAEx Link Step Mode
  388. * @brief DMAEx Link Step Mode
  389. * @{
  390. */
  391. #define DMA_LSM_FULL_EXECUTION 0x00000000U /*!< Channel is executed for the full linked-list */
  392. #define DMA_LSM_1LINK_EXECUTION DMA_CCR_LSM /*!< Channel is executed once for the current LLI */
  393. /**
  394. * @}
  395. */
  396. /**
  397. * @}
  398. */
  399. /* Exported functions ------------------------------------------------------------------------------------------------*/
  400. /** @defgroup DMAEx_Exported_Functions DMAEx Exported Functions
  401. * @brief DMAEx Exported functions
  402. * @{
  403. */
  404. /** @defgroup DMAEx_Exported_Functions_Group1 Linked-List Initialization and De-Initialization Functions
  405. * @brief Linked-List Initialization and De-Initialization Functions
  406. * @{
  407. */
  408. HAL_StatusTypeDef HAL_DMAEx_List_Init(DMA_HandleTypeDef *const hdma);
  409. HAL_StatusTypeDef HAL_DMAEx_List_DeInit(DMA_HandleTypeDef *const hdma);
  410. /**
  411. * @}
  412. */
  413. /** @defgroup DMAEx_Exported_Functions_Group2 Linked-List IO Operation Functions
  414. * @brief Linked-List IO Operation Functions
  415. * @{
  416. */
  417. HAL_StatusTypeDef HAL_DMAEx_List_Start(DMA_HandleTypeDef *const hdma);
  418. HAL_StatusTypeDef HAL_DMAEx_List_Start_IT(DMA_HandleTypeDef *const hdma);
  419. /**
  420. * @}
  421. */
  422. /** @defgroup DMAEx_Exported_Functions_Group3 Linked-List Management Functions
  423. * @brief Linked-List Management Functions
  424. * @{
  425. */
  426. HAL_StatusTypeDef HAL_DMAEx_List_BuildNode(DMA_NodeConfTypeDef const *const pNodeConfig,
  427. DMA_NodeTypeDef *const pNode);
  428. HAL_StatusTypeDef HAL_DMAEx_List_GetNodeConfig(DMA_NodeConfTypeDef *const pNodeConfig,
  429. DMA_NodeTypeDef const *const pNode);
  430. HAL_StatusTypeDef HAL_DMAEx_List_InsertNode(DMA_QListTypeDef *const pQList,
  431. DMA_NodeTypeDef *const pPrevNode,
  432. DMA_NodeTypeDef *const pNewNode);
  433. HAL_StatusTypeDef HAL_DMAEx_List_InsertNode_Head(DMA_QListTypeDef *const pQList,
  434. DMA_NodeTypeDef *const pNewNode);
  435. HAL_StatusTypeDef HAL_DMAEx_List_InsertNode_Tail(DMA_QListTypeDef *const pQList,
  436. DMA_NodeTypeDef *const pNewNode);
  437. HAL_StatusTypeDef HAL_DMAEx_List_RemoveNode(DMA_QListTypeDef *const pQList,
  438. DMA_NodeTypeDef *const pNode);
  439. HAL_StatusTypeDef HAL_DMAEx_List_RemoveNode_Head(DMA_QListTypeDef *const pQList);
  440. HAL_StatusTypeDef HAL_DMAEx_List_RemoveNode_Tail(DMA_QListTypeDef *const pQList);
  441. HAL_StatusTypeDef HAL_DMAEx_List_ReplaceNode(DMA_QListTypeDef *const pQList,
  442. DMA_NodeTypeDef *const pOldNode,
  443. DMA_NodeTypeDef *const pNewNode);
  444. HAL_StatusTypeDef HAL_DMAEx_List_ReplaceNode_Head(DMA_QListTypeDef *const pQList,
  445. DMA_NodeTypeDef *const pNewNode);
  446. HAL_StatusTypeDef HAL_DMAEx_List_ReplaceNode_Tail(DMA_QListTypeDef *const pQList,
  447. DMA_NodeTypeDef *const pNewNode);
  448. HAL_StatusTypeDef HAL_DMAEx_List_ResetQ(DMA_QListTypeDef *const pQList);
  449. HAL_StatusTypeDef HAL_DMAEx_List_InsertQ(DMA_QListTypeDef *const pSrcQList,
  450. DMA_NodeTypeDef const *const pPrevNode,
  451. DMA_QListTypeDef *const pDestQList);
  452. HAL_StatusTypeDef HAL_DMAEx_List_InsertQ_Head(DMA_QListTypeDef *const pSrcQList,
  453. DMA_QListTypeDef *const pDestQList);
  454. HAL_StatusTypeDef HAL_DMAEx_List_InsertQ_Tail(DMA_QListTypeDef *const pSrcQList,
  455. DMA_QListTypeDef *const pDestQList);
  456. HAL_StatusTypeDef HAL_DMAEx_List_SetCircularModeConfig(DMA_QListTypeDef *const pQList,
  457. DMA_NodeTypeDef *const pFirstCircularNode);
  458. HAL_StatusTypeDef HAL_DMAEx_List_SetCircularMode(DMA_QListTypeDef *const pQList);
  459. HAL_StatusTypeDef HAL_DMAEx_List_ClearCircularMode(DMA_QListTypeDef *const pQList);
  460. HAL_StatusTypeDef HAL_DMAEx_List_ConvertQToDynamic(DMA_QListTypeDef *const pQList);
  461. HAL_StatusTypeDef HAL_DMAEx_List_ConvertQToStatic(DMA_QListTypeDef *const pQList);
  462. HAL_StatusTypeDef HAL_DMAEx_List_LinkQ(DMA_HandleTypeDef *const hdma,
  463. DMA_QListTypeDef *const pQList);
  464. HAL_StatusTypeDef HAL_DMAEx_List_UnLinkQ(DMA_HandleTypeDef *const hdma);
  465. /**
  466. * @}
  467. */
  468. /** @defgroup DMAEx_Exported_Functions_Group4 Data Handling, Repeated Block and Trigger Configuration Functions
  469. * @brief Data Handling, Repeated Block and Trigger Configuration Functions
  470. * @{
  471. */
  472. HAL_StatusTypeDef HAL_DMAEx_ConfigDataHandling(DMA_HandleTypeDef *const hdma,
  473. DMA_DataHandlingConfTypeDef const *const pConfigDataHandling);
  474. HAL_StatusTypeDef HAL_DMAEx_ConfigTrigger(DMA_HandleTypeDef *const hdma,
  475. DMA_TriggerConfTypeDef const *const pConfigTrigger);
  476. HAL_StatusTypeDef HAL_DMAEx_ConfigRepeatBlock(DMA_HandleTypeDef *const hdma,
  477. DMA_RepeatBlockConfTypeDef const *const pConfigRepeatBlock);
  478. /**
  479. * @}
  480. */
  481. /** @defgroup DMAEx_Exported_Functions_Group5 Suspend and Resume Operation Functions
  482. * @brief Suspend and Resume Operation Functions
  483. * @{
  484. */
  485. HAL_StatusTypeDef HAL_DMAEx_Suspend(DMA_HandleTypeDef *const hdma);
  486. HAL_StatusTypeDef HAL_DMAEx_Suspend_IT(DMA_HandleTypeDef *const hdma);
  487. HAL_StatusTypeDef HAL_DMAEx_Resume(DMA_HandleTypeDef *const hdma);
  488. /**
  489. * @}
  490. */
  491. /** @defgroup DMAEx_Exported_Functions_Group6 FIFO Status Function
  492. * @brief FIFO Status Function
  493. * @{
  494. */
  495. uint32_t HAL_DMAEx_GetFifoLevel(DMA_HandleTypeDef const *const hdma);
  496. /**
  497. * @}
  498. */
  499. /**
  500. * @}
  501. */
  502. /* Private types -----------------------------------------------------------------------------------------------------*/
  503. /** @defgroup DMAEx_Private_Types DMAEx Private Types
  504. * @brief DMAEx Private Types
  505. * @{
  506. */
  507. /**
  508. * @brief DMA Node in Queue Information Structure Definition.
  509. */
  510. typedef struct
  511. {
  512. uint32_t cllr_offset; /* CLLR register offset */
  513. uint32_t previousnode_addr; /* Previous node address */
  514. uint32_t currentnode_pos; /* Current node position */
  515. uint32_t currentnode_addr; /* Current node address */
  516. uint32_t nextnode_addr; /* Next node address */
  517. } DMA_NodeInQInfoTypeDef;
  518. /**
  519. * @}
  520. */
  521. /* Private constants -------------------------------------------------------------------------------------------------*/
  522. /** @defgroup DMAEx_Private_Constants DMAEx Private Constants
  523. * @brief DMAEx Private Constants
  524. * @{
  525. */
  526. #define DMA_LINKEDLIST (0x0080U) /* DMA channel linked-list mode */
  527. #define DMA_CHANNEL_TYPE_LINEAR_ADDR (0x0001U) /* DMA channel linear addressing mode */
  528. #define DMA_CHANNEL_TYPE_2D_ADDR (0x0002U) /* DMA channel 2D addressing mode */
  529. #define DMA_CHANNEL_TYPE_GPDMA (0x0020U) /* GPDMA channel node */
  530. #define NODE_TYPE_MASK (0x00FFU) /* DMA channel node type */
  531. #define NODE_CLLR_IDX (0x0700U) /* DMA channel node CLLR index mask */
  532. #define NODE_CLLR_IDX_POS (0x0008U) /* DMA channel node CLLR index position */
  533. #define NODE_MAXIMUM_SIZE (0x0008U) /* Amount of registers of the node */
  534. #define NODE_STATIC_FORMAT (0x0000U) /* DMA channel node static format */
  535. #define NODE_DYNAMIC_FORMAT (0x0001U) /* DMA channel node dynamic format */
  536. #define UPDATE_CLLR_POSITION (0x0000U) /* DMA channel update CLLR position */
  537. #define UPDATE_CLLR_VALUE (0x0001U) /* DMA channel update CLLR value */
  538. #define LASTNODE_ISNOT_CIRCULAR (0x0000U) /* Last node is not first circular node */
  539. #define LASTNODE_IS_CIRCULAR (0x0001U) /* Last node is first circular node */
  540. #define QUEUE_TYPE_STATIC (0x0000U) /* DMA channel static queue */
  541. #define QUEUE_TYPE_DYNAMIC (0x0001U) /* DMA channel dynamic queue */
  542. #define NODE_CTR1_DEFAULT_OFFSET (0x0000U) /* CTR1 default offset */
  543. #define NODE_CTR2_DEFAULT_OFFSET (0x0001U) /* CTR2 default offset */
  544. #define NODE_CBR1_DEFAULT_OFFSET (0x0002U) /* CBR1 default offset */
  545. #define NODE_CSAR_DEFAULT_OFFSET (0x0003U) /* CSAR default offset */
  546. #define NODE_CDAR_DEFAULT_OFFSET (0x0004U) /* CDAR default offset */
  547. #define NODE_CTR3_DEFAULT_OFFSET (0x0005U) /* CTR3 2D addressing default offset */
  548. #define NODE_CBR2_DEFAULT_OFFSET (0x0006U) /* CBR2 2D addressing default offset */
  549. #define NODE_CLLR_2D_DEFAULT_OFFSET (0x0007U) /* CLLR 2D addressing default offset */
  550. #define NODE_CLLR_LINEAR_DEFAULT_OFFSET (0x0005U) /* CLLR linear addressing default offset */
  551. #define DMA_BURST_ADDR_OFFSET_MIN (-8192L) /* DMA burst minimum address offset */
  552. #define DMA_BURST_ADDR_OFFSET_MAX (8192L) /* DMA burst maximum address offset */
  553. #define DMA_BLOCK_ADDR_OFFSET_MIN (-65536L) /* DMA block minimum address offset */
  554. #define DMA_BLOCK_ADDR_OFFSET_MAX (65536L) /* DMA block maximum address offset */
  555. /**
  556. * @}
  557. */
  558. /* Private macros ----------------------------------------------------------------------------------------------------*/
  559. /** @defgroup DMAEx_Private_Macros DMAEx Private Macros
  560. * @brief DMAEx Private Macros
  561. * @{
  562. */
  563. #define IS_DMA_DATA_ALIGNMENT(ALIGNMENT) \
  564. (((ALIGNMENT) == DMA_DATA_RIGHTALIGN_ZEROPADDED) || \
  565. ((ALIGNMENT) == DMA_DATA_RIGHTALIGN_SIGNEXT) || \
  566. ((ALIGNMENT) == DMA_DATA_PACK))
  567. #define IS_DMA_DATA_EXCHANGE(EXCHANGE) \
  568. (((EXCHANGE) & (~(DMA_EXCHANGE_SRC_BYTE | DMA_EXCHANGE_DEST_BYTE | DMA_EXCHANGE_DEST_HALFWORD))) == 0U)
  569. #define IS_DMA_REPEAT_COUNT(COUNT) \
  570. (((COUNT) > 0U) && ((COUNT) <= (DMA_CBR1_BRC >> DMA_CBR1_BRC_Pos)))
  571. #define IS_DMA_BURST_ADDR_OFFSET(BURST_ADDR_OFFSET) \
  572. (((BURST_ADDR_OFFSET) > DMA_BURST_ADDR_OFFSET_MIN) && \
  573. ((BURST_ADDR_OFFSET) < DMA_BURST_ADDR_OFFSET_MAX))
  574. #define IS_DMA_BLOCK_ADDR_OFFSET(BLOCK_ADDR_OFFSET) \
  575. (((BLOCK_ADDR_OFFSET) > DMA_BLOCK_ADDR_OFFSET_MIN) && \
  576. ((BLOCK_ADDR_OFFSET) < DMA_BLOCK_ADDR_OFFSET_MAX))
  577. #define IS_DMA_LINK_ALLOCATED_PORT(LINK_ALLOCATED_PORT) \
  578. (((LINK_ALLOCATED_PORT) & (~(DMA_CCR_LAP))) == 0U)
  579. #define IS_DMA_LINK_STEP_MODE(MODE) \
  580. (((MODE) == DMA_LSM_FULL_EXECUTION) || \
  581. ((MODE) == DMA_LSM_1LINK_EXECUTION))
  582. #define IS_DMA_TRIGGER_MODE(MODE) \
  583. (((MODE) == DMA_TRIGM_BLOCK_TRANSFER) || \
  584. ((MODE) == DMA_TRIGM_REPEATED_BLOCK_TRANSFER) || \
  585. ((MODE) == DMA_TRIGM_LLI_LINK_TRANSFER) || \
  586. ((MODE) == DMA_TRIGM_SINGLE_BURST_TRANSFER))
  587. #define IS_DMA_TCEM_LINKEDLIST_EVENT_MODE(MODE) \
  588. (((MODE) == DMA_TCEM_BLOCK_TRANSFER) || \
  589. ((MODE) == DMA_TCEM_REPEATED_BLOCK_TRANSFER) || \
  590. ((MODE) == DMA_TCEM_EACH_LL_ITEM_TRANSFER) || \
  591. ((MODE) == DMA_TCEM_LAST_LL_ITEM_TRANSFER))
  592. #define IS_DMA_LINKEDLIST_MODE(MODE) \
  593. (((MODE) == DMA_LINKEDLIST_NORMAL) || \
  594. ((MODE) == DMA_LINKEDLIST_CIRCULAR))
  595. #define IS_DMA_TRIGGER_POLARITY(POLARITY) \
  596. (((POLARITY) == DMA_TRIG_POLARITY_MASKED) || \
  597. ((POLARITY) == DMA_TRIG_POLARITY_RISING) || \
  598. ((POLARITY) == DMA_TRIG_POLARITY_FALLING))
  599. #if defined (I3C2)
  600. #define IS_DMA_TRIGGER_SELECTION(TRIGGER) ((TRIGGER) <= GPDMA1_TRIGGER_EVENTOUT)
  601. #else
  602. #define IS_DMA_TRIGGER_SELECTION(TRIGGER) ((TRIGGER) <= GPDMA1_TRIGGER_LPTIM6_CH2)
  603. #endif /* I3C2 */
  604. #define IS_DMA_NODE_TYPE(TYPE) \
  605. (((TYPE) == DMA_GPDMA_LINEAR_NODE) || \
  606. ((TYPE) == DMA_GPDMA_2D_NODE))
  607. /**
  608. * @}
  609. */
  610. /* Private functions -------------------------------------------------------------------------------------------------*/
  611. /** @defgroup DMAEx_Private_Functions DMAEx Private Functions
  612. * @brief DMAEx Private Functions
  613. * @{
  614. */
  615. /**
  616. * @}
  617. */
  618. /**
  619. * @}
  620. */
  621. /**
  622. * @}
  623. */
  624. /**
  625. * @}
  626. */
  627. #ifdef __cplusplus
  628. }
  629. #endif /* __cplusplus */
  630. #endif /* STM32H5xx_HAL_DMA_EX_H */