1 /**
2 ******************************************************************************
3 * @file stm32l1xx_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 * + Time OCRef clear configuration
10 * + Timer remapping capabilities configuration
11 ******************************************************************************
12 * @attention
13 *
14 * Copyright (c) 2016 STMicroelectronics.
15 * All rights reserved.
16 *
17 * This software is licensed under terms that can be found in the LICENSE file
18 * in the root directory of this software component.
19 * If no LICENSE file comes with this software, it is provided AS-IS.
20 *
21 ******************************************************************************
22 @verbatim
23 ==============================================================================
24 ##### TIMER Extended features #####
25 ==============================================================================
26 [..]
27 The Timer Extended features include:
28 (#) Synchronization circuit to control the timer with external signals and to
29 interconnect several timers together.
30
31 @endverbatim
32 ******************************************************************************
33 */
34
35 /* Includes ------------------------------------------------------------------*/
36 #include "stm32l1xx_hal.h"
37
38 /** @addtogroup STM32L1xx_HAL_Driver
39 * @{
40 */
41
42 /** @defgroup TIMEx TIMEx
43 * @brief TIM Extended HAL module driver
44 * @{
45 */
46
47 #ifdef HAL_TIM_MODULE_ENABLED
48
49 /* Private typedef -----------------------------------------------------------*/
50 /* Private define ------------------------------------------------------------*/
51 /* Private macros ------------------------------------------------------------*/
52 /* Private variables ---------------------------------------------------------*/
53 /* Private function prototypes -----------------------------------------------*/
54
55 /* Exported functions --------------------------------------------------------*/
56 /** @defgroup TIMEx_Exported_Functions TIM Extended Exported Functions
57 * @{
58 */
59 /** @defgroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions
60 * @brief Peripheral Control functions
61 *
62 @verbatim
63 ==============================================================================
64 ##### Peripheral Control functions #####
65 ==============================================================================
66 [..]
67 This section provides functions allowing to:
68 (+) Configure Master synchronization.
69 (+) Configure timer remapping capabilities.
70
71 @endverbatim
72 * @{
73 */
74
75 /**
76 * @brief Configures the TIM in master mode.
77 * @param htim TIM handle.
78 * @param sMasterConfig pointer to a TIM_MasterConfigTypeDef structure that
79 * contains the selected trigger output (TRGO) and the Master/Slave
80 * mode.
81 * @retval HAL status
82 */
HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef * htim,const TIM_MasterConfigTypeDef * sMasterConfig)83 HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
84 const TIM_MasterConfigTypeDef *sMasterConfig)
85 {
86 uint32_t tmpcr2;
87 uint32_t tmpsmcr;
88
89 /* Check the parameters */
90 assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
91 assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
92 assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));
93
94 /* Check input state */
95 __HAL_LOCK(htim);
96
97 /* Change the handler state */
98 htim->State = HAL_TIM_STATE_BUSY;
99
100 /* Get the TIMx CR2 register value */
101 tmpcr2 = htim->Instance->CR2;
102
103 /* Get the TIMx SMCR register value */
104 tmpsmcr = htim->Instance->SMCR;
105
106 /* Reset the MMS Bits */
107 tmpcr2 &= ~TIM_CR2_MMS;
108 /* Select the TRGO source */
109 tmpcr2 |= sMasterConfig->MasterOutputTrigger;
110
111 /* Update TIMx CR2 */
112 htim->Instance->CR2 = tmpcr2;
113
114 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
115 {
116 /* Reset the MSM Bit */
117 tmpsmcr &= ~TIM_SMCR_MSM;
118 /* Set master mode */
119 tmpsmcr |= sMasterConfig->MasterSlaveMode;
120
121 /* Update TIMx SMCR */
122 htim->Instance->SMCR = tmpsmcr;
123 }
124
125 /* Change the htim state */
126 htim->State = HAL_TIM_STATE_READY;
127
128 __HAL_UNLOCK(htim);
129
130 return HAL_OK;
131 }
132
133 /**
134 * @brief Configures the TIMx Remapping input capabilities.
135 * @param htim TIM handle.
136 * @param Remap specifies the TIM remapping source.
137 *
138 * For TIM2, the parameter can have the following values:(see note)
139 * @arg TIM_TIM2_ITR1_TIM10_OC: TIM2 ITR1 input is connected to TIM10 OC
140 * @arg TIM_TIM2_ITR1_TIM5_TGO: TIM2 ITR1 input is connected to TIM5 TGO
141 *
142 * For TIM3, the parameter can have the following values:(see note)
143 * @arg TIM_TIM3_ITR2_TIM11_OC: TIM3 ITR2 input is connected to TIM11 OC
144 * @arg TIM_TIM3_ITR2_TIM5_TGO: TIM3 ITR2 input is connected to TIM5 TGO
145 *
146 * For TIM9, the parameter is a combination of 2 fields (field1 | field2):
147 *
148 * field1 can have the following values:(see note)
149 * @arg TIM_TIM9_ITR1_TIM3_TGO: TIM9 ITR1 input is connected to TIM3 TGO
150 * @arg TIM_TIM9_ITR1_TS: TIM9 ITR1 input is connected to touch sensing I/O
151 *
152 * field2 can have the following values:
153 * @arg TIM_TIM9_GPIO: TIM9 Channel1 is connected to GPIO
154 * @arg TIM_TIM9_LSE: TIM9 Channel1 is connected to LSE internal clock
155 * @arg TIM_TIM9_GPIO1: TIM9 Channel1 is connected to GPIO
156 * @arg TIM_TIM9_GPIO2: TIM9 Channel1 is connected to GPIO
157 *
158 * For TIM10, the parameter is a combination of 3 fields (field1 | field2 | field3):
159 *
160 * field1 can have the following values:(see note)
161 * @arg TIM_TIM10_TI1RMP: TIM10 Channel 1 depends on TI1_RMP
162 * @arg TIM_TIM10_RI: TIM10 Channel 1 is connected to RI
163 *
164 * field2 can have the following values:(see note)
165 * @arg TIM_TIM10_ETR_LSE: TIM10 ETR input is connected to LSE clock
166 * @arg TIM_TIM10_ETR_TIM9_TGO: TIM10 ETR input is connected to TIM9 TGO
167 *
168 * field3 can have the following values:
169 * @arg TIM_TIM10_GPIO: TIM10 Channel1 is connected to GPIO
170 * @arg TIM_TIM10_LSI: TIM10 Channel1 is connected to LSI internal clock
171 * @arg TIM_TIM10_LSE: TIM10 Channel1 is connected to LSE internal clock
172 * @arg TIM_TIM10_RTC: TIM10 Channel1 is connected to RTC wakeup interrupt
173 *
174 * For TIM11, the parameter is a combination of 3 fields (field1 | field2 | field3):
175 *
176 * field1 can have the following values:(see note)
177 * @arg TIM_TIM11_TI1RMP: TIM11 Channel 1 depends on TI1_RMP
178 * @arg TIM_TIM11_RI: TIM11 Channel 1 is connected to RI
179 *
180 * field2 can have the following values:(see note)
181 * @arg TIM_TIM11_ETR_LSE: TIM11 ETR input is connected to LSE clock
182 * @arg TIM_TIM11_ETR_TIM9_TGO: TIM11 ETR input is connected to TIM9 TGO
183 *
184 * field3 can have the following values:
185 * @arg TIM_TIM11_GPIO: TIM11 Channel1 is connected to GPIO
186 * @arg TIM_TIM11_MSI: TIM11 Channel1 is connected to MSI internal clock
187 * @arg TIM_TIM11_HSE_RTC: TIM11 Channel1 is connected to HSE_RTC clock
188 * @arg TIM_TIM11_GPIO1: TIM11 Channel1 is connected to GPIO
189 *
190 * @note Available only in Cat.3, Cat.4,Cat.5 and Cat.6 devices.
191 *
192 * @retval HAL status
193 */
HAL_TIMEx_RemapConfig(TIM_HandleTypeDef * htim,uint32_t Remap)194 HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap)
195 {
196
197 /* Check parameters */
198 assert_param(IS_TIM_REMAP(htim->Instance, Remap));
199
200 __HAL_LOCK(htim);
201
202 /* Set the Timer remapping configuration */
203 WRITE_REG(htim->Instance->OR, Remap);
204
205 __HAL_UNLOCK(htim);
206
207 return HAL_OK;
208 }
209
210 /**
211 * @}
212 */
213
214 /**
215 * @}
216 */
217
218
219 #endif /* HAL_TIM_MODULE_ENABLED */
220 /**
221 * @}
222 */
223
224 /**
225 * @}
226 */
227