stm32l0xx_hal_tim_ex.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  1. /**
  2. ******************************************************************************
  3. * @file stm32l0xx_hal_tim_ex.c
  4. * @author MCD Application Team
  5. * @brief TIM HAL module driver.
  6. * This file provides firmware functions to manage the following
  7. * functionalities of the Timer Extended peripheral:
  8. * + Time Master and Slave synchronization configuration
  9. * + Timer remapping capabilities configuration
  10. ******************************************************************************
  11. * @attention
  12. *
  13. * Copyright (c) 2016 STMicroelectronics.
  14. * All rights reserved.
  15. *
  16. * This software is licensed under terms that can be found in the LICENSE file
  17. * in the root directory of this software component.
  18. * If no LICENSE file comes with this software, it is provided AS-IS.
  19. *
  20. ******************************************************************************
  21. @verbatim
  22. ==============================================================================
  23. ##### TIMER Extended features #####
  24. ==============================================================================
  25. [..]
  26. The Timer Extended features include:
  27. (#) Synchronization circuit to control the timer with external signals and to
  28. interconnect several timers together.
  29. @endverbatim
  30. ******************************************************************************
  31. */
  32. /* Includes ------------------------------------------------------------------*/
  33. #include "stm32l0xx_hal.h"
  34. /** @addtogroup STM32L0xx_HAL_Driver
  35. * @{
  36. */
  37. /** @defgroup TIMEx TIMEx
  38. * @brief TIM Extended HAL module driver
  39. * @{
  40. */
  41. #ifdef HAL_TIM_MODULE_ENABLED
  42. /* Private typedef -----------------------------------------------------------*/
  43. /* Private define ------------------------------------------------------------*/
  44. /* Private macros ------------------------------------------------------------*/
  45. /* Private variables ---------------------------------------------------------*/
  46. /* Private function prototypes -----------------------------------------------*/
  47. /* Exported functions --------------------------------------------------------*/
  48. /** @defgroup TIMEx_Exported_Functions TIM Extended Exported Functions
  49. * @{
  50. */
  51. /** @defgroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions
  52. * @brief Peripheral Control functions
  53. *
  54. @verbatim
  55. ==============================================================================
  56. ##### Peripheral Control functions #####
  57. ==============================================================================
  58. [..]
  59. This section provides functions allowing to:
  60. (+) Configure Master synchronization.
  61. (+) Configure timer remapping capabilities.
  62. @endverbatim
  63. * @{
  64. */
  65. /**
  66. * @brief Configures the TIM in master mode.
  67. * @param htim TIM handle.
  68. * @param sMasterConfig pointer to a TIM_MasterConfigTypeDef structure that
  69. * contains the selected trigger output (TRGO) and the Master/Slave
  70. * mode.
  71. * @retval HAL status
  72. */
  73. HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
  74. const TIM_MasterConfigTypeDef *sMasterConfig)
  75. {
  76. uint32_t tmpcr2;
  77. uint32_t tmpsmcr;
  78. /* Check the parameters */
  79. assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
  80. assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
  81. assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));
  82. /* Check input state */
  83. __HAL_LOCK(htim);
  84. /* Change the handler state */
  85. htim->State = HAL_TIM_STATE_BUSY;
  86. /* Get the TIMx CR2 register value */
  87. tmpcr2 = htim->Instance->CR2;
  88. /* Get the TIMx SMCR register value */
  89. tmpsmcr = htim->Instance->SMCR;
  90. /* Reset the MMS Bits */
  91. tmpcr2 &= ~TIM_CR2_MMS;
  92. /* Select the TRGO source */
  93. tmpcr2 |= sMasterConfig->MasterOutputTrigger;
  94. /* Update TIMx CR2 */
  95. htim->Instance->CR2 = tmpcr2;
  96. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  97. {
  98. /* Reset the MSM Bit */
  99. tmpsmcr &= ~TIM_SMCR_MSM;
  100. /* Set master mode */
  101. tmpsmcr |= sMasterConfig->MasterSlaveMode;
  102. /* Update TIMx SMCR */
  103. htim->Instance->SMCR = tmpsmcr;
  104. }
  105. /* Change the htim state */
  106. htim->State = HAL_TIM_STATE_READY;
  107. __HAL_UNLOCK(htim);
  108. return HAL_OK;
  109. }
  110. /**
  111. * @brief Configures the TIMx Remapping input capabilities.
  112. @if STM32L073xx
  113. * @note It is not possible to connect TIM2 and TIM21 on PB5(AF4) at the same time.
  114. * When selecting TIM3_TI2_GPIOB5_AF4, Channel2 of TIM3 will be
  115. * connected to PB5(AF4) and Channel2 of TIM21 will be connected to
  116. * some other GPIOs. (refer to alternate functions for more details)
  117. * When selecting TIM3_TI2_GPIO_DEF, Channel2 of Timer 3 will be
  118. * connected an GPIO (other than PB5(AF4)) and Channel2 of TIM21
  119. * will be connected to PB5(AF4).
  120. * @note When TIM2 ETR is fed with HSI48, this ETR must be prescaled internally
  121. * to the TIMER2 because the maximum system frequency is 32 MHz
  122. @endif
  123. * @param htim TIM handle.
  124. * @param Remap specifies the TIM remapping source.
  125. @if STM32L073xx
  126. * For TIM2, the parameter is a combination of 2 fields (field1 | field2):
  127. *
  128. * field1 can have the following values:
  129. * @arg TIM2_ETR_GPIO: TIM2 ETR connected to GPIO (default):
  130. * PA0(AF5) or PA5(AF2) or PA15(AF2) or PE9(AF2)
  131. * @arg TIM2_ETR_HSI48: TIM2 ETR connected to HSI48
  132. * @arg TIM2_ETR_HSI16: TIM2 ETR connected to HSI16
  133. * @arg TIM2_ETR_LSE: TIM2 ETR connected to LSE
  134. * @arg TIM2_ETR_COMP2_OUT: TIM2 ETR connected to COMP2 output
  135. * @arg TIM2_ETR_COMP1_OUT: TIM2 ETR connected to COMP1 output
  136. *
  137. * field2 can have the following values:
  138. * @arg TIM2_TI4_GPIO : TIM2 TI4 connected to GPIO1(default):
  139. * PA3(AF2) or PB11(AF2) or PE12(AF0)
  140. * @arg TIM2_TI4_COMP1: TIM2 TI4 connected to COMP1
  141. * @arg TIM2_TI4_COMP2: TIM2 TI4 connected to COMP2
  142. @endif
  143. @if STM32L031xx
  144. * For TIM2, the parameter is a combination of 2 fields (field1 | field2):
  145. *
  146. * field1 can have the following values:
  147. * @arg TIM2_ETR_GPIO: TIM2 ETR connected to GPIO (default):
  148. * PA0(AF5) or PA5(AF2) or PA15(AF2)
  149. * @arg TIM2_ETR_HSI16: TIM2 ETR connected to HS16 (HSIOUT)
  150. * @arg TIM2_ETR_LSE: TIM2 ETR connected to LSE
  151. * @arg TIM2_ETR_COMP2_OUT: TIM2 ETR connected to COMP2 output
  152. * @arg TIM2_ETR_COMP1_OUT: TIM2 ETR connected to COMP1 output
  153. *
  154. * field2 can have the following values:
  155. * @arg TIM2_TI4_GPIO : TIM2 TI4 connected to GPIO (default):
  156. * PA3(AF2) or PB11(AF2) or PB1(AF5)
  157. * @arg TIM2_TI4_COMP1_OUT: TIM2 TI4 connected to COMP1 output
  158. * @arg TIM2_TI4_COMP2_OUT: TIM2 TI4 connected to COMP2 output
  159. @endif
  160. @if STM32L011xx
  161. * For TIM2, the parameter is a combination of 2 fields (field1 | field2):
  162. *
  163. * field1 can have the following values:
  164. * @arg TIM2_ETR_GPIO: TIM2 ETR connected to GPIO (default):
  165. * PA0(AF5) or PA5(AF2) or PA15(AF2)
  166. * @arg TIM2_ETR_HSI16: TIM2 ETR connected to HS16 (HSIOUT)
  167. * @arg TIM2_ETR_LSE: TIM2 ETR connected to LSE
  168. * @arg TIM2_ETR_COMP2_OUT: TIM2 ETR connected to COMP2 output
  169. * @arg TIM2_ETR_COMP1_OUT: TIM2 ETR connected to COMP1 output
  170. *
  171. * field2 can have the following values:
  172. * @arg TIM2_TI4_GPIO : TIM2 TI4 connected to GPIO (default):
  173. * PA3(AF2) or PB11(AF2) or PB1(AF5)
  174. * @arg TIM2_TI4_COMP1_OUT: TIM2 TI4 connected to COMP1 output
  175. * @arg TIM2_TI4_COMP2_OUT: TIM2 TI4 connected to COMP2 output
  176. @endif
  177. @if STM32L051xx
  178. * For TIM2, the parameter is a combination of 2 fields (field1 | field2):
  179. *
  180. * field1 can have the following values:
  181. * @arg TIM2_ETR_GPIO: TIM2 ETR connected to GPIO (default):
  182. * PA0(AF5) or PA5(AF2) or PA15(AF2) or PE9(AF2)
  183. * @arg TIM2_ETR_HSI48: TIM2 ETR connected to HSI48
  184. * @arg TIM2_ETR_LSE: TIM2 ETR connected to LSE
  185. * @arg TIM2_ETR_COMP2_OUT: TIM2 ETR connected to COMP2 output
  186. * @arg TIM2_ETR_COMP1_OUT: TIM2 ETR connected to COMP1 output
  187. *
  188. * field2 can have the following values:
  189. * @arg TIM2_TI4_GPIO: TIM2 TI4 connected to GPIO1(default):
  190. * PA3(AF2) or PB11(AF2) or PE12(AF0)
  191. * @arg TIM2_TI4_COMP1: TIM2 TI4 connected to COMP1
  192. * @arg TIM2_TI4_COMP2: TIM2 TI4 connected to COMP2
  193. * @arg TIM2_TI4_GPIO2: TIM2 TI4 connected to GPIO2 :
  194. * PA3(AF2) or PB11(AF2) or PE12(AF0)
  195. @endif
  196. @if STM32L073xx
  197. *
  198. * For TIM3, the parameter is a combination of 4 fields (field1 | field2 | field3 | field4):
  199. *
  200. * field1 can have the following values:
  201. * @arg TIM3_ETR_GPIO: TIM3 ETR connected to GPIO (default):
  202. * PE2(AF2) or PD2(AF2) or PE2(AF2)
  203. * @arg TIM3_ETR_HSI: TIM3 ETR connected to HSI
  204. *
  205. * field2 can have the following values:
  206. * @arg TIM3_TI1_USB_SOF: TIM3 TI1 connected to USB_SOF (default)
  207. * @arg TIM3_TI1_GPIO: TIM3 TI1 connected to GPIO :
  208. * PE3(AF2) or PA6(AF2) or PC6(AF2) or PB4(AF2)
  209. *
  210. * field3 can have the following values:
  211. * @arg TIM3_TI2_GPIOB5_AF4:TIM3 TI3 connected to P5(AF4)
  212. * (refer to note)
  213. * @arg TIM3_TI2_GPIO_DEF: TIM3 TI3 connected to GPIO (default):
  214. * PA7(AF2) or PB5(AF4) or PC7(AF2) or PE7(AF2)
  215. *
  216. * field4 can have the following values:
  217. * @arg TIM3_TI4_GPIO_DEF: TIM3 TI4 connected to GPIO:
  218. * PB1(AF2) or PE6(AF2)
  219. * @arg TIM3_TI4_GPIOC9_AF2:TIM3 TI4 connected to PC9(AF)2
  220. @endif
  221. @if STM32L073xx
  222. * For TIM21, the parameter is a combination of 3 fields (field1 | field2 | field3):
  223. *
  224. * field1 can have the following values:
  225. * @arg TIM21_ETR_GPIO: TIM21 ETR connected to GPIO(default) :
  226. * PC9(AF0) or PA1(AF5)
  227. * @arg TIM21_ETR_COMP2_OUT:TIM21 ETR connected to COMP2 output
  228. * @arg TIM21_ETR_COMP1_OUT:TIM21 ETR connected to COMP1 output
  229. * @arg TIM21_ETR_LSE: TIM21 ETR connected to LSE
  230. *
  231. * field2 can have the following values:
  232. * @arg TIM21_TI1_MCO: TIM21 TI1 connected to MCO
  233. * @arg TIM21_TI1_RTC_WKUT_IT: TIM21 TI1 connected to RTC WAKEUP interrupt
  234. * @arg TIM21_TI1_HSE_RTC: TIM21 TI1 connected to HSE_RTC
  235. * @arg TIM21_TI1_MSI: TIM21 TI1 connected to MSI clock
  236. * @arg TIM21_TI1_LSE: TIM21 TI1 connected to LSE
  237. * @arg TIM21_TI1_LSI: TIM21 TI1 connected to LSI
  238. * @arg TIM21_TI1_COMP1_OUT:TIM21 TI1 connected to COMP1_OUT
  239. * @arg TIM21_TI1_GPIO: TIM21 TI1 connected to GPIO(default):
  240. * PA2(AF0) or PB13(AF6) or PE5(AF0) or PD0(AF0)
  241. *
  242. * field3 can have the following values:
  243. * @arg TIM21_TI2_GPIO: TIM21 TI2 connected to GPIO(default):
  244. * PA3(AF0) or PB14(AF6) or PE6(AF0) or PD7(AF1)
  245. * @arg TIM21_TI2_COMP2_OUT:TIM21 TI2 connected to COMP2 output
  246. @endif
  247. @if STM32L031xx
  248. * For TIM21, the parameter is a combination of 3 fields (field1 | field2 | field3):
  249. *
  250. * field1 can have the following values:
  251. * @arg TIM21_ETR_GPIO: TIM21 ETR connected to GPIO(default) :
  252. * PA1(AF5)
  253. * @arg TIM21_ETR_COMP2_OUT:TIM21 ETR connected to COMP2 output
  254. * @arg TIM21_ETR_COMP1_OUT:TIM21 ETR connected to COMP1 output
  255. * @arg TIM21_ETR_LSE: TIM21 ETR connected to LSE
  256. *
  257. * field2 can have the following values:
  258. * @arg TIM21_TI1_MCO: TIM21 TI1 connected to MCO
  259. * @arg TIM21_TI1_RTC_WKUT_IT: TIM21 TI1 connected to RTC WAKEUP interrupt
  260. * @arg TIM21_TI1_HSE_RTC: TIM21 TI1 connected to HSE_RTC
  261. * @arg TIM21_TI1_MSI: TIM21 TI1 connected to MSI clock
  262. * @arg TIM21_TI1_LSE: TIM21 TI1 connected to LSE
  263. * @arg TIM21_TI1_LSI: TIM21 TI1 connected to LSI
  264. * @arg TIM21_TI1_COMP1_OUT:TIM21 TI1 connected to COMP1_OUT
  265. *
  266. * field3 can have the following values:
  267. * @arg TIM21_TI2_GPIO: TIM21 TI2 connected to GPIO(default):
  268. * PA3(AF0) or PB14(AF6)
  269. * @arg TIM21_TI2_COMP2_OUT:TIM21 TI2 connected to COMP2 output
  270. @endif
  271. @if STM32L011xx
  272. * For TIM21, the parameter is a combination of 3 fields (field1 | field2 | field3):
  273. *
  274. * field1 can have the following values:
  275. * @arg TIM21_ETR_GPIO: TIM21 ETR connected to GPIO(default) :
  276. * PA1(AF5)
  277. * @arg TIM21_ETR_COMP2_OUT:TIM21 ETR connected to COMP2 output
  278. * @arg TIM21_ETR_COMP1_OUT:TIM21 ETR connected to COMP1 output
  279. * @arg TIM21_ETR_LSE: TIM21 ETR connected to LSE
  280. *
  281. * field2 can have the following values:
  282. * @arg TIM21_TI1_MCO: TIM21 TI1 connected to MCO
  283. * @arg TIM21_TI1_RTC_WKUT_IT: TIM21 TI1 connected to RTC WAKEUP interrupt
  284. * @arg TIM21_TI1_HSE_RTC: TIM21 TI1 connected to HSE_RTC
  285. * @arg TIM21_TI1_MSI: TIM21 TI1 connected to MSI clock
  286. * @arg TIM21_TI1_LSE: TIM21 TI1 connected to LSE
  287. * @arg TIM21_TI1_LSI: TIM21 TI1 connected to LSI
  288. * @arg TIM21_TI1_COMP1_OUT:TIM21 TI1 connected to COMP1_OUT
  289. *
  290. * field3 can have the following values:
  291. * @arg TIM21_TI2_GPIO: TIM21 TI2 connected to GPIO(default):
  292. * PA3(AF0) or PB14(AF6)
  293. * @arg TIM21_TI2_COMP2_OUT:TIM21 TI2 connected to COMP2 output
  294. @endif
  295. @if STM32L051xx
  296. * For TIM21, the parameter is a combination of 3 fields (field1 | field2 | field3):
  297. *
  298. * field1 can have the following values:
  299. * @arg TIM21_ETR_GPIO: TIM21 ETR connected to GPIO(default) :
  300. * PC9(AF0) or PA1(AF5)
  301. * @arg TIM21_ETR_COMP2_OUT:TIM21 ETR connected to COMP2 output
  302. * @arg TIM21_ETR_COMP1_OUT:TIM21 ETR connected to COMP1 output
  303. * @arg TIM21_ETR_LSE: TIM21 ETR connected to LSE
  304. *
  305. * field2 can have the following values:
  306. * @arg TIM21_TI1_MCO: TIM21 TI1 connected to MCO
  307. * @arg TIM21_TI1_RTC_WKUT_IT: TIM21 TI1 connected to RTC WAKEUP interrupt
  308. * @arg TIM21_TI1_HSE_RTC: TIM21 TI1 connected to HSE_RTC
  309. * @arg TIM21_TI1_MSI: TIM21 TI1 connected to MSI clock
  310. * @arg TIM21_TI1_LSE: TIM21 TI1 connected to LSE
  311. * @arg TIM21_TI1_LSI: TIM21 TI1 connected to LSI
  312. * @arg TIM21_TI1_COMP1_OUT:TIM21 TI1 connected to COMP1_OUT
  313. * @arg TIM21_TI1_GPIO: TIM21 TI1 connected to GPIO(default):
  314. * PA2(AF0) or PB13(AF6) or PE5(AF0) or PD0(AF0)
  315. *
  316. * field3 can have the following values:
  317. * @arg TIM21_TI2_GPIO: TIM21 TI2 connected to GPIO(default):
  318. * PA3(AF0) or PB14(AF6) or PE6(AF0) or PD7(AF1)
  319. * @arg TIM21_TI2_COMP2_OUT:TIM21 TI2 connected to COMP2 output
  320. @endif
  321. @if STM32L073xx
  322. *
  323. * For TIM22, the parameter can have the following values:
  324. * @arg TIM22_ETR_LSE: TIM22 ETR connected to LSE
  325. * @arg TIM22_ETR_COMP2_OUT:TIM22 ETR connected to COMP2 output
  326. * @arg TIM22_ETR_COMP1_OUT:TIM22 ETR connected to COMP1 output
  327. * @arg TIM22_ETR_GPIO: TIM22 ETR connected to GPIO(default):
  328. * PC8(AF0) or PA4(AF5)
  329. * @arg TIM22_TI1_GPIO: TIM22 TI1 connected to GPIO(default):
  330. * PC6(AF0) or PA6(AF5) or PB4(AF4) or PE0(AF3)
  331. * @arg TIM22_TI1_COMP2_OUT:TIM22 TI1 connected to COMP2 output
  332. * @arg TIM22_TI1_COMP1_OUT:TIM22 TI1 connected to COMP1 output
  333. @endif
  334. @if STM32L031xx
  335. *
  336. * For TIM22, the parameter is a combination of 2 fields (field1 | field2):
  337. *
  338. * field1 can have the following values:
  339. * @arg TIM22_ETR_LSE: TIM22 ETR connected to LSE
  340. * @arg TIM22_ETR_COMP2_OUT:TIM22 ETR connected to COMP2 output
  341. * @arg TIM22_ETR_COMP1_OUT:TIM22 ETR connected to COMP1 output
  342. * @arg TIM22_ETR_GPIO: TIM22 ETR connected to GPIO(default):
  343. * PA4(AF5)
  344. *
  345. * field2 can have the following values:
  346. * @arg TIM22_TI1_GPIO: TIM22 TI1 connected to GPIO(default):
  347. * PC0(AF6) or PA5(AF6) or PB4(AF4)
  348. * @arg TIM22_TI1_COMP2_OUT:TIM22 TI1 connected to COMP2 output
  349. * @arg TIM22_TI1_COMP1_OUT:TIM22 TI1 connected to COMP1 output
  350. *
  351. @endif
  352. @if STM32L051xx
  353. *
  354. * For TIM22, the parameter is a combination of 2 fields (field1 | field2):
  355. *
  356. * field1 can have the following values:
  357. * @arg TIM22_ETR_LSE: TIM22 ETR connected to LSE
  358. * @arg TIM22_ETR_COMP2_OUT:TIM22 ETR connected to COMP2 output
  359. * @arg TIM22_ETR_COMP1_OUT:TIM22 ETR connected to COMP1 output
  360. * @arg TIM22_ETR_GPIO: TIM22 ETR connected to GPIO(default):
  361. * PC8(AF0) or PA4(AF5)
  362. *
  363. * field2 can have the following values:
  364. * @arg TIM22_TI1_GPIO: TIM22 TI1 connected to GPIO(default):
  365. * PC6(AF0) or PA6(AF5) or PB4(AF4) or PE0(AF3)
  366. * @arg TIM22_TI1_COMP2_OUT:TIM22 TI1 connected to COMP2 output
  367. * @arg TIM22_TI1_COMP1_OUT:TIM22 TI1 connected to COMP1 output
  368. @endif
  369. *
  370. * @retval HAL status
  371. */
  372. HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap)
  373. {
  374. /* Check parameters */
  375. assert_param(IS_TIM_REMAP(htim->Instance, Remap));
  376. __HAL_LOCK(htim);
  377. /* Set the Timer remapping configuration */
  378. WRITE_REG(htim->Instance->OR, Remap);
  379. __HAL_UNLOCK(htim);
  380. return HAL_OK;
  381. }
  382. /**
  383. * @}
  384. */
  385. /**
  386. * @}
  387. */
  388. #endif /* HAL_TIM_MODULE_ENABLED */
  389. /**
  390. * @}
  391. */
  392. /**
  393. * @}
  394. */