You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

425 lines
19 KiB

  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. @verbatim
  11. ==============================================================================
  12. ##### TIMER Extended features #####
  13. ==============================================================================
  14. [..]
  15. The Timer Extended features include:
  16. (#) Synchronization circuit to control the timer with external signals and to
  17. interconnect several timers together.
  18. @endverbatim
  19. ******************************************************************************
  20. * @attention
  21. *
  22. * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
  23. * All rights reserved.</center></h2>
  24. *
  25. * This software component is licensed by ST under BSD 3-Clause license,
  26. * the "License"; You may not use this file except in compliance with the
  27. * License. You may obtain a copy of the License at:
  28. * opensource.org/licenses/BSD-3-Clause
  29. *
  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 macro -------------------------------------------------------------*/
  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. TIM_MasterConfigTypeDef *sMasterConfig)
  75. {
  76. uint32_t tmpcr2;
  77. uint32_t tmpsmcr;
  78. /* Check the parameters */
  79. assert_param(IS_TIM_SYNCHRO_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. /* Reset the MSM Bit */
  95. tmpsmcr &= ~TIM_SMCR_MSM;
  96. /* Set master mode */
  97. tmpsmcr |= sMasterConfig->MasterSlaveMode;
  98. /* Update TIMx CR2 */
  99. htim->Instance->CR2 = tmpcr2;
  100. /* Update TIMx SMCR */
  101. htim->Instance->SMCR = tmpsmcr;
  102. /* Change the htim state */
  103. htim->State = HAL_TIM_STATE_READY;
  104. __HAL_UNLOCK(htim);
  105. return HAL_OK;
  106. }
  107. /**
  108. * @brief Configures the TIMx Remapping input capabilities.
  109. @if STM32L073xx
  110. * @note It is not possible to connect TIM2 and TIM21 on PB5(AF4) at the same time.
  111. * When selecting TIM3_TI2_GPIOB5_AF4, Channel2 of TIM3 will be
  112. * connected to PB5(AF4) and Channel2 of TIM21 will be connected to
  113. * some other GPIOs. (refer to alternate functions for more details)
  114. * When selecting TIM3_TI2_GPIO_DEF, Channel2 of Timer 3 will be
  115. * connected an GPIO (other than PB5(AF4)) and Channel2 of TIM21
  116. * will be connected to PB5(AF4).
  117. * @note When TIM2 ETR is fed with HSI48, this ETR must be prescaled internally
  118. * to the TIMER2 because the maximum system frequency is 32 MHz
  119. @endif
  120. * @param htim TIM handle.
  121. * @param Remap specifies the TIM remapping source.
  122. @if STM32L073xx
  123. * For TIM2, the parameter is a combination of 2 fields (field1 | field2):
  124. *
  125. * field1 can have the following values:
  126. * @arg TIM2_ETR_GPIO: TIM2 ETR connected to GPIO (default):
  127. * PA0(AF5) or PA5(AF2) or PA15(AF2) or PE9(AF2)
  128. * @arg TIM2_ETR_HSI48: TIM2 ETR connected to HSI48
  129. * @arg TIM2_ETR_HSI16: TIM2 ETR connected to HSI16
  130. * @arg TIM2_ETR_LSE: TIM2 ETR connected to LSE
  131. * @arg TIM2_ETR_COMP2_OUT: TIM2 ETR connected to COMP2 output
  132. * @arg TIM2_ETR_COMP1_OUT: TIM2 ETR connected to COMP1 output
  133. *
  134. * field2 can have the following values:
  135. * @arg TIM2_TI4_GPIO : TIM2 TI4 connected to GPIO1(default):
  136. * PA3(AF2) or PB11(AF2) or PE12(AF0)
  137. * @arg TIM2_TI4_COMP1: TIM2 TI4 connected to COMP1
  138. * @arg TIM2_TI4_COMP2: TIM2 TI4 connected to COMP2
  139. @endif
  140. @if STM32L031xx
  141. * For TIM2, the parameter is a combination of 2 fields (field1 | field2):
  142. *
  143. * field1 can have the following values:
  144. * @arg TIM2_ETR_GPIO: TIM2 ETR connected to GPIO (default):
  145. * PA0(AF5) or PA5(AF2) or PA15(AF2)
  146. * @arg TIM2_ETR_HSI16: TIM2 ETR connected to HS16 (HSIOUT)
  147. * @arg TIM2_ETR_LSE: TIM2 ETR connected to LSE
  148. * @arg TIM2_ETR_COMP2_OUT: TIM2 ETR connected to COMP2 output
  149. * @arg TIM2_ETR_COMP1_OUT: TIM2 ETR connected to COMP1 output
  150. *
  151. * field2 can have the following values:
  152. * @arg TIM2_TI4_GPIO : TIM2 TI4 connected to GPIO (default):
  153. * PA3(AF2) or PB11(AF2) or PB1(AF5)
  154. * @arg TIM2_TI4_COMP1_OUT: TIM2 TI4 connected to COMP1 output
  155. * @arg TIM2_TI4_COMP2_OUT: TIM2 TI4 connected to COMP2 output
  156. @endif
  157. @if STM32L011xx
  158. * For TIM2, the parameter is a combination of 2 fields (field1 | field2):
  159. *
  160. * field1 can have the following values:
  161. * @arg TIM2_ETR_GPIO: TIM2 ETR connected to GPIO (default):
  162. * PA0(AF5) or PA5(AF2) or PA15(AF2)
  163. * @arg TIM2_ETR_HSI16: TIM2 ETR connected to HS16 (HSIOUT)
  164. * @arg TIM2_ETR_LSE: TIM2 ETR connected to LSE
  165. * @arg TIM2_ETR_COMP2_OUT: TIM2 ETR connected to COMP2 output
  166. * @arg TIM2_ETR_COMP1_OUT: TIM2 ETR connected to COMP1 output
  167. *
  168. * field2 can have the following values:
  169. * @arg TIM2_TI4_GPIO : TIM2 TI4 connected to GPIO (default):
  170. * PA3(AF2) or PB11(AF2) or PB1(AF5)
  171. * @arg TIM2_TI4_COMP1_OUT: TIM2 TI4 connected to COMP1 output
  172. * @arg TIM2_TI4_COMP2_OUT: TIM2 TI4 connected to COMP2 output
  173. @endif
  174. @if STM32L051xx
  175. * For TIM2, the parameter is a combination of 2 fields (field1 | field2):
  176. *
  177. * field1 can have the following values:
  178. * @arg TIM2_ETR_GPIO: TIM2 ETR connected to GPIO (default):
  179. * PA0(AF5) or PA5(AF2) or PA15(AF2) or PE9(AF2)
  180. * @arg TIM2_ETR_HSI48: TIM2 ETR connected to HSI48
  181. * @arg TIM2_ETR_LSE: TIM2 ETR connected to LSE
  182. * @arg TIM2_ETR_COMP2_OUT: TIM2 ETR connected to COMP2 output
  183. * @arg TIM2_ETR_COMP1_OUT: TIM2 ETR connected to COMP1 output
  184. *
  185. * field2 can have the following values:
  186. * @arg TIM2_TI4_GPIO: TIM2 TI4 connected to GPIO1(default):
  187. * PA3(AF2) or PB11(AF2) or PE12(AF0)
  188. * @arg TIM2_TI4_COMP1: TIM2 TI4 connected to COMP1
  189. * @arg TIM2_TI4_COMP2: TIM2 TI4 connected to COMP2
  190. * @arg TIM2_TI4_GPIO2: TIM2 TI4 connected to GPIO2 :
  191. * PA3(AF2) or PB11(AF2) or PE12(AF0)
  192. @endif
  193. @if STM32L073xx
  194. *
  195. * For TIM3, the parameter is a combination of 4 fields (field1 | field2 | field3 | field4):
  196. *
  197. * field1 can have the following values:
  198. * @arg TIM3_ETR_GPIO: TIM3 ETR connected to GPIO (default):
  199. * PE2(AF2) or PD2(AF2) or PE2(AF2)
  200. * @arg TIM3_ETR_HSI: TIM3 ETR connected to HSI
  201. *
  202. * field2 can have the following values:
  203. * @arg TIM3_TI1_USB_SOF: TIM3 TI1 connected to USB_SOF (default)
  204. * @arg TIM3_TI1_GPIO: TIM3 TI1 connected to GPIO :
  205. * PE3(AF2) or PA6(AF2) or PC6(AF2) or PB4(AF2)
  206. *
  207. * field3 can have the following values:
  208. * @arg TIM3_TI2_GPIOB5_AF4:TIM3 TI3 connected to P5(AF4)
  209. * (refer to note)
  210. * @arg TIM3_TI2_GPIO_DEF: TIM3 TI3 connected to GPIO (default):
  211. * PA7(AF2) or PB5(AF4) or PC7(AF2) or PE7(AF2)
  212. *
  213. * field4 can have the following values:
  214. * @arg TIM3_TI4_GPIO_DEF: TIM3 TI4 connected to GPIO:
  215. * PB1(AF2) or PE6(AF2)
  216. * @arg TIM3_TI4_GPIOC9_AF2:TIM3 TI4 connected to PC9(AF)2
  217. @endif
  218. @if STM32L073xx
  219. * For TIM21, the parameter is a combination of 3 fields (field1 | field2 | field3):
  220. *
  221. * field1 can have the following values:
  222. * @arg TIM21_ETR_GPIO: TIM21 ETR connected to GPIO(default) :
  223. * PC9(AF0) or PA1(AF5)
  224. * @arg TIM21_ETR_COMP2_OUT:TIM21 ETR connected to COMP2 output
  225. * @arg TIM21_ETR_COMP1_OUT:TIM21 ETR connected to COMP1 output
  226. * @arg TIM21_ETR_LSE: TIM21 ETR connected to LSE
  227. *
  228. * field2 can have the following values:
  229. * @arg TIM21_TI1_MCO: TIM21 TI1 connected to MCO
  230. * @arg TIM21_TI1_RTC_WKUT_IT: TIM21 TI1 connected to RTC WAKEUP interrupt
  231. * @arg TIM21_TI1_HSE_RTC: TIM21 TI1 connected to HSE_RTC
  232. * @arg TIM21_TI1_MSI: TIM21 TI1 connected to MSI clock
  233. * @arg TIM21_TI1_LSE: TIM21 TI1 connected to LSE
  234. * @arg TIM21_TI1_LSI: TIM21 TI1 connected to LSI
  235. * @arg TIM21_TI1_COMP1_OUT:TIM21 TI1 connected to COMP1_OUT
  236. * @arg TIM21_TI1_GPIO: TIM21 TI1 connected to GPIO(default):
  237. * PA2(AF0) or PB13(AF6) or PE5(AF0) or PD0(AF0)
  238. *
  239. * field3 can have the following values:
  240. * @arg TIM21_TI2_GPIO: TIM21 TI2 connected to GPIO(default):
  241. * PA3(AF0) or PB14(AF6) or PE6(AF0) or PD7(AF1)
  242. * @arg TIM21_TI2_COMP2_OUT:TIM21 TI2 connected to COMP2 output
  243. @endif
  244. @if STM32L031xx
  245. * For TIM21, the parameter is a combination of 3 fields (field1 | field2 | field3):
  246. *
  247. * field1 can have the following values:
  248. * @arg TIM21_ETR_GPIO: TIM21 ETR connected to GPIO(default) :
  249. * PA1(AF5)
  250. * @arg TIM21_ETR_COMP2_OUT:TIM21 ETR connected to COMP2 output
  251. * @arg TIM21_ETR_COMP1_OUT:TIM21 ETR connected to COMP1 output
  252. * @arg TIM21_ETR_LSE: TIM21 ETR connected to LSE
  253. *
  254. * field2 can have the following values:
  255. * @arg TIM21_TI1_MCO: TIM21 TI1 connected to MCO
  256. * @arg TIM21_TI1_RTC_WKUT_IT: TIM21 TI1 connected to RTC WAKEUP interrupt
  257. * @arg TIM21_TI1_HSE_RTC: TIM21 TI1 connected to HSE_RTC
  258. * @arg TIM21_TI1_MSI: TIM21 TI1 connected to MSI clock
  259. * @arg TIM21_TI1_LSE: TIM21 TI1 connected to LSE
  260. * @arg TIM21_TI1_LSI: TIM21 TI1 connected to LSI
  261. * @arg TIM21_TI1_COMP1_OUT:TIM21 TI1 connected to COMP1_OUT
  262. *
  263. * field3 can have the following values:
  264. * @arg TIM21_TI2_GPIO: TIM21 TI2 connected to GPIO(default):
  265. * PA3(AF0) or PB14(AF6)
  266. * @arg TIM21_TI2_COMP2_OUT:TIM21 TI2 connected to COMP2 output
  267. @endif
  268. @if STM32L011xx
  269. * For TIM21, the parameter is a combination of 3 fields (field1 | field2 | field3):
  270. *
  271. * field1 can have the following values:
  272. * @arg TIM21_ETR_GPIO: TIM21 ETR connected to GPIO(default) :
  273. * PA1(AF5)
  274. * @arg TIM21_ETR_COMP2_OUT:TIM21 ETR connected to COMP2 output
  275. * @arg TIM21_ETR_COMP1_OUT:TIM21 ETR connected to COMP1 output
  276. * @arg TIM21_ETR_LSE: TIM21 ETR connected to LSE
  277. *
  278. * field2 can have the following values:
  279. * @arg TIM21_TI1_MCO: TIM21 TI1 connected to MCO
  280. * @arg TIM21_TI1_RTC_WKUT_IT: TIM21 TI1 connected to RTC WAKEUP interrupt
  281. * @arg TIM21_TI1_HSE_RTC: TIM21 TI1 connected to HSE_RTC
  282. * @arg TIM21_TI1_MSI: TIM21 TI1 connected to MSI clock
  283. * @arg TIM21_TI1_LSE: TIM21 TI1 connected to LSE
  284. * @arg TIM21_TI1_LSI: TIM21 TI1 connected to LSI
  285. * @arg TIM21_TI1_COMP1_OUT:TIM21 TI1 connected to COMP1_OUT
  286. *
  287. * field3 can have the following values:
  288. * @arg TIM21_TI2_GPIO: TIM21 TI2 connected to GPIO(default):
  289. * PA3(AF0) or PB14(AF6)
  290. * @arg TIM21_TI2_COMP2_OUT:TIM21 TI2 connected to COMP2 output
  291. @endif
  292. @if STM32L051xx
  293. * For TIM21, the parameter is a combination of 3 fields (field1 | field2 | field3):
  294. *
  295. * field1 can have the following values:
  296. * @arg TIM21_ETR_GPIO: TIM21 ETR connected to GPIO(default) :
  297. * PC9(AF0) or PA1(AF5)
  298. * @arg TIM21_ETR_COMP2_OUT:TIM21 ETR connected to COMP2 output
  299. * @arg TIM21_ETR_COMP1_OUT:TIM21 ETR connected to COMP1 output
  300. * @arg TIM21_ETR_LSE: TIM21 ETR connected to LSE
  301. *
  302. * field2 can have the following values:
  303. * @arg TIM21_TI1_MCO: TIM21 TI1 connected to MCO
  304. * @arg TIM21_TI1_RTC_WKUT_IT: TIM21 TI1 connected to RTC WAKEUP interrupt
  305. * @arg TIM21_TI1_HSE_RTC: TIM21 TI1 connected to HSE_RTC
  306. * @arg TIM21_TI1_MSI: TIM21 TI1 connected to MSI clock
  307. * @arg TIM21_TI1_LSE: TIM21 TI1 connected to LSE
  308. * @arg TIM21_TI1_LSI: TIM21 TI1 connected to LSI
  309. * @arg TIM21_TI1_COMP1_OUT:TIM21 TI1 connected to COMP1_OUT
  310. * @arg TIM21_TI1_GPIO: TIM21 TI1 connected to GPIO(default):
  311. * PA2(AF0) or PB13(AF6) or PE5(AF0) or PD0(AF0)
  312. *
  313. * field3 can have the following values:
  314. * @arg TIM21_TI2_GPIO: TIM21 TI2 connected to GPIO(default):
  315. * PA3(AF0) or PB14(AF6) or PE6(AF0) or PD7(AF1)
  316. * @arg TIM21_TI2_COMP2_OUT:TIM21 TI2 connected to COMP2 output
  317. @endif
  318. @if STM32L073xx
  319. *
  320. * For TIM22, the parameter can have the following values:
  321. * @arg TIM22_ETR_LSE: TIM22 ETR connected to LSE
  322. * @arg TIM22_ETR_COMP2_OUT:TIM22 ETR connected to COMP2 output
  323. * @arg TIM22_ETR_COMP1_OUT:TIM22 ETR connected to COMP1 output
  324. * @arg TIM22_ETR_GPIO: TIM22 ETR connected to GPIO(default):
  325. * PC8(AF0) or PA4(AF5)
  326. * @arg TIM22_TI1_GPIO: TIM22 TI1 connected to GPIO(default):
  327. * PC6(AF0) or PA6(AF5) or PB4(AF4) or PE0(AF3)
  328. * @arg TIM22_TI1_COMP2_OUT:TIM22 TI1 connected to COMP2 output
  329. * @arg TIM22_TI1_COMP1_OUT:TIM22 TI1 connected to COMP1 output
  330. @endif
  331. @if STM32L031xx
  332. *
  333. * For TIM22, the parameter is a combination of 2 fields (field1 | field2):
  334. *
  335. * field1 can have the following values:
  336. * @arg TIM22_ETR_LSE: TIM22 ETR connected to LSE
  337. * @arg TIM22_ETR_COMP2_OUT:TIM22 ETR connected to COMP2 output
  338. * @arg TIM22_ETR_COMP1_OUT:TIM22 ETR connected to COMP1 output
  339. * @arg TIM22_ETR_GPIO: TIM22 ETR connected to GPIO(default):
  340. * PA4(AF5)
  341. *
  342. * field2 can have the following values:
  343. * @arg TIM22_TI1_GPIO: TIM22 TI1 connected to GPIO(default):
  344. * PC0(AF6) or PA5(AF6) or PB4(AF4)
  345. * @arg TIM22_TI1_COMP2_OUT:TIM22 TI1 connected to COMP2 output
  346. * @arg TIM22_TI1_COMP1_OUT:TIM22 TI1 connected to COMP1 output
  347. *
  348. @endif
  349. @if STM32L051xx
  350. *
  351. * For TIM22, the parameter is a combination of 2 fields (field1 | field2):
  352. *
  353. * field1 can have the following values:
  354. * @arg TIM22_ETR_LSE: TIM22 ETR connected to LSE
  355. * @arg TIM22_ETR_COMP2_OUT:TIM22 ETR connected to COMP2 output
  356. * @arg TIM22_ETR_COMP1_OUT:TIM22 ETR connected to COMP1 output
  357. * @arg TIM22_ETR_GPIO: TIM22 ETR connected to GPIO(default):
  358. * PC8(AF0) or PA4(AF5)
  359. *
  360. * field2 can have the following values:
  361. * @arg TIM22_TI1_GPIO: TIM22 TI1 connected to GPIO(default):
  362. * PC6(AF0) or PA6(AF5) or PB4(AF4) or PE0(AF3)
  363. * @arg TIM22_TI1_COMP2_OUT:TIM22 TI1 connected to COMP2 output
  364. * @arg TIM22_TI1_COMP1_OUT:TIM22 TI1 connected to COMP1 output
  365. @endif
  366. *
  367. * @retval HAL status
  368. */
  369. HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap)
  370. {
  371. __HAL_LOCK(htim);
  372. /* Check parameters */
  373. assert_param(IS_TIM_REMAP(htim->Instance, Remap));
  374. /* Set the Timer remapping configuration */
  375. WRITE_REG(htim->Instance->OR, Remap);
  376. __HAL_UNLOCK(htim);
  377. return HAL_OK;
  378. }
  379. /**
  380. * @}
  381. */
  382. /**
  383. * @}
  384. */
  385. #endif /* HAL_TIM_MODULE_ENABLED */
  386. /**
  387. * @}
  388. */
  389. /**
  390. * @}
  391. */
  392. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/