Mercurial > pub > halpp
comparison f103c8/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c @ 2:0c59e7a7782a
Working on GPIO and RCC
| author | cin |
|---|---|
| date | Mon, 16 Jan 2017 11:04:47 +0300 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1:a0b14b11ad9f | 2:0c59e7a7782a |
|---|---|
| 1 /** | |
| 2 ****************************************************************************** | |
| 3 * @file stm32f1xx_hal_tim_ex.c | |
| 4 * @author MCD Application Team | |
| 5 * @version V1.0.4 | |
| 6 * @date 29-April-2016 | |
| 7 * @brief TIM HAL module driver. | |
| 8 * This file provides firmware functions to manage the following | |
| 9 * functionalities of the Timer Extended peripheral: | |
| 10 * + Time Hall Sensor Interface Initialization | |
| 11 * + Time Hall Sensor Interface Start | |
| 12 * + Time Complementary signal bread and dead time configuration | |
| 13 * + Time Master and Slave synchronization configuration | |
| 14 * + Timer remapping capabilities configuration | |
| 15 @verbatim | |
| 16 ============================================================================== | |
| 17 ##### TIMER Extended features ##### | |
| 18 ============================================================================== | |
| 19 [..] | |
| 20 The Timer Extended features include: | |
| 21 (#) Complementary outputs with programmable dead-time for : | |
| 22 (++) Output Compare | |
| 23 (++) PWM generation (Edge and Center-aligned Mode) | |
| 24 (++) One-pulse mode output | |
| 25 (#) Synchronization circuit to control the timer with external signals and to | |
| 26 interconnect several timers together. | |
| 27 (#) Break input to put the timer output signals in reset state or in a known state. | |
| 28 (#) Supports incremental (quadrature) encoder and hall-sensor circuitry for | |
| 29 positioning purposes | |
| 30 | |
| 31 ##### How to use this driver ##### | |
| 32 ============================================================================== | |
| 33 [..] | |
| 34 (#) Initialize the TIM low level resources by implementing the following functions | |
| 35 depending from feature used : | |
| 36 (++) Complementary Output Compare : HAL_TIM_OC_MspInit() | |
| 37 (++) Complementary PWM generation : HAL_TIM_PWM_MspInit() | |
| 38 (++) Complementary One-pulse mode output : HAL_TIM_OnePulse_MspInit() | |
| 39 (++) Hall Sensor output : HAL_TIMEx_HallSensor_MspInit() | |
| 40 | |
| 41 (#) Initialize the TIM low level resources : | |
| 42 (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE(); | |
| 43 (##) TIM pins configuration | |
| 44 (+++) Enable the clock for the TIM GPIOs using the following function: | |
| 45 __HAL_RCC_GPIOx_CLK_ENABLE(); | |
| 46 (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init(); | |
| 47 | |
| 48 (#) The external Clock can be configured, if needed (the default clock is the | |
| 49 internal clock from the APBx), using the following function: | |
| 50 HAL_TIM_ConfigClockSource, the clock configuration should be done before | |
| 51 any start function. | |
| 52 | |
| 53 (#) Configure the TIM in the desired functioning mode using one of the | |
| 54 initialization function of this driver: | |
| 55 (++) HAL_TIMEx_HallSensor_Init and HAL_TIMEx_ConfigCommutationEvent: to use the | |
| 56 Timer Hall Sensor Interface and the commutation event with the corresponding | |
| 57 Interrupt and DMA request if needed (Note that One Timer is used to interface | |
| 58 with the Hall sensor Interface and another Timer should be used to use | |
| 59 the commutation event). | |
| 60 | |
| 61 (#) Activate the TIM peripheral using one of the start functions: | |
| 62 (++) Complementary Output Compare : HAL_TIMEx_OCN_Start(), HAL_TIMEx_OCN_Start_DMA(), HAL_TIMEx_OCN_Start_IT() | |
| 63 (++) Complementary PWM generation : HAL_TIMEx_PWMN_Start(), HAL_TIMEx_PWMN_Start_DMA(), HAL_TIMEx_PWMN_Start_IT() | |
| 64 (++) Complementary One-pulse mode output : HAL_TIMEx_OnePulseN_Start(), HAL_TIMEx_OnePulseN_Start_IT() | |
| 65 (++) Hall Sensor output : HAL_TIMEx_HallSensor_Start(), HAL_TIMEx_HallSensor_Start_DMA(), HAL_TIMEx_HallSensor_Start_IT(). | |
| 66 | |
| 67 | |
| 68 @endverbatim | |
| 69 ****************************************************************************** | |
| 70 * @attention | |
| 71 * | |
| 72 * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |
| 73 * | |
| 74 * Redistribution and use in source and binary forms, with or without modification, | |
| 75 * are permitted provided that the following conditions are met: | |
| 76 * 1. Redistributions of source code must retain the above copyright notice, | |
| 77 * this list of conditions and the following disclaimer. | |
| 78 * 2. Redistributions in binary form must reproduce the above copyright notice, | |
| 79 * this list of conditions and the following disclaimer in the documentation | |
| 80 * and/or other materials provided with the distribution. | |
| 81 * 3. Neither the name of STMicroelectronics nor the names of its contributors | |
| 82 * may be used to endorse or promote products derived from this software | |
| 83 * without specific prior written permission. | |
| 84 * | |
| 85 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
| 86 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| 87 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
| 88 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |
| 89 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
| 90 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
| 91 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
| 92 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
| 93 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
| 94 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 95 * | |
| 96 ****************************************************************************** | |
| 97 */ | |
| 98 | |
| 99 /* Includes ------------------------------------------------------------------*/ | |
| 100 #include "stm32f1xx_hal.h" | |
| 101 | |
| 102 /** @addtogroup STM32F1xx_HAL_Driver | |
| 103 * @{ | |
| 104 */ | |
| 105 | |
| 106 /** @defgroup TIMEx TIMEx | |
| 107 * @brief TIM Extended HAL module driver | |
| 108 * @{ | |
| 109 */ | |
| 110 | |
| 111 #ifdef HAL_TIM_MODULE_ENABLED | |
| 112 | |
| 113 /* Private typedef -----------------------------------------------------------*/ | |
| 114 /* Private define ------------------------------------------------------------*/ | |
| 115 /* Private macro -------------------------------------------------------------*/ | |
| 116 /* Private variables ---------------------------------------------------------*/ | |
| 117 /* Private function prototypes -----------------------------------------------*/ | |
| 118 | |
| 119 #if defined (STM32F100xB) || defined (STM32F100xE) || \ | |
| 120 defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ | |
| 121 defined (STM32F105xC) || defined (STM32F107xC) | |
| 122 /** @defgroup TIMEx_Private_Functions TIMEx Private Functions | |
| 123 * @{ | |
| 124 */ | |
| 125 static void TIM_CCxNChannelCmd(TIM_TypeDef* TIMx, uint32_t Channel, uint32_t ChannelNState); | |
| 126 /** | |
| 127 * @} | |
| 128 */ | |
| 129 #endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ | |
| 130 /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ | |
| 131 /* defined(STM32F105xC) || defined(STM32F107xC) */ | |
| 132 | |
| 133 /* Exported functions ---------------------------------------------------------*/ | |
| 134 | |
| 135 /** @defgroup TIMEx_Exported_Functions TIMEx Exported Functions | |
| 136 * @{ | |
| 137 */ | |
| 138 | |
| 139 | |
| 140 /** @defgroup TIMEx_Exported_Functions_Group1 Timer Hall Sensor functions | |
| 141 * @brief Timer Hall Sensor functions | |
| 142 * | |
| 143 @verbatim | |
| 144 ============================================================================== | |
| 145 ##### Timer Hall Sensor functions ##### | |
| 146 ============================================================================== | |
| 147 [..] | |
| 148 This section provides functions allowing to: | |
| 149 (+) Initialize and configure TIM HAL Sensor. | |
| 150 (+) De-initialize TIM HAL Sensor. | |
| 151 (+) Start the Hall Sensor Interface. | |
| 152 (+) Stop the Hall Sensor Interface. | |
| 153 (+) Start the Hall Sensor Interface and enable interrupts. | |
| 154 (+) Stop the Hall Sensor Interface and disable interrupts. | |
| 155 (+) Start the Hall Sensor Interface and enable DMA transfers. | |
| 156 (+) Stop the Hall Sensor Interface and disable DMA transfers. | |
| 157 | |
| 158 @endverbatim | |
| 159 * @{ | |
| 160 */ | |
| 161 /** | |
| 162 * @brief Initializes the TIM Hall Sensor Interface and create the associated handle. | |
| 163 * @param htim : TIM Encoder Interface handle | |
| 164 * @param sConfig : TIM Hall Sensor configuration structure | |
| 165 * @retval HAL status | |
| 166 */ | |
| 167 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef* sConfig) | |
| 168 { | |
| 169 TIM_OC_InitTypeDef OC_Config; | |
| 170 | |
| 171 /* Check the TIM handle allocation */ | |
| 172 if(htim == NULL) | |
| 173 { | |
| 174 return HAL_ERROR; | |
| 175 } | |
| 176 | |
| 177 assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); | |
| 178 assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); | |
| 179 assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); | |
| 180 assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity)); | |
| 181 assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler)); | |
| 182 assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter)); | |
| 183 | |
| 184 if(htim->State == HAL_TIM_STATE_RESET) | |
| 185 { | |
| 186 /* Allocate lock resource and initialize it */ | |
| 187 htim->Lock = HAL_UNLOCKED; | |
| 188 | |
| 189 /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ | |
| 190 HAL_TIMEx_HallSensor_MspInit(htim); | |
| 191 } | |
| 192 | |
| 193 /* Set the TIM state */ | |
| 194 htim->State= HAL_TIM_STATE_BUSY; | |
| 195 | |
| 196 /* Configure the Time base in the Encoder Mode */ | |
| 197 TIM_Base_SetConfig(htim->Instance, &htim->Init); | |
| 198 | |
| 199 /* Configure the Channel 1 as Input Channel to interface with the three Outputs of the Hall sensor */ | |
| 200 TIM_TI1_SetConfig(htim->Instance, sConfig->IC1Polarity, TIM_ICSELECTION_TRC, sConfig->IC1Filter); | |
| 201 | |
| 202 /* Reset the IC1PSC Bits */ | |
| 203 htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; | |
| 204 /* Set the IC1PSC value */ | |
| 205 htim->Instance->CCMR1 |= sConfig->IC1Prescaler; | |
| 206 | |
| 207 /* Enable the Hall sensor interface (XOR function of the three inputs) */ | |
| 208 htim->Instance->CR2 |= TIM_CR2_TI1S; | |
| 209 | |
| 210 /* Select the TIM_TS_TI1F_ED signal as Input trigger for the TIM */ | |
| 211 htim->Instance->SMCR &= ~TIM_SMCR_TS; | |
| 212 htim->Instance->SMCR |= TIM_TS_TI1F_ED; | |
| 213 | |
| 214 /* Use the TIM_TS_TI1F_ED signal to reset the TIM counter each edge detection */ | |
| 215 htim->Instance->SMCR &= ~TIM_SMCR_SMS; | |
| 216 htim->Instance->SMCR |= TIM_SLAVEMODE_RESET; | |
| 217 | |
| 218 /* Program channel 2 in PWM 2 mode with the desired Commutation_Delay*/ | |
| 219 OC_Config.OCFastMode = TIM_OCFAST_DISABLE; | |
| 220 OC_Config.OCIdleState = TIM_OCIDLESTATE_RESET; | |
| 221 OC_Config.OCMode = TIM_OCMODE_PWM2; | |
| 222 OC_Config.OCNIdleState = TIM_OCNIDLESTATE_RESET; | |
| 223 OC_Config.OCNPolarity = TIM_OCNPOLARITY_HIGH; | |
| 224 OC_Config.OCPolarity = TIM_OCPOLARITY_HIGH; | |
| 225 OC_Config.Pulse = sConfig->Commutation_Delay; | |
| 226 | |
| 227 TIM_OC2_SetConfig(htim->Instance, &OC_Config); | |
| 228 | |
| 229 /* Select OC2REF as trigger output on TRGO: write the MMS bits in the TIMx_CR2 | |
| 230 register to 101 */ | |
| 231 htim->Instance->CR2 &= ~TIM_CR2_MMS; | |
| 232 htim->Instance->CR2 |= TIM_TRGO_OC2REF; | |
| 233 | |
| 234 /* Initialize the TIM state*/ | |
| 235 htim->State= HAL_TIM_STATE_READY; | |
| 236 | |
| 237 return HAL_OK; | |
| 238 } | |
| 239 | |
| 240 /** | |
| 241 * @brief DeInitializes the TIM Hall Sensor interface | |
| 242 * @param htim : TIM Hall Sensor handle | |
| 243 * @retval HAL status | |
| 244 */ | |
| 245 HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim) | |
| 246 { | |
| 247 /* Check the parameters */ | |
| 248 assert_param(IS_TIM_INSTANCE(htim->Instance)); | |
| 249 | |
| 250 htim->State = HAL_TIM_STATE_BUSY; | |
| 251 | |
| 252 /* Disable the TIM Peripheral Clock */ | |
| 253 __HAL_TIM_DISABLE(htim); | |
| 254 | |
| 255 /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ | |
| 256 HAL_TIMEx_HallSensor_MspDeInit(htim); | |
| 257 | |
| 258 /* Change TIM state */ | |
| 259 htim->State = HAL_TIM_STATE_RESET; | |
| 260 | |
| 261 /* Release Lock */ | |
| 262 __HAL_UNLOCK(htim); | |
| 263 | |
| 264 return HAL_OK; | |
| 265 } | |
| 266 | |
| 267 /** | |
| 268 * @brief Initializes the TIM Hall Sensor MSP. | |
| 269 * @param htim : TIM handle | |
| 270 * @retval None | |
| 271 */ | |
| 272 __weak void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim) | |
| 273 { | |
| 274 /* Prevent unused argument(s) compilation warning */ | |
| 275 UNUSED(htim); | |
| 276 /* NOTE : This function Should not be modified, when the callback is needed, | |
| 277 the HAL_TIMEx_HallSensor_MspInit could be implemented in the user file | |
| 278 */ | |
| 279 } | |
| 280 | |
| 281 /** | |
| 282 * @brief DeInitializes TIM Hall Sensor MSP. | |
| 283 * @param htim : TIM handle | |
| 284 * @retval None | |
| 285 */ | |
| 286 __weak void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim) | |
| 287 { | |
| 288 /* Prevent unused argument(s) compilation warning */ | |
| 289 UNUSED(htim); | |
| 290 /* NOTE : This function Should not be modified, when the callback is needed, | |
| 291 the HAL_TIMEx_HallSensor_MspDeInit could be implemented in the user file | |
| 292 */ | |
| 293 } | |
| 294 | |
| 295 /** | |
| 296 * @brief Starts the TIM Hall Sensor Interface. | |
| 297 * @param htim : TIM Hall Sensor handle | |
| 298 * @retval HAL status | |
| 299 */ | |
| 300 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim) | |
| 301 { | |
| 302 /* Check the parameters */ | |
| 303 assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); | |
| 304 | |
| 305 /* Enable the Input Capture channel 1 | |
| 306 (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ | |
| 307 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); | |
| 308 | |
| 309 /* Enable the Peripheral */ | |
| 310 __HAL_TIM_ENABLE(htim); | |
| 311 | |
| 312 /* Return function status */ | |
| 313 return HAL_OK; | |
| 314 } | |
| 315 | |
| 316 /** | |
| 317 * @brief Stops the TIM Hall sensor Interface. | |
| 318 * @param htim : TIM Hall Sensor handle | |
| 319 * @retval HAL status | |
| 320 */ | |
| 321 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim) | |
| 322 { | |
| 323 /* Check the parameters */ | |
| 324 assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); | |
| 325 | |
| 326 /* Disable the Input Capture channel 1 | |
| 327 (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ | |
| 328 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); | |
| 329 | |
| 330 /* Disable the Peripheral */ | |
| 331 __HAL_TIM_DISABLE(htim); | |
| 332 | |
| 333 /* Return function status */ | |
| 334 return HAL_OK; | |
| 335 } | |
| 336 | |
| 337 /** | |
| 338 * @brief Starts the TIM Hall Sensor Interface in interrupt mode. | |
| 339 * @param htim : TIM Hall Sensor handle | |
| 340 * @retval HAL status | |
| 341 */ | |
| 342 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim) | |
| 343 { | |
| 344 /* Check the parameters */ | |
| 345 assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); | |
| 346 | |
| 347 /* Enable the capture compare Interrupts 1 event */ | |
| 348 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); | |
| 349 | |
| 350 /* Enable the Input Capture channel 1 | |
| 351 (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ | |
| 352 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); | |
| 353 | |
| 354 /* Enable the Peripheral */ | |
| 355 __HAL_TIM_ENABLE(htim); | |
| 356 | |
| 357 /* Return function status */ | |
| 358 return HAL_OK; | |
| 359 } | |
| 360 | |
| 361 /** | |
| 362 * @brief Stops the TIM Hall Sensor Interface in interrupt mode. | |
| 363 * @param htim : TIM handle | |
| 364 * @retval HAL status | |
| 365 */ | |
| 366 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim) | |
| 367 { | |
| 368 /* Check the parameters */ | |
| 369 assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); | |
| 370 | |
| 371 /* Disable the Input Capture channel 1 | |
| 372 (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ | |
| 373 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); | |
| 374 | |
| 375 /* Disable the capture compare Interrupts event */ | |
| 376 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); | |
| 377 | |
| 378 /* Disable the Peripheral */ | |
| 379 __HAL_TIM_DISABLE(htim); | |
| 380 | |
| 381 /* Return function status */ | |
| 382 return HAL_OK; | |
| 383 } | |
| 384 | |
| 385 /** | |
| 386 * @brief Starts the TIM Hall Sensor Interface in DMA mode. | |
| 387 * @param htim : TIM Hall Sensor handle | |
| 388 * @param pData : The destination Buffer address. | |
| 389 * @param Length : The length of data to be transferred from TIM peripheral to memory. | |
| 390 * @retval HAL status | |
| 391 */ | |
| 392 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) | |
| 393 { | |
| 394 /* Check the parameters */ | |
| 395 assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); | |
| 396 | |
| 397 if((htim->State == HAL_TIM_STATE_BUSY)) | |
| 398 { | |
| 399 return HAL_BUSY; | |
| 400 } | |
| 401 else if((htim->State == HAL_TIM_STATE_READY)) | |
| 402 { | |
| 403 if(((uint32_t)pData == 0 ) && (Length > 0)) | |
| 404 { | |
| 405 return HAL_ERROR; | |
| 406 } | |
| 407 else | |
| 408 { | |
| 409 htim->State = HAL_TIM_STATE_BUSY; | |
| 410 } | |
| 411 } | |
| 412 /* Enable the Input Capture channel 1 | |
| 413 (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ | |
| 414 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); | |
| 415 | |
| 416 /* Set the DMA Input Capture 1 Callback */ | |
| 417 htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt; | |
| 418 /* Set the DMA error callback */ | |
| 419 htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; | |
| 420 | |
| 421 /* Enable the DMA channel for Capture 1*/ | |
| 422 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length); | |
| 423 | |
| 424 /* Enable the capture compare 1 Interrupt */ | |
| 425 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); | |
| 426 | |
| 427 /* Enable the Peripheral */ | |
| 428 __HAL_TIM_ENABLE(htim); | |
| 429 | |
| 430 /* Return function status */ | |
| 431 return HAL_OK; | |
| 432 } | |
| 433 | |
| 434 /** | |
| 435 * @brief Stops the TIM Hall Sensor Interface in DMA mode. | |
| 436 * @param htim : TIM handle | |
| 437 * @retval HAL status | |
| 438 */ | |
| 439 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim) | |
| 440 { | |
| 441 /* Check the parameters */ | |
| 442 assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); | |
| 443 | |
| 444 /* Disable the Input Capture channel 1 | |
| 445 (in the Hall Sensor Interface the 3 possible channels that are used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ | |
| 446 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); | |
| 447 | |
| 448 | |
| 449 /* Disable the capture compare Interrupts 1 event */ | |
| 450 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); | |
| 451 | |
| 452 /* Disable the Peripheral */ | |
| 453 __HAL_TIM_DISABLE(htim); | |
| 454 | |
| 455 /* Return function status */ | |
| 456 return HAL_OK; | |
| 457 } | |
| 458 | |
| 459 /** | |
| 460 * @} | |
| 461 */ | |
| 462 | |
| 463 #if defined (STM32F100xB) || defined (STM32F100xE) || \ | |
| 464 defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ | |
| 465 defined (STM32F105xC) || defined (STM32F107xC) | |
| 466 | |
| 467 /** @defgroup TIMEx_Exported_Functions_Group2 Timer Complementary Output Compare functions | |
| 468 * @brief Timer Complementary Output Compare functions | |
| 469 * | |
| 470 @verbatim | |
| 471 ============================================================================== | |
| 472 ##### Timer Complementary Output Compare functions ##### | |
| 473 ============================================================================== | |
| 474 [..] | |
| 475 This section provides functions allowing to: | |
| 476 (+) Start the Complementary Output Compare/PWM. | |
| 477 (+) Stop the Complementary Output Compare/PWM. | |
| 478 (+) Start the Complementary Output Compare/PWM and enable interrupts. | |
| 479 (+) Stop the Complementary Output Compare/PWM and disable interrupts. | |
| 480 (+) Start the Complementary Output Compare/PWM and enable DMA transfers. | |
| 481 (+) Stop the Complementary Output Compare/PWM and disable DMA transfers. | |
| 482 | |
| 483 @endverbatim | |
| 484 * @{ | |
| 485 */ | |
| 486 | |
| 487 /** | |
| 488 * @brief Starts the TIM Output Compare signal generation on the complementary | |
| 489 * output. | |
| 490 * @param htim : TIM Output Compare handle | |
| 491 * @param Channel : TIM Channel to be enabled | |
| 492 * This parameter can be one of the following values: | |
| 493 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
| 494 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
| 495 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
| 496 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
| 497 * @retval HAL status | |
| 498 */ | |
| 499 HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) | |
| 500 { | |
| 501 /* Check the parameters */ | |
| 502 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
| 503 | |
| 504 /* Enable the Capture compare channel N */ | |
| 505 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); | |
| 506 | |
| 507 /* Enable the Main Ouput */ | |
| 508 __HAL_TIM_MOE_ENABLE(htim); | |
| 509 | |
| 510 /* Enable the Peripheral */ | |
| 511 __HAL_TIM_ENABLE(htim); | |
| 512 | |
| 513 /* Return function status */ | |
| 514 return HAL_OK; | |
| 515 } | |
| 516 | |
| 517 /** | |
| 518 * @brief Stops the TIM Output Compare signal generation on the complementary | |
| 519 * output. | |
| 520 * @param htim : TIM handle | |
| 521 * @param Channel : TIM Channel to be disabled | |
| 522 * This parameter can be one of the following values: | |
| 523 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
| 524 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
| 525 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
| 526 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
| 527 * @retval HAL status | |
| 528 */ | |
| 529 HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) | |
| 530 { | |
| 531 /* Check the parameters */ | |
| 532 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
| 533 | |
| 534 /* Disable the Capture compare channel N */ | |
| 535 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); | |
| 536 | |
| 537 /* Disable the Main Ouput */ | |
| 538 __HAL_TIM_MOE_DISABLE(htim); | |
| 539 | |
| 540 /* Disable the Peripheral */ | |
| 541 __HAL_TIM_DISABLE(htim); | |
| 542 | |
| 543 /* Return function status */ | |
| 544 return HAL_OK; | |
| 545 } | |
| 546 | |
| 547 /** | |
| 548 * @brief Starts the TIM Output Compare signal generation in interrupt mode | |
| 549 * on the complementary output. | |
| 550 * @param htim : TIM OC handle | |
| 551 * @param Channel : TIM Channel to be enabled | |
| 552 * This parameter can be one of the following values: | |
| 553 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
| 554 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
| 555 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
| 556 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
| 557 * @retval HAL status | |
| 558 */ | |
| 559 HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) | |
| 560 { | |
| 561 /* Check the parameters */ | |
| 562 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
| 563 | |
| 564 switch (Channel) | |
| 565 { | |
| 566 case TIM_CHANNEL_1: | |
| 567 { | |
| 568 /* Enable the TIM Output Compare interrupt */ | |
| 569 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); | |
| 570 } | |
| 571 break; | |
| 572 | |
| 573 case TIM_CHANNEL_2: | |
| 574 { | |
| 575 /* Enable the TIM Output Compare interrupt */ | |
| 576 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); | |
| 577 } | |
| 578 break; | |
| 579 | |
| 580 case TIM_CHANNEL_3: | |
| 581 { | |
| 582 /* Enable the TIM Output Compare interrupt */ | |
| 583 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); | |
| 584 } | |
| 585 break; | |
| 586 | |
| 587 case TIM_CHANNEL_4: | |
| 588 { | |
| 589 /* Enable the TIM Output Compare interrupt */ | |
| 590 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); | |
| 591 } | |
| 592 break; | |
| 593 | |
| 594 default: | |
| 595 break; | |
| 596 } | |
| 597 | |
| 598 /* Enable the TIM Break interrupt */ | |
| 599 __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK); | |
| 600 | |
| 601 /* Enable the Capture compare channel N */ | |
| 602 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); | |
| 603 | |
| 604 /* Enable the Main Ouput */ | |
| 605 __HAL_TIM_MOE_ENABLE(htim); | |
| 606 | |
| 607 /* Enable the Peripheral */ | |
| 608 __HAL_TIM_ENABLE(htim); | |
| 609 | |
| 610 /* Return function status */ | |
| 611 return HAL_OK; | |
| 612 } | |
| 613 | |
| 614 /** | |
| 615 * @brief Stops the TIM Output Compare signal generation in interrupt mode | |
| 616 * on the complementary output. | |
| 617 * @param htim : TIM Output Compare handle | |
| 618 * @param Channel : TIM Channel to be disabled | |
| 619 * This parameter can be one of the following values: | |
| 620 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
| 621 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
| 622 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
| 623 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
| 624 * @retval HAL status | |
| 625 */ | |
| 626 HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) | |
| 627 { | |
| 628 uint32_t tmpccer = 0; | |
| 629 | |
| 630 /* Check the parameters */ | |
| 631 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
| 632 | |
| 633 switch (Channel) | |
| 634 { | |
| 635 case TIM_CHANNEL_1: | |
| 636 { | |
| 637 /* Disable the TIM Output Compare interrupt */ | |
| 638 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); | |
| 639 } | |
| 640 break; | |
| 641 | |
| 642 case TIM_CHANNEL_2: | |
| 643 { | |
| 644 /* Disable the TIM Output Compare interrupt */ | |
| 645 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); | |
| 646 } | |
| 647 break; | |
| 648 | |
| 649 case TIM_CHANNEL_3: | |
| 650 { | |
| 651 /* Disable the TIM Output Compare interrupt */ | |
| 652 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); | |
| 653 } | |
| 654 break; | |
| 655 | |
| 656 case TIM_CHANNEL_4: | |
| 657 { | |
| 658 /* Disable the TIM Output Compare interrupt */ | |
| 659 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); | |
| 660 } | |
| 661 break; | |
| 662 | |
| 663 default: | |
| 664 break; | |
| 665 } | |
| 666 | |
| 667 /* Disable the Capture compare channel N */ | |
| 668 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); | |
| 669 | |
| 670 /* Disable the TIM Break interrupt (only if no more channel is active) */ | |
| 671 tmpccer = htim->Instance->CCER; | |
| 672 if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == RESET) | |
| 673 { | |
| 674 __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK); | |
| 675 } | |
| 676 | |
| 677 /* Disable the Main Ouput */ | |
| 678 __HAL_TIM_MOE_DISABLE(htim); | |
| 679 | |
| 680 /* Disable the Peripheral */ | |
| 681 __HAL_TIM_DISABLE(htim); | |
| 682 | |
| 683 /* Return function status */ | |
| 684 return HAL_OK; | |
| 685 } | |
| 686 | |
| 687 /** | |
| 688 * @brief Starts the TIM Output Compare signal generation in DMA mode | |
| 689 * on the complementary output. | |
| 690 * @param htim : TIM Output Compare handle | |
| 691 * @param Channel : TIM Channel to be enabled | |
| 692 * This parameter can be one of the following values: | |
| 693 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
| 694 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
| 695 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
| 696 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
| 697 * @param pData : The source Buffer address. | |
| 698 * @param Length : The length of data to be transferred from memory to TIM peripheral | |
| 699 * @retval HAL status | |
| 700 */ | |
| 701 HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) | |
| 702 { | |
| 703 /* Check the parameters */ | |
| 704 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
| 705 | |
| 706 if((htim->State == HAL_TIM_STATE_BUSY)) | |
| 707 { | |
| 708 return HAL_BUSY; | |
| 709 } | |
| 710 else if((htim->State == HAL_TIM_STATE_READY)) | |
| 711 { | |
| 712 if(((uint32_t)pData == 0 ) && (Length > 0)) | |
| 713 { | |
| 714 return HAL_ERROR; | |
| 715 } | |
| 716 else | |
| 717 { | |
| 718 htim->State = HAL_TIM_STATE_BUSY; | |
| 719 } | |
| 720 } | |
| 721 switch (Channel) | |
| 722 { | |
| 723 case TIM_CHANNEL_1: | |
| 724 { | |
| 725 /* Set the DMA Period elapsed callback */ | |
| 726 htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; | |
| 727 | |
| 728 /* Set the DMA error callback */ | |
| 729 htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; | |
| 730 | |
| 731 /* Enable the DMA channel */ | |
| 732 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length); | |
| 733 | |
| 734 /* Enable the TIM Output Compare DMA request */ | |
| 735 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); | |
| 736 } | |
| 737 break; | |
| 738 | |
| 739 case TIM_CHANNEL_2: | |
| 740 { | |
| 741 /* Set the DMA Period elapsed callback */ | |
| 742 htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; | |
| 743 | |
| 744 /* Set the DMA error callback */ | |
| 745 htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; | |
| 746 | |
| 747 /* Enable the DMA channel */ | |
| 748 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length); | |
| 749 | |
| 750 /* Enable the TIM Output Compare DMA request */ | |
| 751 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); | |
| 752 } | |
| 753 break; | |
| 754 | |
| 755 case TIM_CHANNEL_3: | |
| 756 { | |
| 757 /* Set the DMA Period elapsed callback */ | |
| 758 htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; | |
| 759 | |
| 760 /* Set the DMA error callback */ | |
| 761 htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; | |
| 762 | |
| 763 /* Enable the DMA channel */ | |
| 764 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3,Length); | |
| 765 | |
| 766 /* Enable the TIM Output Compare DMA request */ | |
| 767 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); | |
| 768 } | |
| 769 break; | |
| 770 | |
| 771 case TIM_CHANNEL_4: | |
| 772 { | |
| 773 /* Set the DMA Period elapsed callback */ | |
| 774 htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; | |
| 775 | |
| 776 /* Set the DMA error callback */ | |
| 777 htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; | |
| 778 | |
| 779 /* Enable the DMA channel */ | |
| 780 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length); | |
| 781 | |
| 782 /* Enable the TIM Output Compare DMA request */ | |
| 783 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); | |
| 784 } | |
| 785 break; | |
| 786 | |
| 787 default: | |
| 788 break; | |
| 789 } | |
| 790 | |
| 791 /* Enable the Capture compare channel N */ | |
| 792 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); | |
| 793 | |
| 794 /* Enable the Main Ouput */ | |
| 795 __HAL_TIM_MOE_ENABLE(htim); | |
| 796 | |
| 797 /* Enable the Peripheral */ | |
| 798 __HAL_TIM_ENABLE(htim); | |
| 799 | |
| 800 /* Return function status */ | |
| 801 return HAL_OK; | |
| 802 } | |
| 803 | |
| 804 /** | |
| 805 * @brief Stops the TIM Output Compare signal generation in DMA mode | |
| 806 * on the complementary output. | |
| 807 * @param htim : TIM Output Compare handle | |
| 808 * @param Channel : TIM Channel to be disabled | |
| 809 * This parameter can be one of the following values: | |
| 810 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
| 811 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
| 812 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
| 813 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
| 814 * @retval HAL status | |
| 815 */ | |
| 816 HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) | |
| 817 { | |
| 818 /* Check the parameters */ | |
| 819 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
| 820 | |
| 821 switch (Channel) | |
| 822 { | |
| 823 case TIM_CHANNEL_1: | |
| 824 { | |
| 825 /* Disable the TIM Output Compare DMA request */ | |
| 826 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); | |
| 827 } | |
| 828 break; | |
| 829 | |
| 830 case TIM_CHANNEL_2: | |
| 831 { | |
| 832 /* Disable the TIM Output Compare DMA request */ | |
| 833 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); | |
| 834 } | |
| 835 break; | |
| 836 | |
| 837 case TIM_CHANNEL_3: | |
| 838 { | |
| 839 /* Disable the TIM Output Compare DMA request */ | |
| 840 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); | |
| 841 } | |
| 842 break; | |
| 843 | |
| 844 case TIM_CHANNEL_4: | |
| 845 { | |
| 846 /* Disable the TIM Output Compare interrupt */ | |
| 847 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); | |
| 848 } | |
| 849 break; | |
| 850 | |
| 851 default: | |
| 852 break; | |
| 853 } | |
| 854 | |
| 855 /* Disable the Capture compare channel N */ | |
| 856 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); | |
| 857 | |
| 858 /* Disable the Main Ouput */ | |
| 859 __HAL_TIM_MOE_DISABLE(htim); | |
| 860 | |
| 861 /* Disable the Peripheral */ | |
| 862 __HAL_TIM_DISABLE(htim); | |
| 863 | |
| 864 /* Change the htim state */ | |
| 865 htim->State = HAL_TIM_STATE_READY; | |
| 866 | |
| 867 /* Return function status */ | |
| 868 return HAL_OK; | |
| 869 } | |
| 870 | |
| 871 /** | |
| 872 * @} | |
| 873 */ | |
| 874 | |
| 875 /** @defgroup TIMEx_Exported_Functions_Group3 Timer Complementary PWM functions | |
| 876 * @brief Timer Complementary PWM functions | |
| 877 * | |
| 878 @verbatim | |
| 879 ============================================================================== | |
| 880 ##### Timer Complementary PWM functions ##### | |
| 881 ============================================================================== | |
| 882 [..] | |
| 883 This section provides functions allowing to: | |
| 884 (+) Start the Complementary PWM. | |
| 885 (+) Stop the Complementary PWM. | |
| 886 (+) Start the Complementary PWM and enable interrupts. | |
| 887 (+) Stop the Complementary PWM and disable interrupts. | |
| 888 (+) Start the Complementary PWM and enable DMA transfers. | |
| 889 (+) Stop the Complementary PWM and disable DMA transfers. | |
| 890 (+) Start the Complementary Input Capture measurement. | |
| 891 (+) Stop the Complementary Input Capture. | |
| 892 (+) Start the Complementary Input Capture and enable interrupts. | |
| 893 (+) Stop the Complementary Input Capture and disable interrupts. | |
| 894 (+) Start the Complementary Input Capture and enable DMA transfers. | |
| 895 (+) Stop the Complementary Input Capture and disable DMA transfers. | |
| 896 (+) Start the Complementary One Pulse generation. | |
| 897 (+) Stop the Complementary One Pulse. | |
| 898 (+) Start the Complementary One Pulse and enable interrupts. | |
| 899 (+) Stop the Complementary One Pulse and disable interrupts. | |
| 900 | |
| 901 @endverbatim | |
| 902 * @{ | |
| 903 */ | |
| 904 | |
| 905 /** | |
| 906 * @brief Starts the PWM signal generation on the complementary output. | |
| 907 * @param htim : TIM handle | |
| 908 * @param Channel : TIM Channel to be enabled | |
| 909 * This parameter can be one of the following values: | |
| 910 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
| 911 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
| 912 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
| 913 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
| 914 * @retval HAL status | |
| 915 */ | |
| 916 HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) | |
| 917 { | |
| 918 /* Check the parameters */ | |
| 919 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
| 920 | |
| 921 /* Enable the complementary PWM output */ | |
| 922 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); | |
| 923 | |
| 924 /* Enable the Main Ouput */ | |
| 925 __HAL_TIM_MOE_ENABLE(htim); | |
| 926 | |
| 927 /* Enable the Peripheral */ | |
| 928 __HAL_TIM_ENABLE(htim); | |
| 929 | |
| 930 /* Return function status */ | |
| 931 return HAL_OK; | |
| 932 } | |
| 933 | |
| 934 /** | |
| 935 * @brief Stops the PWM signal generation on the complementary output. | |
| 936 * @param htim : TIM handle | |
| 937 * @param Channel : TIM Channel to be disabled | |
| 938 * This parameter can be one of the following values: | |
| 939 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
| 940 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
| 941 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
| 942 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
| 943 * @retval HAL status | |
| 944 */ | |
| 945 HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) | |
| 946 { | |
| 947 /* Check the parameters */ | |
| 948 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
| 949 | |
| 950 /* Disable the complementary PWM output */ | |
| 951 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); | |
| 952 | |
| 953 /* Disable the Main Ouput */ | |
| 954 __HAL_TIM_MOE_DISABLE(htim); | |
| 955 | |
| 956 /* Disable the Peripheral */ | |
| 957 __HAL_TIM_DISABLE(htim); | |
| 958 | |
| 959 /* Return function status */ | |
| 960 return HAL_OK; | |
| 961 } | |
| 962 | |
| 963 /** | |
| 964 * @brief Starts the PWM signal generation in interrupt mode on the | |
| 965 * complementary output. | |
| 966 * @param htim : TIM handle | |
| 967 * @param Channel : TIM Channel to be disabled | |
| 968 * This parameter can be one of the following values: | |
| 969 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
| 970 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
| 971 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
| 972 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
| 973 * @retval HAL status | |
| 974 */ | |
| 975 HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) | |
| 976 { | |
| 977 /* Check the parameters */ | |
| 978 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
| 979 | |
| 980 switch (Channel) | |
| 981 { | |
| 982 case TIM_CHANNEL_1: | |
| 983 { | |
| 984 /* Enable the TIM Capture/Compare 1 interrupt */ | |
| 985 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); | |
| 986 } | |
| 987 break; | |
| 988 | |
| 989 case TIM_CHANNEL_2: | |
| 990 { | |
| 991 /* Enable the TIM Capture/Compare 2 interrupt */ | |
| 992 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); | |
| 993 } | |
| 994 break; | |
| 995 | |
| 996 case TIM_CHANNEL_3: | |
| 997 { | |
| 998 /* Enable the TIM Capture/Compare 3 interrupt */ | |
| 999 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); | |
| 1000 } | |
| 1001 break; | |
| 1002 | |
| 1003 case TIM_CHANNEL_4: | |
| 1004 { | |
| 1005 /* Enable the TIM Capture/Compare 4 interrupt */ | |
| 1006 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); | |
| 1007 } | |
| 1008 break; | |
| 1009 | |
| 1010 default: | |
| 1011 break; | |
| 1012 } | |
| 1013 | |
| 1014 /* Enable the TIM Break interrupt */ | |
| 1015 __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK); | |
| 1016 | |
| 1017 /* Enable the complementary PWM output */ | |
| 1018 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); | |
| 1019 | |
| 1020 /* Enable the Main Ouput */ | |
| 1021 __HAL_TIM_MOE_ENABLE(htim); | |
| 1022 | |
| 1023 /* Enable the Peripheral */ | |
| 1024 __HAL_TIM_ENABLE(htim); | |
| 1025 | |
| 1026 /* Return function status */ | |
| 1027 return HAL_OK; | |
| 1028 } | |
| 1029 | |
| 1030 /** | |
| 1031 * @brief Stops the PWM signal generation in interrupt mode on the | |
| 1032 * complementary output. | |
| 1033 * @param htim : TIM handle | |
| 1034 * @param Channel : TIM Channel to be disabled | |
| 1035 * This parameter can be one of the following values: | |
| 1036 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
| 1037 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
| 1038 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
| 1039 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
| 1040 * @retval HAL status | |
| 1041 */ | |
| 1042 HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT (TIM_HandleTypeDef *htim, uint32_t Channel) | |
| 1043 { | |
| 1044 uint32_t tmpccer = 0; | |
| 1045 | |
| 1046 /* Check the parameters */ | |
| 1047 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
| 1048 | |
| 1049 switch (Channel) | |
| 1050 { | |
| 1051 case TIM_CHANNEL_1: | |
| 1052 { | |
| 1053 /* Disable the TIM Capture/Compare 1 interrupt */ | |
| 1054 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); | |
| 1055 } | |
| 1056 break; | |
| 1057 | |
| 1058 case TIM_CHANNEL_2: | |
| 1059 { | |
| 1060 /* Disable the TIM Capture/Compare 2 interrupt */ | |
| 1061 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); | |
| 1062 } | |
| 1063 break; | |
| 1064 | |
| 1065 case TIM_CHANNEL_3: | |
| 1066 { | |
| 1067 /* Disable the TIM Capture/Compare 3 interrupt */ | |
| 1068 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3); | |
| 1069 } | |
| 1070 break; | |
| 1071 | |
| 1072 case TIM_CHANNEL_4: | |
| 1073 { | |
| 1074 /* Disable the TIM Capture/Compare 3 interrupt */ | |
| 1075 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4); | |
| 1076 } | |
| 1077 break; | |
| 1078 | |
| 1079 default: | |
| 1080 break; | |
| 1081 } | |
| 1082 | |
| 1083 /* Disable the complementary PWM output */ | |
| 1084 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); | |
| 1085 | |
| 1086 /* Disable the TIM Break interrupt (only if no more channel is active) */ | |
| 1087 tmpccer = htim->Instance->CCER; | |
| 1088 if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == RESET) | |
| 1089 { | |
| 1090 __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK); | |
| 1091 } | |
| 1092 | |
| 1093 /* Disable the Main Ouput */ | |
| 1094 __HAL_TIM_MOE_DISABLE(htim); | |
| 1095 | |
| 1096 /* Disable the Peripheral */ | |
| 1097 __HAL_TIM_DISABLE(htim); | |
| 1098 | |
| 1099 /* Return function status */ | |
| 1100 return HAL_OK; | |
| 1101 } | |
| 1102 | |
| 1103 /** | |
| 1104 * @brief Starts the TIM PWM signal generation in DMA mode on the | |
| 1105 * complementary output | |
| 1106 * @param htim : TIM handle | |
| 1107 * @param Channel : TIM Channel to be enabled | |
| 1108 * This parameter can be one of the following values: | |
| 1109 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
| 1110 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
| 1111 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
| 1112 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
| 1113 * @param pData : The source Buffer address. | |
| 1114 * @param Length : The length of data to be transferred from memory to TIM peripheral | |
| 1115 * @retval HAL status | |
| 1116 */ | |
| 1117 HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) | |
| 1118 { | |
| 1119 /* Check the parameters */ | |
| 1120 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
| 1121 | |
| 1122 if((htim->State == HAL_TIM_STATE_BUSY)) | |
| 1123 { | |
| 1124 return HAL_BUSY; | |
| 1125 } | |
| 1126 else if((htim->State == HAL_TIM_STATE_READY)) | |
| 1127 { | |
| 1128 if(((uint32_t)pData == 0 ) && (Length > 0)) | |
| 1129 { | |
| 1130 return HAL_ERROR; | |
| 1131 } | |
| 1132 else | |
| 1133 { | |
| 1134 htim->State = HAL_TIM_STATE_BUSY; | |
| 1135 } | |
| 1136 } | |
| 1137 switch (Channel) | |
| 1138 { | |
| 1139 case TIM_CHANNEL_1: | |
| 1140 { | |
| 1141 /* Set the DMA Period elapsed callback */ | |
| 1142 htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseCplt; | |
| 1143 | |
| 1144 /* Set the DMA error callback */ | |
| 1145 htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ; | |
| 1146 | |
| 1147 /* Enable the DMA channel */ | |
| 1148 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length); | |
| 1149 | |
| 1150 /* Enable the TIM Capture/Compare 1 DMA request */ | |
| 1151 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1); | |
| 1152 } | |
| 1153 break; | |
| 1154 | |
| 1155 case TIM_CHANNEL_2: | |
| 1156 { | |
| 1157 /* Set the DMA Period elapsed callback */ | |
| 1158 htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseCplt; | |
| 1159 | |
| 1160 /* Set the DMA error callback */ | |
| 1161 htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ; | |
| 1162 | |
| 1163 /* Enable the DMA channel */ | |
| 1164 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length); | |
| 1165 | |
| 1166 /* Enable the TIM Capture/Compare 2 DMA request */ | |
| 1167 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2); | |
| 1168 } | |
| 1169 break; | |
| 1170 | |
| 1171 case TIM_CHANNEL_3: | |
| 1172 { | |
| 1173 /* Set the DMA Period elapsed callback */ | |
| 1174 htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseCplt; | |
| 1175 | |
| 1176 /* Set the DMA error callback */ | |
| 1177 htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ; | |
| 1178 | |
| 1179 /* Enable the DMA channel */ | |
| 1180 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3,Length); | |
| 1181 | |
| 1182 /* Enable the TIM Capture/Compare 3 DMA request */ | |
| 1183 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3); | |
| 1184 } | |
| 1185 break; | |
| 1186 | |
| 1187 case TIM_CHANNEL_4: | |
| 1188 { | |
| 1189 /* Set the DMA Period elapsed callback */ | |
| 1190 htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback = TIM_DMADelayPulseCplt; | |
| 1191 | |
| 1192 /* Set the DMA error callback */ | |
| 1193 htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ; | |
| 1194 | |
| 1195 /* Enable the DMA channel */ | |
| 1196 HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length); | |
| 1197 | |
| 1198 /* Enable the TIM Capture/Compare 4 DMA request */ | |
| 1199 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4); | |
| 1200 } | |
| 1201 break; | |
| 1202 | |
| 1203 default: | |
| 1204 break; | |
| 1205 } | |
| 1206 | |
| 1207 /* Enable the complementary PWM output */ | |
| 1208 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); | |
| 1209 | |
| 1210 /* Enable the Main Ouput */ | |
| 1211 __HAL_TIM_MOE_ENABLE(htim); | |
| 1212 | |
| 1213 /* Enable the Peripheral */ | |
| 1214 __HAL_TIM_ENABLE(htim); | |
| 1215 | |
| 1216 /* Return function status */ | |
| 1217 return HAL_OK; | |
| 1218 } | |
| 1219 | |
| 1220 /** | |
| 1221 * @brief Stops the TIM PWM signal generation in DMA mode on the complementary | |
| 1222 * output | |
| 1223 * @param htim : TIM handle | |
| 1224 * @param Channel : TIM Channel to be disabled | |
| 1225 * This parameter can be one of the following values: | |
| 1226 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
| 1227 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
| 1228 * @arg TIM_CHANNEL_3: TIM Channel 3 selected | |
| 1229 * @arg TIM_CHANNEL_4: TIM Channel 4 selected | |
| 1230 * @retval HAL status | |
| 1231 */ | |
| 1232 HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) | |
| 1233 { | |
| 1234 /* Check the parameters */ | |
| 1235 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel)); | |
| 1236 | |
| 1237 switch (Channel) | |
| 1238 { | |
| 1239 case TIM_CHANNEL_1: | |
| 1240 { | |
| 1241 /* Disable the TIM Capture/Compare 1 DMA request */ | |
| 1242 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1); | |
| 1243 } | |
| 1244 break; | |
| 1245 | |
| 1246 case TIM_CHANNEL_2: | |
| 1247 { | |
| 1248 /* Disable the TIM Capture/Compare 2 DMA request */ | |
| 1249 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2); | |
| 1250 } | |
| 1251 break; | |
| 1252 | |
| 1253 case TIM_CHANNEL_3: | |
| 1254 { | |
| 1255 /* Disable the TIM Capture/Compare 3 DMA request */ | |
| 1256 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3); | |
| 1257 } | |
| 1258 break; | |
| 1259 | |
| 1260 case TIM_CHANNEL_4: | |
| 1261 { | |
| 1262 /* Disable the TIM Capture/Compare 4 DMA request */ | |
| 1263 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4); | |
| 1264 } | |
| 1265 break; | |
| 1266 | |
| 1267 default: | |
| 1268 break; | |
| 1269 } | |
| 1270 | |
| 1271 /* Disable the complementary PWM output */ | |
| 1272 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); | |
| 1273 | |
| 1274 /* Disable the Main Ouput */ | |
| 1275 __HAL_TIM_MOE_DISABLE(htim); | |
| 1276 | |
| 1277 /* Disable the Peripheral */ | |
| 1278 __HAL_TIM_DISABLE(htim); | |
| 1279 | |
| 1280 /* Change the htim state */ | |
| 1281 htim->State = HAL_TIM_STATE_READY; | |
| 1282 | |
| 1283 /* Return function status */ | |
| 1284 return HAL_OK; | |
| 1285 } | |
| 1286 | |
| 1287 /** | |
| 1288 * @} | |
| 1289 */ | |
| 1290 | |
| 1291 /** @defgroup TIMEx_Exported_Functions_Group4 Timer Complementary One Pulse functions | |
| 1292 * @brief Timer Complementary One Pulse functions | |
| 1293 * | |
| 1294 @verbatim | |
| 1295 ============================================================================== | |
| 1296 ##### Timer Complementary One Pulse functions ##### | |
| 1297 ============================================================================== | |
| 1298 [..] | |
| 1299 This section provides functions allowing to: | |
| 1300 (+) Start the Complementary One Pulse generation. | |
| 1301 (+) Stop the Complementary One Pulse. | |
| 1302 (+) Start the Complementary One Pulse and enable interrupts. | |
| 1303 (+) Stop the Complementary One Pulse and disable interrupts. | |
| 1304 | |
| 1305 @endverbatim | |
| 1306 * @{ | |
| 1307 */ | |
| 1308 | |
| 1309 /** | |
| 1310 * @brief Starts the TIM One Pulse signal generation on the complemetary | |
| 1311 * output. | |
| 1312 * @param htim : TIM One Pulse handle | |
| 1313 * @param OutputChannel : TIM Channel to be enabled | |
| 1314 * This parameter can be one of the following values: | |
| 1315 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
| 1316 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
| 1317 * @retval HAL status | |
| 1318 */ | |
| 1319 HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) | |
| 1320 { | |
| 1321 /* Check the parameters */ | |
| 1322 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); | |
| 1323 | |
| 1324 /* Enable the complementary One Pulse output */ | |
| 1325 TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE); | |
| 1326 | |
| 1327 /* Enable the Main Ouput */ | |
| 1328 __HAL_TIM_MOE_ENABLE(htim); | |
| 1329 | |
| 1330 /* Return function status */ | |
| 1331 return HAL_OK; | |
| 1332 } | |
| 1333 | |
| 1334 /** | |
| 1335 * @brief Stops the TIM One Pulse signal generation on the complementary | |
| 1336 * output. | |
| 1337 * @param htim : TIM One Pulse handle | |
| 1338 * @param OutputChannel : TIM Channel to be disabled | |
| 1339 * This parameter can be one of the following values: | |
| 1340 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
| 1341 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
| 1342 * @retval HAL status | |
| 1343 */ | |
| 1344 HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) | |
| 1345 { | |
| 1346 | |
| 1347 /* Check the parameters */ | |
| 1348 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); | |
| 1349 | |
| 1350 /* Disable the complementary One Pulse output */ | |
| 1351 TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE); | |
| 1352 | |
| 1353 /* Disable the Main Ouput */ | |
| 1354 __HAL_TIM_MOE_DISABLE(htim); | |
| 1355 | |
| 1356 /* Disable the Peripheral */ | |
| 1357 __HAL_TIM_DISABLE(htim); | |
| 1358 | |
| 1359 /* Return function status */ | |
| 1360 return HAL_OK; | |
| 1361 } | |
| 1362 | |
| 1363 /** | |
| 1364 * @brief Starts the TIM One Pulse signal generation in interrupt mode on the | |
| 1365 * complementary channel. | |
| 1366 * @param htim : TIM One Pulse handle | |
| 1367 * @param OutputChannel : TIM Channel to be enabled | |
| 1368 * This parameter can be one of the following values: | |
| 1369 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
| 1370 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
| 1371 * @retval HAL status | |
| 1372 */ | |
| 1373 HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) | |
| 1374 { | |
| 1375 /* Check the parameters */ | |
| 1376 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); | |
| 1377 | |
| 1378 /* Enable the TIM Capture/Compare 1 interrupt */ | |
| 1379 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); | |
| 1380 | |
| 1381 /* Enable the TIM Capture/Compare 2 interrupt */ | |
| 1382 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); | |
| 1383 | |
| 1384 /* Enable the complementary One Pulse output */ | |
| 1385 TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE); | |
| 1386 | |
| 1387 /* Enable the Main Ouput */ | |
| 1388 __HAL_TIM_MOE_ENABLE(htim); | |
| 1389 | |
| 1390 /* Return function status */ | |
| 1391 return HAL_OK; | |
| 1392 } | |
| 1393 | |
| 1394 /** | |
| 1395 * @brief Stops the TIM One Pulse signal generation in interrupt mode on the | |
| 1396 * complementary channel. | |
| 1397 * @param htim : TIM One Pulse handle | |
| 1398 * @param OutputChannel : TIM Channel to be disabled | |
| 1399 * This parameter can be one of the following values: | |
| 1400 * @arg TIM_CHANNEL_1: TIM Channel 1 selected | |
| 1401 * @arg TIM_CHANNEL_2: TIM Channel 2 selected | |
| 1402 * @retval HAL status | |
| 1403 */ | |
| 1404 HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) | |
| 1405 { | |
| 1406 /* Check the parameters */ | |
| 1407 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel)); | |
| 1408 | |
| 1409 /* Disable the TIM Capture/Compare 1 interrupt */ | |
| 1410 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1); | |
| 1411 | |
| 1412 /* Disable the TIM Capture/Compare 2 interrupt */ | |
| 1413 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2); | |
| 1414 | |
| 1415 /* Disable the complementary One Pulse output */ | |
| 1416 TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE); | |
| 1417 | |
| 1418 /* Disable the Main Ouput */ | |
| 1419 __HAL_TIM_MOE_DISABLE(htim); | |
| 1420 | |
| 1421 /* Disable the Peripheral */ | |
| 1422 __HAL_TIM_DISABLE(htim); | |
| 1423 | |
| 1424 /* Return function status */ | |
| 1425 return HAL_OK; | |
| 1426 } | |
| 1427 | |
| 1428 /** | |
| 1429 * @} | |
| 1430 */ | |
| 1431 | |
| 1432 #endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ | |
| 1433 /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ | |
| 1434 /* defined(STM32F105xC) || defined(STM32F107xC) */ | |
| 1435 | |
| 1436 /** @defgroup TIMEx_Exported_Functions_Group5 Peripheral Control functions | |
| 1437 * @brief Peripheral Control functions | |
| 1438 * | |
| 1439 @verbatim | |
| 1440 ============================================================================== | |
| 1441 ##### Peripheral Control functions ##### | |
| 1442 ============================================================================== | |
| 1443 [..] | |
| 1444 This section provides functions allowing to: | |
| 1445 (+) Configure the commutation event in case of use of the Hall sensor interface. | |
| 1446 (+) Configure Complementary channels, break features and dead time. | |
| 1447 (+) Configure Master synchronization. | |
| 1448 | |
| 1449 @endverbatim | |
| 1450 * @{ | |
| 1451 */ | |
| 1452 | |
| 1453 #if defined (STM32F100xB) || defined (STM32F100xE) || \ | |
| 1454 defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ | |
| 1455 defined (STM32F105xC) || defined (STM32F107xC) | |
| 1456 | |
| 1457 /** | |
| 1458 * @brief Configure the TIM commutation event sequence. | |
| 1459 * @note: this function is mandatory to use the commutation event in order to | |
| 1460 * update the configuration at each commutation detection on the TRGI input of the Timer, | |
| 1461 * the typical use of this feature is with the use of another Timer(interface Timer) | |
| 1462 * configured in Hall sensor interface, this interface Timer will generate the | |
| 1463 * commutation at its TRGO output (connected to Timer used in this function) each time | |
| 1464 * the TI1 of the Interface Timer detect a commutation at its input TI1. | |
| 1465 * @param htim : TIM handle | |
| 1466 * @param InputTrigger : the Internal trigger corresponding to the Timer Interfacing with the Hall sensor | |
| 1467 * This parameter can be one of the following values: | |
| 1468 * @arg TIM_TS_ITR0: Internal trigger 0 selected | |
| 1469 * @arg TIM_TS_ITR1: Internal trigger 1 selected | |
| 1470 * @arg TIM_TS_ITR2: Internal trigger 2 selected | |
| 1471 * @arg TIM_TS_ITR3: Internal trigger 3 selected | |
| 1472 * @arg TIM_TS_NONE: No trigger is needed | |
| 1473 * @param CommutationSource : the Commutation Event source | |
| 1474 * This parameter can be one of the following values: | |
| 1475 * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer | |
| 1476 * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit | |
| 1477 * @retval HAL status | |
| 1478 */ | |
| 1479 HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) | |
| 1480 { | |
| 1481 /* Check the parameters */ | |
| 1482 assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); | |
| 1483 assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); | |
| 1484 | |
| 1485 __HAL_LOCK(htim); | |
| 1486 | |
| 1487 if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || | |
| 1488 (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) | |
| 1489 { | |
| 1490 /* Select the Input trigger */ | |
| 1491 htim->Instance->SMCR &= ~TIM_SMCR_TS; | |
| 1492 htim->Instance->SMCR |= InputTrigger; | |
| 1493 } | |
| 1494 | |
| 1495 /* Select the Capture Compare preload feature */ | |
| 1496 htim->Instance->CR2 |= TIM_CR2_CCPC; | |
| 1497 /* Select the Commutation event source */ | |
| 1498 htim->Instance->CR2 &= ~TIM_CR2_CCUS; | |
| 1499 htim->Instance->CR2 |= CommutationSource; | |
| 1500 | |
| 1501 __HAL_UNLOCK(htim); | |
| 1502 | |
| 1503 return HAL_OK; | |
| 1504 } | |
| 1505 | |
| 1506 /** | |
| 1507 * @brief Configure the TIM commutation event sequence with interrupt. | |
| 1508 * @note: this function is mandatory to use the commutation event in order to | |
| 1509 * update the configuration at each commutation detection on the TRGI input of the Timer, | |
| 1510 * the typical use of this feature is with the use of another Timer(interface Timer) | |
| 1511 * configured in Hall sensor interface, this interface Timer will generate the | |
| 1512 * commutation at its TRGO output (connected to Timer used in this function) each time | |
| 1513 * the TI1 of the Interface Timer detect a commutation at its input TI1. | |
| 1514 * @param htim : TIM handle | |
| 1515 * @param InputTrigger : the Internal trigger corresponding to the Timer Interfacing with the Hall sensor | |
| 1516 * This parameter can be one of the following values: | |
| 1517 * @arg TIM_TS_ITR0: Internal trigger 0 selected | |
| 1518 * @arg TIM_TS_ITR1: Internal trigger 1 selected | |
| 1519 * @arg TIM_TS_ITR2: Internal trigger 2 selected | |
| 1520 * @arg TIM_TS_ITR3: Internal trigger 3 selected | |
| 1521 * @arg TIM_TS_NONE: No trigger is needed | |
| 1522 * @param CommutationSource : the Commutation Event source | |
| 1523 * This parameter can be one of the following values: | |
| 1524 * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer | |
| 1525 * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit | |
| 1526 * @retval HAL status | |
| 1527 */ | |
| 1528 HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) | |
| 1529 { | |
| 1530 /* Check the parameters */ | |
| 1531 assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); | |
| 1532 assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); | |
| 1533 | |
| 1534 __HAL_LOCK(htim); | |
| 1535 | |
| 1536 if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || | |
| 1537 (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) | |
| 1538 { | |
| 1539 /* Select the Input trigger */ | |
| 1540 htim->Instance->SMCR &= ~TIM_SMCR_TS; | |
| 1541 htim->Instance->SMCR |= InputTrigger; | |
| 1542 } | |
| 1543 | |
| 1544 /* Select the Capture Compare preload feature */ | |
| 1545 htim->Instance->CR2 |= TIM_CR2_CCPC; | |
| 1546 /* Select the Commutation event source */ | |
| 1547 htim->Instance->CR2 &= ~TIM_CR2_CCUS; | |
| 1548 htim->Instance->CR2 |= CommutationSource; | |
| 1549 | |
| 1550 /* Enable the Commutation Interrupt Request */ | |
| 1551 __HAL_TIM_ENABLE_IT(htim, TIM_IT_COM); | |
| 1552 | |
| 1553 __HAL_UNLOCK(htim); | |
| 1554 | |
| 1555 return HAL_OK; | |
| 1556 } | |
| 1557 | |
| 1558 /** | |
| 1559 * @brief Configure the TIM commutation event sequence with DMA. | |
| 1560 * @note: this function is mandatory to use the commutation event in order to | |
| 1561 * update the configuration at each commutation detection on the TRGI input of the Timer, | |
| 1562 * the typical use of this feature is with the use of another Timer(interface Timer) | |
| 1563 * configured in Hall sensor interface, this interface Timer will generate the | |
| 1564 * commutation at its TRGO output (connected to Timer used in this function) each time | |
| 1565 * the TI1 of the Interface Timer detect a commutation at its input TI1. | |
| 1566 * @note: The user should configure the DMA in his own software, in This function only the COMDE bit is set | |
| 1567 * @param htim : TIM handle | |
| 1568 * @param InputTrigger : the Internal trigger corresponding to the Timer Interfacing with the Hall sensor | |
| 1569 * This parameter can be one of the following values: | |
| 1570 * @arg TIM_TS_ITR0: Internal trigger 0 selected | |
| 1571 * @arg TIM_TS_ITR1: Internal trigger 1 selected | |
| 1572 * @arg TIM_TS_ITR2: Internal trigger 2 selected | |
| 1573 * @arg TIM_TS_ITR3: Internal trigger 3 selected | |
| 1574 * @arg TIM_TS_NONE: No trigger is needed | |
| 1575 * @param CommutationSource : the Commutation Event source | |
| 1576 * This parameter can be one of the following values: | |
| 1577 * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer | |
| 1578 * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit | |
| 1579 * @retval HAL status | |
| 1580 */ | |
| 1581 HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) | |
| 1582 { | |
| 1583 /* Check the parameters */ | |
| 1584 assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance)); | |
| 1585 assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger)); | |
| 1586 | |
| 1587 __HAL_LOCK(htim); | |
| 1588 | |
| 1589 if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || | |
| 1590 (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) | |
| 1591 { | |
| 1592 /* Select the Input trigger */ | |
| 1593 htim->Instance->SMCR &= ~TIM_SMCR_TS; | |
| 1594 htim->Instance->SMCR |= InputTrigger; | |
| 1595 } | |
| 1596 | |
| 1597 /* Select the Capture Compare preload feature */ | |
| 1598 htim->Instance->CR2 |= TIM_CR2_CCPC; | |
| 1599 /* Select the Commutation event source */ | |
| 1600 htim->Instance->CR2 &= ~TIM_CR2_CCUS; | |
| 1601 htim->Instance->CR2 |= CommutationSource; | |
| 1602 | |
| 1603 /* Enable the Commutation DMA Request */ | |
| 1604 /* Set the DMA Commutation Callback */ | |
| 1605 htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt; | |
| 1606 /* Set the DMA error callback */ | |
| 1607 htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError; | |
| 1608 | |
| 1609 /* Enable the Commutation DMA Request */ | |
| 1610 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_COM); | |
| 1611 | |
| 1612 __HAL_UNLOCK(htim); | |
| 1613 | |
| 1614 return HAL_OK; | |
| 1615 } | |
| 1616 | |
| 1617 /** | |
| 1618 * @brief Configures the Break feature, dead time, Lock level, OSSI/OSSR State | |
| 1619 * and the AOE(automatic output enable). | |
| 1620 * @param htim : TIM handle | |
| 1621 * @param sBreakDeadTimeConfig : pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that | |
| 1622 * contains the BDTR Register configuration information for the TIM peripheral. | |
| 1623 * @retval HAL status | |
| 1624 */ | |
| 1625 HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, | |
| 1626 TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig) | |
| 1627 { | |
| 1628 /* Check the parameters */ | |
| 1629 assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance)); | |
| 1630 assert_param(IS_TIM_OSSR_STATE(sBreakDeadTimeConfig->OffStateRunMode)); | |
| 1631 assert_param(IS_TIM_OSSI_STATE(sBreakDeadTimeConfig->OffStateIDLEMode)); | |
| 1632 assert_param(IS_TIM_LOCK_LEVEL(sBreakDeadTimeConfig->LockLevel)); | |
| 1633 assert_param(IS_TIM_DEADTIME(sBreakDeadTimeConfig->DeadTime)); | |
| 1634 assert_param(IS_TIM_BREAK_STATE(sBreakDeadTimeConfig->BreakState)); | |
| 1635 assert_param(IS_TIM_BREAK_POLARITY(sBreakDeadTimeConfig->BreakPolarity)); | |
| 1636 assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(sBreakDeadTimeConfig->AutomaticOutput)); | |
| 1637 | |
| 1638 /* Process Locked */ | |
| 1639 __HAL_LOCK(htim); | |
| 1640 | |
| 1641 htim->State = HAL_TIM_STATE_BUSY; | |
| 1642 | |
| 1643 /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State, | |
| 1644 the OSSI State, the dead time value and the Automatic Output Enable Bit */ | |
| 1645 htim->Instance->BDTR = (uint32_t)sBreakDeadTimeConfig->OffStateRunMode | | |
| 1646 sBreakDeadTimeConfig->OffStateIDLEMode | | |
| 1647 sBreakDeadTimeConfig->LockLevel | | |
| 1648 sBreakDeadTimeConfig->DeadTime | | |
| 1649 sBreakDeadTimeConfig->BreakState | | |
| 1650 sBreakDeadTimeConfig->BreakPolarity | | |
| 1651 sBreakDeadTimeConfig->AutomaticOutput; | |
| 1652 | |
| 1653 | |
| 1654 htim->State = HAL_TIM_STATE_READY; | |
| 1655 | |
| 1656 __HAL_UNLOCK(htim); | |
| 1657 | |
| 1658 return HAL_OK; | |
| 1659 } | |
| 1660 | |
| 1661 #endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ | |
| 1662 /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ | |
| 1663 /* defined(STM32F105xC) || defined(STM32F107xC) */ | |
| 1664 | |
| 1665 /** | |
| 1666 * @brief Configures the TIM in master mode. | |
| 1667 * @param htim : TIM handle. | |
| 1668 * @param sMasterConfig : pointer to a TIM_MasterConfigTypeDef structure that | |
| 1669 * contains the selected trigger output (TRGO) and the Master/Slave | |
| 1670 * mode. | |
| 1671 * @retval HAL status | |
| 1672 */ | |
| 1673 HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef * sMasterConfig) | |
| 1674 { | |
| 1675 /* Check the parameters */ | |
| 1676 assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance)); | |
| 1677 assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger)); | |
| 1678 assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode)); | |
| 1679 | |
| 1680 __HAL_LOCK(htim); | |
| 1681 | |
| 1682 htim->State = HAL_TIM_STATE_BUSY; | |
| 1683 | |
| 1684 /* Reset the MMS Bits */ | |
| 1685 htim->Instance->CR2 &= ~TIM_CR2_MMS; | |
| 1686 /* Select the TRGO source */ | |
| 1687 htim->Instance->CR2 |= sMasterConfig->MasterOutputTrigger; | |
| 1688 | |
| 1689 /* Reset the MSM Bit */ | |
| 1690 htim->Instance->SMCR &= ~TIM_SMCR_MSM; | |
| 1691 /* Set or Reset the MSM Bit */ | |
| 1692 htim->Instance->SMCR |= sMasterConfig->MasterSlaveMode; | |
| 1693 | |
| 1694 htim->State = HAL_TIM_STATE_READY; | |
| 1695 | |
| 1696 __HAL_UNLOCK(htim); | |
| 1697 | |
| 1698 return HAL_OK; | |
| 1699 } | |
| 1700 | |
| 1701 /** | |
| 1702 * @} | |
| 1703 */ | |
| 1704 | |
| 1705 /** @defgroup TIMEx_Exported_Functions_Group6 Extension Callbacks functions | |
| 1706 * @brief Extension Callbacks functions | |
| 1707 * | |
| 1708 @verbatim | |
| 1709 ============================================================================== | |
| 1710 ##### Extension Callbacks functions ##### | |
| 1711 ============================================================================== | |
| 1712 [..] | |
| 1713 This section provides Extension TIM callback functions: | |
| 1714 (+) Timer Commutation callback | |
| 1715 (+) Timer Break callback | |
| 1716 | |
| 1717 @endverbatim | |
| 1718 * @{ | |
| 1719 */ | |
| 1720 | |
| 1721 /** | |
| 1722 * @brief Hall commutation changed callback in non blocking mode | |
| 1723 * @param htim : TIM handle | |
| 1724 * @retval None | |
| 1725 */ | |
| 1726 __weak void HAL_TIMEx_CommutationCallback(TIM_HandleTypeDef *htim) | |
| 1727 { | |
| 1728 /* Prevent unused argument(s) compilation warning */ | |
| 1729 UNUSED(htim); | |
| 1730 /* NOTE : This function Should not be modified, when the callback is needed, | |
| 1731 the HAL_TIMEx_CommutationCallback could be implemented in the user file | |
| 1732 */ | |
| 1733 } | |
| 1734 | |
| 1735 /** | |
| 1736 * @brief Hall Break detection callback in non blocking mode | |
| 1737 * @param htim : TIM handle | |
| 1738 * @retval None | |
| 1739 */ | |
| 1740 __weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim) | |
| 1741 { | |
| 1742 /* Prevent unused argument(s) compilation warning */ | |
| 1743 UNUSED(htim); | |
| 1744 /* NOTE : This function Should not be modified, when the callback is needed, | |
| 1745 the HAL_TIMEx_BreakCallback could be implemented in the user file | |
| 1746 */ | |
| 1747 } | |
| 1748 | |
| 1749 /** | |
| 1750 * @brief TIM DMA Commutation callback. | |
| 1751 * @param hdma : pointer to DMA handle. | |
| 1752 * @retval None | |
| 1753 */ | |
| 1754 void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma) | |
| 1755 { | |
| 1756 TIM_HandleTypeDef* htim = ( TIM_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; | |
| 1757 | |
| 1758 htim->State= HAL_TIM_STATE_READY; | |
| 1759 | |
| 1760 HAL_TIMEx_CommutationCallback(htim); | |
| 1761 } | |
| 1762 | |
| 1763 /** | |
| 1764 * @} | |
| 1765 */ | |
| 1766 | |
| 1767 #if defined (STM32F100xB) || defined (STM32F100xE) || \ | |
| 1768 defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ | |
| 1769 defined (STM32F105xC) || defined (STM32F107xC) | |
| 1770 | |
| 1771 /** @defgroup TIMEx_Exported_Functions_Group7 Extension Peripheral State functions | |
| 1772 * @brief Extension Peripheral State functions | |
| 1773 * | |
| 1774 @verbatim | |
| 1775 ============================================================================== | |
| 1776 ##### Extension Peripheral State functions ##### | |
| 1777 ============================================================================== | |
| 1778 [..] | |
| 1779 This subsection permit to get in run-time the status of the peripheral | |
| 1780 and the data flow. | |
| 1781 | |
| 1782 @endverbatim | |
| 1783 * @{ | |
| 1784 */ | |
| 1785 | |
| 1786 /** | |
| 1787 * @brief Return the TIM Hall Sensor interface state | |
| 1788 * @param htim : TIM Hall Sensor handle | |
| 1789 * @retval HAL state | |
| 1790 */ | |
| 1791 HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim) | |
| 1792 { | |
| 1793 return htim->State; | |
| 1794 } | |
| 1795 | |
| 1796 /** | |
| 1797 * @} | |
| 1798 */ | |
| 1799 #endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ | |
| 1800 /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ | |
| 1801 /* defined(STM32F105xC) || defined(STM32F107xC) */ | |
| 1802 | |
| 1803 /** | |
| 1804 * @} | |
| 1805 */ | |
| 1806 | |
| 1807 #if defined (STM32F100xB) || defined (STM32F100xE) || \ | |
| 1808 defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F103xE) || defined (STM32F103xG) || \ | |
| 1809 defined (STM32F105xC) || defined (STM32F107xC) | |
| 1810 | |
| 1811 /** @addtogroup TIMEx_Private_Functions | |
| 1812 * @{ | |
| 1813 */ | |
| 1814 | |
| 1815 /** | |
| 1816 * @brief Enables or disables the TIM Capture Compare Channel xN. | |
| 1817 * @param TIMx to select the TIM peripheral | |
| 1818 * @param Channel : specifies the TIM Channel | |
| 1819 * This parameter can be one of the following values: | |
| 1820 * @arg TIM_Channel_1: TIM Channel 1 | |
| 1821 * @arg TIM_Channel_2: TIM Channel 2 | |
| 1822 * @arg TIM_Channel_3: TIM Channel 3 | |
| 1823 * @param ChannelNState : specifies the TIM Channel CCxNE bit new state. | |
| 1824 * This parameter can be: TIM_CCxN_ENABLE or TIM_CCxN_Disable. | |
| 1825 * @retval None | |
| 1826 */ | |
| 1827 static void TIM_CCxNChannelCmd(TIM_TypeDef* TIMx, uint32_t Channel, uint32_t ChannelNState) | |
| 1828 { | |
| 1829 uint32_t tmp = 0; | |
| 1830 | |
| 1831 tmp = TIM_CCER_CC1NE << Channel; | |
| 1832 | |
| 1833 /* Reset the CCxNE Bit */ | |
| 1834 TIMx->CCER &= ~tmp; | |
| 1835 | |
| 1836 /* Set or reset the CCxNE Bit */ | |
| 1837 TIMx->CCER |= (uint32_t)(ChannelNState << Channel); | |
| 1838 } | |
| 1839 | |
| 1840 /** | |
| 1841 * @} | |
| 1842 */ | |
| 1843 | |
| 1844 #endif /* defined(STM32F100xB) || defined(STM32F100xE) || */ | |
| 1845 /* defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || */ | |
| 1846 /* defined(STM32F105xC) || defined(STM32F107xC) */ | |
| 1847 | |
| 1848 #endif /* HAL_TIM_MODULE_ENABLED */ | |
| 1849 /** | |
| 1850 * @} | |
| 1851 */ | |
| 1852 | |
| 1853 /** | |
| 1854 * @} | |
| 1855 */ | |
| 1856 | |
| 1857 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
