stm32f7xx_hal_tim_ex.h 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662
  1. /**
  2. ******************************************************************************
  3. * @file stm32f7xx_hal_tim_ex.h
  4. * @author MCD Application Team
  5. * @brief Header file of TIM HAL Extension module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
  10. *
  11. * Redistribution and use in source and binary forms, with or without modification,
  12. * are permitted provided that the following conditions are met:
  13. * 1. Redistributions of source code must retain the above copyright notice,
  14. * this list of conditions and the following disclaimer.
  15. * 2. Redistributions in binary form must reproduce the above copyright notice,
  16. * this list of conditions and the following disclaimer in the documentation
  17. * and/or other materials provided with the distribution.
  18. * 3. Neither the name of STMicroelectronics nor the names of its contributors
  19. * may be used to endorse or promote products derived from this software
  20. * without specific prior written permission.
  21. *
  22. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  23. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  25. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  26. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  28. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  29. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  30. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  31. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32. *
  33. ******************************************************************************
  34. */
  35. /* Define to prevent recursive inclusion -------------------------------------*/
  36. #ifndef __STM32F7xx_HAL_TIM_EX_H
  37. #define __STM32F7xx_HAL_TIM_EX_H
  38. #ifdef __cplusplus
  39. extern "C" {
  40. #endif
  41. /* Includes ------------------------------------------------------------------*/
  42. #include "stm32f7xx_hal_def.h"
  43. /** @addtogroup STM32F7xx_HAL_Driver
  44. * @{
  45. */
  46. /** @addtogroup TIMEx
  47. * @{
  48. */
  49. /* Exported types ------------------------------------------------------------*/
  50. /** @defgroup TIMEx_Exported_Types TIM Exported Types
  51. * @{
  52. */
  53. /**
  54. * @brief TIM Hall sensor Configuration Structure definition
  55. */
  56. typedef struct
  57. {
  58. uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal.
  59. This parameter can be a value of @ref TIM_Input_Capture_Polarity */
  60. uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler.
  61. This parameter can be a value of @ref TIM_Input_Capture_Prescaler */
  62. uint32_t IC1Filter; /*!< Specifies the input capture filter.
  63. This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
  64. uint32_t Commutation_Delay; /*!< Specifies the pulse value to be loaded into the Capture Compare Register.
  65. This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */
  66. } TIM_HallSensor_InitTypeDef;
  67. /**
  68. * @brief TIM Master configuration Structure definition
  69. */
  70. typedef struct {
  71. uint32_t MasterOutputTrigger; /*!< Trigger output (TRGO) selection.
  72. This parameter can be a value of @ref TIM_Master_Mode_Selection */
  73. uint32_t MasterOutputTrigger2; /*!< Trigger output2 (TRGO2) selection
  74. This parameter can be a value of @ref TIMEx_Master_Mode_Selection_2 */
  75. uint32_t MasterSlaveMode; /*!< Master/slave mode selection.
  76. This parameter can be a value of @ref TIM_Master_Slave_Mode */
  77. }TIM_MasterConfigTypeDef;
  78. /**
  79. * @brief TIM Break input(s) and Dead time configuration Structure definition
  80. * @note 2 break inputs can be configured (BKIN and BKIN2) with configurable
  81. * filter and polarity.
  82. */
  83. typedef struct
  84. {
  85. uint32_t OffStateRunMode; /*!< TIM off state in run mode.
  86. This parameter can be a value of @ref TIM_OSSR_Off_State_Selection_for_Run_mode_state */
  87. uint32_t OffStateIDLEMode; /*!< TIM off state in IDLE mode.
  88. This parameter can be a value of @ref TIM_OSSI_Off_State_Selection_for_Idle_mode_state */
  89. uint32_t LockLevel; /*!< TIM Lock level.
  90. This parameter can be a value of @ref TIM_Lock_level */
  91. uint32_t DeadTime; /*!< TIM dead Time.
  92. This parameter can be a number between Min_Data = 0x00 and Max_Data = 0xFF */
  93. uint32_t BreakState; /*!< TIM Break State.
  94. This parameter can be a value of @ref TIM_Break_Input_enable_disable */
  95. uint32_t BreakPolarity; /*!< TIM Break input polarity.
  96. This parameter can be a value of @ref TIM_Break_Polarity */
  97. uint32_t BreakFilter; /*!< Specifies the break input filter.
  98. This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
  99. uint32_t Break2State; /*!< TIM Break2 State
  100. This parameter can be a value of @ref TIMEx_Break2_Input_enable_disable */
  101. uint32_t Break2Polarity; /*!< TIM Break2 input polarity
  102. This parameter can be a value of @ref TIMEx_Break2_Polarity */
  103. uint32_t Break2Filter; /*!< TIM break2 input filter.
  104. This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
  105. uint32_t AutomaticOutput; /*!< TIM Automatic Output Enable state
  106. This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */
  107. } TIM_BreakDeadTimeConfigTypeDef;
  108. #if defined (STM32F765xx) || defined(STM32F767xx) || defined(STM32F769xx) || defined(STM32F777xx) || defined(STM32F779xx)
  109. /**
  110. * @brief TIM Break/Break2 input configuration
  111. */
  112. typedef struct {
  113. uint32_t Source; /*!< Specifies the source of the timer break input.
  114. This parameter can be a value of @ref TIMEx_Break_Input_Source */
  115. uint32_t Enable; /*!< Specifies whether or not the break input source is enabled.
  116. This parameter can be a value of @ref TIMEx_Break_Input_Source_Enable */
  117. uint32_t Polarity; /*!< Specifies the break input source polarity.
  118. This parameter can be a value of @ref TIMEx_Break_Input_Source_Polarity
  119. Not relevant when analog watchdog output of the DFSDM1 used as break input source */
  120. } TIMEx_BreakInputConfigTypeDef;
  121. #endif /* STM32F767xx || STM32F769xx || STM32F777xx || STM32F779xx */
  122. /**
  123. * @}
  124. */
  125. /* Exported constants --------------------------------------------------------*/
  126. /** @defgroup TIMEx_Exported_Constants TIMEx Exported Constants
  127. * @{
  128. */
  129. /** @defgroup TIMEx_Channel TIMEx Channel
  130. * @{
  131. */
  132. #define TIM_CHANNEL_1 ((uint32_t)0x0000U)
  133. #define TIM_CHANNEL_2 ((uint32_t)0x0004U)
  134. #define TIM_CHANNEL_3 ((uint32_t)0x0008U)
  135. #define TIM_CHANNEL_4 ((uint32_t)0x000CU)
  136. #define TIM_CHANNEL_5 ((uint32_t)0x0010U)
  137. #define TIM_CHANNEL_6 ((uint32_t)0x0014U)
  138. #define TIM_CHANNEL_ALL ((uint32_t)0x003CU)
  139. /**
  140. * @}
  141. */
  142. /** @defgroup TIMEx_Output_Compare_and_PWM_modes TIMEx Output Compare and PWM Modes
  143. * @{
  144. */
  145. #define TIM_OCMODE_TIMING ((uint32_t)0x0000U)
  146. #define TIM_OCMODE_ACTIVE ((uint32_t)TIM_CCMR1_OC1M_0)
  147. #define TIM_OCMODE_INACTIVE ((uint32_t)TIM_CCMR1_OC1M_1)
  148. #define TIM_OCMODE_TOGGLE ((uint32_t)TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0)
  149. #define TIM_OCMODE_PWM1 ((uint32_t)TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1)
  150. #define TIM_OCMODE_PWM2 ((uint32_t)TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0)
  151. #define TIM_OCMODE_FORCED_ACTIVE ((uint32_t)TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_0)
  152. #define TIM_OCMODE_FORCED_INACTIVE ((uint32_t)TIM_CCMR1_OC1M_2)
  153. #define TIM_OCMODE_RETRIGERRABLE_OPM1 ((uint32_t)TIM_CCMR1_OC1M_3)
  154. #define TIM_OCMODE_RETRIGERRABLE_OPM2 ((uint32_t)TIM_CCMR1_OC1M_3 | TIM_CCMR1_OC1M_0)
  155. #define TIM_OCMODE_COMBINED_PWM1 ((uint32_t)TIM_CCMR1_OC1M_3 | TIM_CCMR1_OC1M_2)
  156. #define TIM_OCMODE_COMBINED_PWM2 ((uint32_t)TIM_CCMR1_OC1M_3 | TIM_CCMR1_OC1M_0 | TIM_CCMR1_OC1M_2)
  157. #define TIM_OCMODE_ASSYMETRIC_PWM1 ((uint32_t)TIM_CCMR1_OC1M_3 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2)
  158. #define TIM_OCMODE_ASSYMETRIC_PWM2 ((uint32_t)TIM_CCMR1_OC1M_3 | TIM_CCMR1_OC1M)
  159. /**
  160. * @}
  161. */
  162. /** @defgroup TIMEx_Remap TIMEx Remap
  163. * @{
  164. */
  165. #define TIM_TIM2_TIM8_TRGO (0x00000000U)
  166. #define TIM_TIM2_ETH_PTP (0x00000400U)
  167. #define TIM_TIM2_USBFS_SOF (0x00000800U)
  168. #define TIM_TIM2_USBHS_SOF (0x00000C00U)
  169. #define TIM_TIM5_GPIO (0x00000000U)
  170. #define TIM_TIM5_LSI (0x00000040U)
  171. #define TIM_TIM5_LSE (0x00000080U)
  172. #define TIM_TIM5_RTC (0x000000C0U)
  173. #define TIM_TIM11_GPIO (0x00000000U)
  174. #define TIM_TIM11_SPDIFRX (0x00000001U)
  175. #define TIM_TIM11_HSE (0x00000002U)
  176. #define TIM_TIM11_MCO1 (0x00000003U)
  177. /**
  178. * @}
  179. */
  180. /** @defgroup TIMEx_ClearInput_Source TIMEx Clear Input Source
  181. * @{
  182. */
  183. #define TIM_CLEARINPUTSOURCE_ETR ((uint32_t)0x0001U)
  184. #define TIM_CLEARINPUTSOURCE_NONE ((uint32_t)0x0000U)
  185. /**
  186. * @}
  187. */
  188. /** @defgroup TIMEx_Break2_Input_enable_disable TIMEx Break input 2 Enable
  189. * @{
  190. */
  191. #define TIM_BREAK2_DISABLE ((uint32_t)0x00000000U)
  192. #define TIM_BREAK2_ENABLE ((uint32_t)TIM_BDTR_BK2E)
  193. /**
  194. * @}
  195. */
  196. /** @defgroup TIMEx_Break2_Polarity TIMEx Break2 Polarity
  197. * @{
  198. */
  199. #define TIM_BREAK2POLARITY_LOW ((uint32_t)0x00000000U)
  200. #define TIM_BREAK2POLARITY_HIGH (TIM_BDTR_BK2P)
  201. /**
  202. * @}
  203. */
  204. /** @defgroup TIMEx_Group_Channel5 TIMEx Group Channel 5 and Channel 1, 2 or 3
  205. * @{
  206. */
  207. #define TIM_GROUPCH5_NONE ((uint32_t)0x00000000U) /* !< No effect of OC5REF on OC1REFC, OC2REFC and OC3REFC */
  208. #define TIM_GROUPCH5_OC1REFC (TIM_CCR5_GC5C1) /* !< OC1REFC is the logical AND of OC1REFC and OC5REF */
  209. #define TIM_GROUPCH5_OC2REFC (TIM_CCR5_GC5C2) /* !< OC2REFC is the logical AND of OC2REFC and OC5REF */
  210. #define TIM_GROUPCH5_OC3REFC (TIM_CCR5_GC5C3) /* !< OC3REFC is the logical AND of OC3REFC and OC5REF */
  211. /**
  212. * @}
  213. */
  214. /** @defgroup TIMEx_Master_Mode_Selection_2 TIMEx Master Mode Selection 2 (TRGO2)
  215. * @{
  216. */
  217. #define TIM_TRGO2_RESET ((uint32_t)0x00000000U)
  218. #define TIM_TRGO2_ENABLE ((uint32_t)(TIM_CR2_MMS2_0))
  219. #define TIM_TRGO2_UPDATE ((uint32_t)(TIM_CR2_MMS2_1))
  220. #define TIM_TRGO2_OC1 ((uint32_t)(TIM_CR2_MMS2_1 | TIM_CR2_MMS2_0))
  221. #define TIM_TRGO2_OC1REF ((uint32_t)(TIM_CR2_MMS2_2))
  222. #define TIM_TRGO2_OC2REF ((uint32_t)(TIM_CR2_MMS2_2 | TIM_CR2_MMS2_0))
  223. #define TIM_TRGO2_OC3REF ((uint32_t)(TIM_CR2_MMS2_2 | TIM_CR2_MMS2_1))
  224. #define TIM_TRGO2_OC4REF ((uint32_t)(TIM_CR2_MMS2_2 | TIM_CR2_MMS2_1 | TIM_CR2_MMS2_0))
  225. #define TIM_TRGO2_OC5REF ((uint32_t)(TIM_CR2_MMS2_3))
  226. #define TIM_TRGO2_OC6REF ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_0))
  227. #define TIM_TRGO2_OC4REF_RISINGFALLING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_1))
  228. #define TIM_TRGO2_OC6REF_RISINGFALLING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_1 | TIM_CR2_MMS2_0))
  229. #define TIM_TRGO2_OC4REF_RISING_OC6REF_RISING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_2))
  230. #define TIM_TRGO2_OC4REF_RISING_OC6REF_FALLING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_2 | TIM_CR2_MMS2_0))
  231. #define TIM_TRGO2_OC5REF_RISING_OC6REF_RISING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_2 |TIM_CR2_MMS2_1))
  232. #define TIM_TRGO2_OC5REF_RISING_OC6REF_FALLING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_2 | TIM_CR2_MMS2_1 | TIM_CR2_MMS2_0))
  233. /**
  234. * @}
  235. */
  236. /** @defgroup TIMEx_Slave_Mode TIMEx Slave mode
  237. * @{
  238. */
  239. #define TIM_SLAVEMODE_DISABLE ((uint32_t)0x0000U)
  240. #define TIM_SLAVEMODE_RESET ((uint32_t)(TIM_SMCR_SMS_2))
  241. #define TIM_SLAVEMODE_GATED ((uint32_t)(TIM_SMCR_SMS_2 | TIM_SMCR_SMS_0))
  242. #define TIM_SLAVEMODE_TRIGGER ((uint32_t)(TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1))
  243. #define TIM_SLAVEMODE_EXTERNAL1 ((uint32_t)(TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0))
  244. #define TIM_SLAVEMODE_COMBINED_RESETTRIGGER ((uint32_t)(TIM_SMCR_SMS_3))
  245. /**
  246. * @}
  247. */
  248. #if defined(STM32F765xx) || defined(STM32F767xx) || defined(STM32F769xx) || defined(STM32F777xx) || defined(STM32F779xx)
  249. /** @defgroup TIMEx_Break_Input TIM Extended Break input
  250. * @{
  251. */
  252. #define TIM_BREAKINPUT_BRK ((uint32_t)0x00000001U) /* !< Timer break input */
  253. #define TIM_BREAKINPUT_BRK2 ((uint32_t)0x00000002U) /* !< Timer break2 input */
  254. /**
  255. * @}
  256. */
  257. /** @defgroup TIMEx_Break_Input_Source TIM Extended Break input source
  258. * @{
  259. */
  260. #define TIM_BREAKINPUTSOURCE_BKIN ((uint32_t)0x00000001U) /* !< An external source (GPIO) is connected to the BKIN pin */
  261. #define TIM_BREAKINPUTSOURCE_DFSDM1 ((uint32_t)0x00000008U) /* !< The analog watchdog output of the DFSDM1 peripheral is connected to the break input */
  262. /**
  263. * @}
  264. */
  265. /** @defgroup TIMEx_Break_Input_Source_Enable TIM Extended Break input source enabling
  266. * @{
  267. */
  268. #define TIM_BREAKINPUTSOURCE_DISABLE ((uint32_t)0x00000000U) /* !< Break input source is disabled */
  269. #define TIM_BREAKINPUTSOURCE_ENABLE ((uint32_t)0x00000001U) /* !< Break input source is enabled */
  270. /**
  271. * @}
  272. */
  273. /** @defgroup TIMEx_Break_Input_Source_Polarity TIM Extended Break input polarity
  274. * @{
  275. */
  276. #define TIM_BREAKINPUTSOURCE_POLARITY_LOW ((uint32_t)(0x00000001)) /* !< Break input source is active low */
  277. #define TIM_BREAKINPUTSOURCE_POLARITY_HIGH ((uint32_t)(0x00000000)) /* !< Break input source is active_high */
  278. /**
  279. * @}
  280. */
  281. /**
  282. * @}
  283. */
  284. #endif /* STM32F767xx || STM32F769xx || STM32F777xx || STM32F779xx */
  285. /**
  286. * @}
  287. */
  288. /* Exported macro ------------------------------------------------------------*/
  289. /** @defgroup TIMEx_Exported_Macros TIMEx Exported Macros
  290. * @{
  291. */
  292. /**
  293. * @brief Sets the TIM Capture Compare Register value on runtime without
  294. * calling another time ConfigChannel function.
  295. * @param __HANDLE__ TIM handle.
  296. * @param __CHANNEL__ TIM Channels to be configured.
  297. * This parameter can be one of the following values:
  298. * @arg TIM_CHANNEL_1: TIM Channel 1 selected
  299. * @arg TIM_CHANNEL_2: TIM Channel 2 selected
  300. * @arg TIM_CHANNEL_3: TIM Channel 3 selected
  301. * @arg TIM_CHANNEL_4: TIM Channel 4 selected
  302. * @arg TIM_CHANNEL_5: TIM Channel 5 selected
  303. * @arg TIM_CHANNEL_6: TIM Channel 6 selected
  304. * @param __COMPARE__ specifies the Capture Compare register new value.
  305. * @retval None
  306. */
  307. #define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \
  308. (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
  309. ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
  310. ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
  311. ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
  312. ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
  313. ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
  314. /**
  315. * @brief Gets the TIM Capture Compare Register value on runtime
  316. * @param __HANDLE__ TIM handle.
  317. * @param __CHANNEL__ TIM Channel associated with the capture compare register
  318. * This parameter can be one of the following values:
  319. * @arg TIM_CHANNEL_1: get capture/compare 1 register value
  320. * @arg TIM_CHANNEL_2: get capture/compare 2 register value
  321. * @arg TIM_CHANNEL_3: get capture/compare 3 register value
  322. * @arg TIM_CHANNEL_4: get capture/compare 4 register value
  323. * @arg TIM_CHANNEL_5: get capture/compare 5 register value
  324. * @arg TIM_CHANNEL_6: get capture/compare 6 register value
  325. * @retval None
  326. */
  327. #define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \
  328. (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
  329. ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
  330. ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
  331. ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
  332. ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
  333. ((__HANDLE__)->Instance->CCR6))
  334. /**
  335. * @brief Sets the TIM Output compare preload.
  336. * @param __HANDLE__ TIM handle.
  337. * @param __CHANNEL__ TIM Channels to be configured.
  338. * This parameter can be one of the following values:
  339. * @arg TIM_CHANNEL_1: TIM Channel 1 selected
  340. * @arg TIM_CHANNEL_2: TIM Channel 2 selected
  341. * @arg TIM_CHANNEL_3: TIM Channel 3 selected
  342. * @arg TIM_CHANNEL_4: TIM Channel 4 selected
  343. * @arg TIM_CHANNEL_5: TIM Channel 5 selected
  344. * @arg TIM_CHANNEL_6: TIM Channel 6 selected
  345. * @retval None
  346. */
  347. #define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
  348. (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
  349. ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
  350. ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
  351. ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
  352. ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
  353. ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
  354. /**
  355. * @brief Resets the TIM Output compare preload.
  356. * @param __HANDLE__ TIM handle.
  357. * @param __CHANNEL__ TIM Channels to be configured.
  358. * This parameter can be one of the following values:
  359. * @arg TIM_CHANNEL_1: TIM Channel 1 selected
  360. * @arg TIM_CHANNEL_2: TIM Channel 2 selected
  361. * @arg TIM_CHANNEL_3: TIM Channel 3 selected
  362. * @arg TIM_CHANNEL_4: TIM Channel 4 selected
  363. * @arg TIM_CHANNEL_5: TIM Channel 5 selected
  364. * @arg TIM_CHANNEL_6: TIM Channel 6 selected
  365. * @retval None
  366. */
  367. #define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
  368. (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC1PE) :\
  369. ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC2PE) :\
  370. ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC3PE) :\
  371. ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC4PE) :\
  372. ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC5PE) :\
  373. ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC6PE))
  374. /**
  375. * @}
  376. */
  377. /* Exported functions --------------------------------------------------------*/
  378. /** @addtogroup TIMEx_Exported_Functions
  379. * @{
  380. */
  381. /** @addtogroup TIMEx_Exported_Functions_Group1
  382. * @{
  383. */
  384. /* Timer Hall Sensor functions **********************************************/
  385. HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef* htim, TIM_HallSensor_InitTypeDef* sConfig);
  386. HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef* htim);
  387. void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef* htim);
  388. void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef* htim);
  389. /* Blocking mode: Polling */
  390. HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef* htim);
  391. HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef* htim);
  392. /* Non-Blocking mode: Interrupt */
  393. HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef* htim);
  394. HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef* htim);
  395. /* Non-Blocking mode: DMA */
  396. HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef* htim, uint32_t *pData, uint16_t Length);
  397. HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef* htim);
  398. /**
  399. * @}
  400. */
  401. /** @addtogroup TIMEx_Exported_Functions_Group2
  402. * @{
  403. */
  404. /* Timer Complementary Output Compare functions *****************************/
  405. /* Blocking mode: Polling */
  406. HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef* htim, uint32_t Channel);
  407. HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef* htim, uint32_t Channel);
  408. /* Non-Blocking mode: Interrupt */
  409. HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef* htim, uint32_t Channel);
  410. HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef* htim, uint32_t Channel);
  411. /* Non-Blocking mode: DMA */
  412. HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef* htim, uint32_t Channel, uint32_t *pData, uint16_t Length);
  413. HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef* htim, uint32_t Channel);
  414. /**
  415. * @}
  416. */
  417. /** @addtogroup TIMEx_Exported_Functions_Group3
  418. * @{
  419. */
  420. /* Timer Complementary PWM functions ****************************************/
  421. /* Blocking mode: Polling */
  422. HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef* htim, uint32_t Channel);
  423. HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef* htim, uint32_t Channel);
  424. /* Non-Blocking mode: Interrupt */
  425. HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef* htim, uint32_t Channel);
  426. HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef* htim, uint32_t Channel);
  427. /* Non-Blocking mode: DMA */
  428. HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef* htim, uint32_t Channel, uint32_t *pData, uint16_t Length);
  429. HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef* htim, uint32_t Channel);
  430. /**
  431. * @}
  432. */
  433. /** @addtogroup TIMEx_Exported_Functions_Group4
  434. * @{
  435. */
  436. /* Timer Complementary One Pulse functions **********************************/
  437. /* Blocking mode: Polling */
  438. HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef* htim, uint32_t OutputChannel);
  439. HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef* htim, uint32_t OutputChannel);
  440. /* Non-Blocking mode: Interrupt */
  441. HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef* htim, uint32_t OutputChannel);
  442. HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef* htim, uint32_t OutputChannel);
  443. /**
  444. * @}
  445. */
  446. /** @addtogroup TIMEx_Exported_Functions_Group5
  447. * @{
  448. */
  449. /* Extension Control functions ************************************************/
  450. HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent(TIM_HandleTypeDef* htim, uint32_t InputTrigger, uint32_t CommutationSource);
  451. HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_IT(TIM_HandleTypeDef* htim, uint32_t InputTrigger, uint32_t CommutationSource);
  452. HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_DMA(TIM_HandleTypeDef* htim, uint32_t InputTrigger, uint32_t CommutationSource);
  453. HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef* htim, TIM_MasterConfigTypeDef * sMasterConfig);
  454. HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef* htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
  455. #if defined (STM32F765xx) || defined(STM32F767xx) || defined(STM32F769xx) || defined(STM32F777xx) || defined(STM32F779xx)
  456. HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput, TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
  457. #endif /* STM32F767xx || STM32F769xx || STM32F777xx || STM32F779xx */
  458. HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef* htim, uint32_t Remap);
  459. HAL_StatusTypeDef HAL_TIMEx_GroupChannel5(TIM_HandleTypeDef *htim, uint32_t OCRef);
  460. /**
  461. * @}
  462. */
  463. /** @addtogroup TIMEx_Exported_Functions_Group6
  464. * @{
  465. */
  466. /* Extension Callback *********************************************************/
  467. void HAL_TIMEx_CommutationCallback(TIM_HandleTypeDef* htim);
  468. void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef* htim);
  469. void HAL_TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma);
  470. /**
  471. * @}
  472. */
  473. /** @addtogroup TIMEx_Exported_Functions_Group7
  474. * @{
  475. */
  476. /* Extension Peripheral State functions **************************************/
  477. HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef* htim);
  478. /**
  479. * @}
  480. */
  481. /**
  482. * @}
  483. */
  484. /* Private types -------------------------------------------------------------*/
  485. /* Private variables ---------------------------------------------------------*/
  486. /* Private constants ---------------------------------------------------------*/
  487. /* Private macros ------------------------------------------------------------*/
  488. /** @defgroup TIMEx_Private_Macros TIMEx Private Macros
  489. * @{
  490. */
  491. #define IS_TIM_CHANNELS(CHANNEL) (((CHANNEL) == TIM_CHANNEL_1) || \
  492. ((CHANNEL) == TIM_CHANNEL_2) || \
  493. ((CHANNEL) == TIM_CHANNEL_3) || \
  494. ((CHANNEL) == TIM_CHANNEL_4) || \
  495. ((CHANNEL) == TIM_CHANNEL_5) || \
  496. ((CHANNEL) == TIM_CHANNEL_6) || \
  497. ((CHANNEL) == TIM_CHANNEL_ALL))
  498. #define IS_TIM_PWMI_CHANNELS(CHANNEL) (((CHANNEL) == TIM_CHANNEL_1) || \
  499. ((CHANNEL) == TIM_CHANNEL_2))
  500. #define IS_TIM_OPM_CHANNELS(CHANNEL) (((CHANNEL) == TIM_CHANNEL_1) || \
  501. ((CHANNEL) == TIM_CHANNEL_2))
  502. #define IS_TIM_COMPLEMENTARY_CHANNELS(CHANNEL) (((CHANNEL) == TIM_CHANNEL_1) || \
  503. ((CHANNEL) == TIM_CHANNEL_2) || \
  504. ((CHANNEL) == TIM_CHANNEL_3))
  505. #define IS_TIM_PWM_MODE(MODE) (((MODE) == TIM_OCMODE_PWM1) || \
  506. ((MODE) == TIM_OCMODE_PWM2) || \
  507. ((MODE) == TIM_OCMODE_COMBINED_PWM1) || \
  508. ((MODE) == TIM_OCMODE_COMBINED_PWM2) || \
  509. ((MODE) == TIM_OCMODE_ASSYMETRIC_PWM1) || \
  510. ((MODE) == TIM_OCMODE_ASSYMETRIC_PWM2))
  511. #define IS_TIM_OC_MODE(MODE) (((MODE) == TIM_OCMODE_TIMING) || \
  512. ((MODE) == TIM_OCMODE_ACTIVE) || \
  513. ((MODE) == TIM_OCMODE_INACTIVE) || \
  514. ((MODE) == TIM_OCMODE_TOGGLE) || \
  515. ((MODE) == TIM_OCMODE_FORCED_ACTIVE) || \
  516. ((MODE) == TIM_OCMODE_FORCED_INACTIVE) || \
  517. ((MODE) == TIM_OCMODE_RETRIGERRABLE_OPM1) || \
  518. ((MODE) == TIM_OCMODE_RETRIGERRABLE_OPM2))
  519. #define IS_TIM_REMAP(__TIM_REMAP__) (((__TIM_REMAP__) == TIM_TIM2_TIM8_TRGO)||\
  520. ((__TIM_REMAP__) == TIM_TIM2_ETH_PTP)||\
  521. ((__TIM_REMAP__) == TIM_TIM2_USBFS_SOF)||\
  522. ((__TIM_REMAP__) == TIM_TIM2_USBHS_SOF)||\
  523. ((__TIM_REMAP__) == TIM_TIM5_GPIO)||\
  524. ((__TIM_REMAP__) == TIM_TIM5_LSI)||\
  525. ((__TIM_REMAP__) == TIM_TIM5_LSE)||\
  526. ((__TIM_REMAP__) == TIM_TIM5_RTC)||\
  527. ((__TIM_REMAP__) == TIM_TIM11_GPIO)||\
  528. ((__TIM_REMAP__) == TIM_TIM11_SPDIFRX)||\
  529. ((__TIM_REMAP__) == TIM_TIM11_HSE)||\
  530. ((__TIM_REMAP__) == TIM_TIM11_MCO1))
  531. #define IS_TIM_DEADTIME(__DEADTIME__) ((__DEADTIME__) <= 0xFF)
  532. #define IS_TIM_BREAK_FILTER(__FILTER__) ((__FILTER__) <= 0xF)
  533. #define IS_TIM_CLEARINPUT_SOURCE(MODE) (((MODE) == TIM_CLEARINPUTSOURCE_ETR) || \
  534. ((MODE) == TIM_CLEARINPUTSOURCE_NONE))
  535. #define IS_TIM_BREAK2_STATE(STATE) (((STATE) == TIM_BREAK2_ENABLE) || \
  536. ((STATE) == TIM_BREAK2_DISABLE))
  537. #define IS_TIM_BREAK2_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_BREAK2POLARITY_LOW) || \
  538. ((__POLARITY__) == TIM_BREAK2POLARITY_HIGH))
  539. #define IS_TIM_GROUPCH5(OCREF) ((((OCREF) & 0x1FFFFFFF) == 0x00000000))
  540. #define IS_TIM_TRGO2_SOURCE(SOURCE) (((SOURCE) == TIM_TRGO2_RESET) || \
  541. ((SOURCE) == TIM_TRGO2_ENABLE) || \
  542. ((SOURCE) == TIM_TRGO2_UPDATE) || \
  543. ((SOURCE) == TIM_TRGO2_OC1) || \
  544. ((SOURCE) == TIM_TRGO2_OC1REF) || \
  545. ((SOURCE) == TIM_TRGO2_OC2REF) || \
  546. ((SOURCE) == TIM_TRGO2_OC3REF) || \
  547. ((SOURCE) == TIM_TRGO2_OC3REF) || \
  548. ((SOURCE) == TIM_TRGO2_OC4REF) || \
  549. ((SOURCE) == TIM_TRGO2_OC5REF) || \
  550. ((SOURCE) == TIM_TRGO2_OC6REF) || \
  551. ((SOURCE) == TIM_TRGO2_OC4REF_RISINGFALLING) || \
  552. ((SOURCE) == TIM_TRGO2_OC6REF_RISINGFALLING) || \
  553. ((SOURCE) == TIM_TRGO2_OC4REF_RISING_OC6REF_RISING) || \
  554. ((SOURCE) == TIM_TRGO2_OC4REF_RISING_OC6REF_FALLING) || \
  555. ((SOURCE) == TIM_TRGO2_OC5REF_RISING_OC6REF_RISING) || \
  556. ((SOURCE) == TIM_TRGO2_OC5REF_RISING_OC6REF_FALLING))
  557. #define IS_TIM_SLAVE_MODE(MODE) (((MODE) == TIM_SLAVEMODE_DISABLE) || \
  558. ((MODE) == TIM_SLAVEMODE_RESET) || \
  559. ((MODE) == TIM_SLAVEMODE_GATED) || \
  560. ((MODE) == TIM_SLAVEMODE_TRIGGER) || \
  561. ((MODE) == TIM_SLAVEMODE_EXTERNAL1) || \
  562. ((MODE) == TIM_SLAVEMODE_COMBINED_RESETTRIGGER))
  563. #if defined (STM32F765xx) || defined(STM32F767xx) || defined(STM32F769xx) || defined(STM32F777xx) || defined(STM32F779xx)
  564. #define IS_TIM_BREAKINPUT(__BREAKINPUT__) (((__BREAKINPUT__) == TIM_BREAKINPUT_BRK) || \
  565. ((__BREAKINPUT__) == TIM_BREAKINPUT_BRK2))
  566. #define IS_TIM_BREAKINPUTSOURCE(__SOURCE__) (((__SOURCE__) == TIM_BREAKINPUTSOURCE_BKIN) || \
  567. ((__SOURCE__) == TIM_BREAKINPUTSOURCE_DFSDM))
  568. #define IS_TIM_BREAKINPUTSOURCE_STATE(__STATE__) (((__STATE__) == TIM_BREAKINPUTSOURCE_DISABLE) || \
  569. ((__STATE__) == TIM_BREAKINPUTSOURCE_ENABLE))
  570. #define IS_TIM_BREAKINPUTSOURCE_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_BREAKINPUTSOURCE_POLARITY_LOW) || \
  571. ((__POLARITY__) == TIM_BREAKINPUTSOURCE_POLARITY_HIGH))
  572. #endif /* STM32F767xx || STM32F769xx || STM32F777xx || STM32F779xx */
  573. /**
  574. * @}
  575. */
  576. /* Private functions ---------------------------------------------------------*/
  577. /** @defgroup TIMEx_Private_Functions TIMEx Private Functions
  578. * @{
  579. */
  580. /**
  581. * @}
  582. */
  583. /**
  584. * @}
  585. */
  586. /**
  587. * @}
  588. */
  589. #ifdef __cplusplus
  590. }
  591. #endif
  592. #endif /* __STM32F7xx_HAL_TIM_EX_H */
  593. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/