1 /** 2 ****************************************************************************** 3 * @file stm32g0xx_hal_lptim.h 4 * @author MCD Application Team 5 * @brief Header file of LPTIM HAL module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2018 STMicroelectronics. 10 * All rights reserved. 11 * 12 * This software is licensed under terms that can be found in the LICENSE file 13 * in the root directory of this software component. 14 * If no LICENSE file comes with this software, it is provided AS-IS. 15 * 16 ****************************************************************************** 17 */ 18 19 /* Define to prevent recursive inclusion -------------------------------------*/ 20 #ifndef STM32G0xx_HAL_LPTIM_H 21 #define STM32G0xx_HAL_LPTIM_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32g0xx_hal_def.h" 29 30 /** @addtogroup STM32G0xx_HAL_Driver 31 * @{ 32 */ 33 34 #if defined (LPTIM1) || defined (LPTIM2) 35 36 /** @addtogroup LPTIM 37 * @{ 38 */ 39 40 /* Exported types ------------------------------------------------------------*/ 41 /** @defgroup LPTIM_Exported_Types LPTIM Exported Types 42 * @{ 43 */ 44 #define LPTIM_EXTI_LINE_LPTIM1 EXTI_IMR1_IM29 /*!< External interrupt line 29 Connected to the LPTIM1 EXTI Line */ 45 #define LPTIM_EXTI_LINE_LPTIM2 EXTI_IMR1_IM30 /*!< External interrupt line 30 Connected to the LPTIM2 EXTI Line */ 46 47 /** 48 * @brief LPTIM Clock configuration definition 49 */ 50 typedef struct 51 { 52 uint32_t Source; /*!< Selects the clock source. 53 This parameter can be a value of @ref LPTIM_Clock_Source */ 54 55 uint32_t Prescaler; /*!< Specifies the counter clock Prescaler. 56 This parameter can be a value of @ref LPTIM_Clock_Prescaler */ 57 58 } LPTIM_ClockConfigTypeDef; 59 60 /** 61 * @brief LPTIM Clock configuration definition 62 */ 63 typedef struct 64 { 65 uint32_t Polarity; /*!< Selects the polarity of the active edge for the counter unit 66 if the ULPTIM input is selected. 67 Note: This parameter is used only when Ultra low power clock source is used. 68 Note: If the polarity is configured on 'both edges', an auxiliary clock 69 (one of the Low power oscillator) must be active. 70 This parameter can be a value of @ref LPTIM_Clock_Polarity */ 71 72 uint32_t SampleTime; /*!< Selects the clock sampling time to configure the clock glitch filter. 73 Note: This parameter is used only when Ultra low power clock source is used. 74 This parameter can be a value of @ref LPTIM_Clock_Sample_Time */ 75 76 } LPTIM_ULPClockConfigTypeDef; 77 78 /** 79 * @brief LPTIM Trigger configuration definition 80 */ 81 typedef struct 82 { 83 uint32_t Source; /*!< Selects the Trigger source. 84 This parameter can be a value of @ref LPTIM_Trigger_Source */ 85 86 uint32_t ActiveEdge; /*!< Selects the Trigger active edge. 87 Note: This parameter is used only when an external trigger is used. 88 This parameter can be a value of @ref LPTIM_External_Trigger_Polarity */ 89 90 uint32_t SampleTime; /*!< Selects the trigger sampling time to configure the clock glitch filter. 91 Note: This parameter is used only when an external trigger is used. 92 This parameter can be a value of @ref LPTIM_Trigger_Sample_Time */ 93 } LPTIM_TriggerConfigTypeDef; 94 95 /** 96 * @brief LPTIM Initialization Structure definition 97 */ 98 typedef struct 99 { 100 LPTIM_ClockConfigTypeDef Clock; /*!< Specifies the clock parameters */ 101 102 LPTIM_ULPClockConfigTypeDef UltraLowPowerClock;/*!< Specifies the Ultra Low Power clock parameters */ 103 104 LPTIM_TriggerConfigTypeDef Trigger; /*!< Specifies the Trigger parameters */ 105 106 uint32_t OutputPolarity; /*!< Specifies the Output polarity. 107 This parameter can be a value of @ref LPTIM_Output_Polarity */ 108 109 uint32_t UpdateMode; /*!< Specifies whether the update of the autoreload and the compare 110 values is done immediately or after the end of current period. 111 This parameter can be a value of @ref LPTIM_Updating_Mode */ 112 113 uint32_t CounterSource; /*!< Specifies whether the counter is incremented each internal event 114 or each external event. 115 This parameter can be a value of @ref LPTIM_Counter_Source */ 116 117 uint32_t Input1Source; /*!< Specifies source selected for input1 (GPIO or comparator output). 118 This parameter can be a value of @ref LPTIM_Input1_Source */ 119 120 uint32_t Input2Source; /*!< Specifies source selected for input2 (GPIO or comparator output). 121 Note: This parameter is used only for encoder feature so is used only 122 for LPTIM1 instance. 123 This parameter can be a value of @ref LPTIM_Input2_Source */ 124 } LPTIM_InitTypeDef; 125 126 /** 127 * @brief HAL LPTIM State structure definition 128 */ 129 typedef enum 130 { 131 HAL_LPTIM_STATE_RESET = 0x00U, /*!< Peripheral not yet initialized or disabled */ 132 HAL_LPTIM_STATE_READY = 0x01U, /*!< Peripheral Initialized and ready for use */ 133 HAL_LPTIM_STATE_BUSY = 0x02U, /*!< An internal process is ongoing */ 134 HAL_LPTIM_STATE_TIMEOUT = 0x03U, /*!< Timeout state */ 135 HAL_LPTIM_STATE_ERROR = 0x04U /*!< Internal Process is ongoing */ 136 } HAL_LPTIM_StateTypeDef; 137 138 /** 139 * @brief LPTIM handle Structure definition 140 */ 141 #if (USE_HAL_LPTIM_REGISTER_CALLBACKS == 1) 142 typedef struct __LPTIM_HandleTypeDef 143 #else 144 typedef struct 145 #endif /* USE_HAL_LPTIM_REGISTER_CALLBACKS */ 146 { 147 LPTIM_TypeDef *Instance; /*!< Register base address */ 148 149 LPTIM_InitTypeDef Init; /*!< LPTIM required parameters */ 150 151 HAL_StatusTypeDef Status; /*!< LPTIM peripheral status */ 152 153 HAL_LockTypeDef Lock; /*!< LPTIM locking object */ 154 155 __IO HAL_LPTIM_StateTypeDef State; /*!< LPTIM peripheral state */ 156 157 #if (USE_HAL_LPTIM_REGISTER_CALLBACKS == 1) 158 void (* MspInitCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< LPTIM Base Msp Init Callback */ 159 void (* MspDeInitCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< LPTIM Base Msp DeInit Callback */ 160 void (* CompareMatchCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< Compare match Callback */ 161 void (* AutoReloadMatchCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< Auto-reload match Callback */ 162 void (* TriggerCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< External trigger event detection Callback */ 163 void (* CompareWriteCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< Compare register write complete Callback */ 164 void (* AutoReloadWriteCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< Auto-reload register write complete Callback */ 165 void (* DirectionUpCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< Up-counting direction change Callback */ 166 void (* DirectionDownCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< Down-counting direction change Callback */ 167 #endif /* USE_HAL_LPTIM_REGISTER_CALLBACKS */ 168 } LPTIM_HandleTypeDef; 169 170 #if (USE_HAL_LPTIM_REGISTER_CALLBACKS == 1) 171 /** 172 * @brief HAL LPTIM Callback ID enumeration definition 173 */ 174 typedef enum 175 { 176 HAL_LPTIM_MSPINIT_CB_ID = 0x00U, /*!< LPTIM Base Msp Init Callback ID */ 177 HAL_LPTIM_MSPDEINIT_CB_ID = 0x01U, /*!< LPTIM Base Msp DeInit Callback ID */ 178 HAL_LPTIM_COMPARE_MATCH_CB_ID = 0x02U, /*!< Compare match Callback ID */ 179 HAL_LPTIM_AUTORELOAD_MATCH_CB_ID = 0x03U, /*!< Auto-reload match Callback ID */ 180 HAL_LPTIM_TRIGGER_CB_ID = 0x04U, /*!< External trigger event detection Callback ID */ 181 HAL_LPTIM_COMPARE_WRITE_CB_ID = 0x05U, /*!< Compare register write complete Callback ID */ 182 HAL_LPTIM_AUTORELOAD_WRITE_CB_ID = 0x06U, /*!< Auto-reload register write complete Callback ID */ 183 HAL_LPTIM_DIRECTION_UP_CB_ID = 0x07U, /*!< Up-counting direction change Callback ID */ 184 HAL_LPTIM_DIRECTION_DOWN_CB_ID = 0x08U, /*!< Down-counting direction change Callback ID */ 185 } HAL_LPTIM_CallbackIDTypeDef; 186 187 /** 188 * @brief HAL TIM Callback pointer definition 189 */ 190 typedef void (*pLPTIM_CallbackTypeDef)(LPTIM_HandleTypeDef *hlptim); /*!< pointer to the LPTIM callback function */ 191 192 #endif /* USE_HAL_LPTIM_REGISTER_CALLBACKS */ 193 /** 194 * @} 195 */ 196 197 /* Exported constants --------------------------------------------------------*/ 198 /** @defgroup LPTIM_Exported_Constants LPTIM Exported Constants 199 * @{ 200 */ 201 202 /** @defgroup LPTIM_Clock_Source LPTIM Clock Source 203 * @{ 204 */ 205 #define LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC 0x00000000U 206 #define LPTIM_CLOCKSOURCE_ULPTIM LPTIM_CFGR_CKSEL 207 /** 208 * @} 209 */ 210 211 /** @defgroup LPTIM_Clock_Prescaler LPTIM Clock Prescaler 212 * @{ 213 */ 214 #define LPTIM_PRESCALER_DIV1 0x00000000U 215 #define LPTIM_PRESCALER_DIV2 LPTIM_CFGR_PRESC_0 216 #define LPTIM_PRESCALER_DIV4 LPTIM_CFGR_PRESC_1 217 #define LPTIM_PRESCALER_DIV8 (LPTIM_CFGR_PRESC_0 | LPTIM_CFGR_PRESC_1) 218 #define LPTIM_PRESCALER_DIV16 LPTIM_CFGR_PRESC_2 219 #define LPTIM_PRESCALER_DIV32 (LPTIM_CFGR_PRESC_0 | LPTIM_CFGR_PRESC_2) 220 #define LPTIM_PRESCALER_DIV64 (LPTIM_CFGR_PRESC_1 | LPTIM_CFGR_PRESC_2) 221 #define LPTIM_PRESCALER_DIV128 LPTIM_CFGR_PRESC 222 /** 223 * @} 224 */ 225 226 /** @defgroup LPTIM_Output_Polarity LPTIM Output Polarity 227 * @{ 228 */ 229 230 #define LPTIM_OUTPUTPOLARITY_HIGH 0x00000000U 231 #define LPTIM_OUTPUTPOLARITY_LOW LPTIM_CFGR_WAVPOL 232 /** 233 * @} 234 */ 235 236 /** @defgroup LPTIM_Clock_Sample_Time LPTIM Clock Sample Time 237 * @{ 238 */ 239 #define LPTIM_CLOCKSAMPLETIME_DIRECTTRANSITION 0x00000000U 240 #define LPTIM_CLOCKSAMPLETIME_2TRANSITIONS LPTIM_CFGR_CKFLT_0 241 #define LPTIM_CLOCKSAMPLETIME_4TRANSITIONS LPTIM_CFGR_CKFLT_1 242 #define LPTIM_CLOCKSAMPLETIME_8TRANSITIONS LPTIM_CFGR_CKFLT 243 /** 244 * @} 245 */ 246 247 /** @defgroup LPTIM_Clock_Polarity LPTIM Clock Polarity 248 * @{ 249 */ 250 #define LPTIM_CLOCKPOLARITY_RISING 0x00000000U 251 #define LPTIM_CLOCKPOLARITY_FALLING LPTIM_CFGR_CKPOL_0 252 #define LPTIM_CLOCKPOLARITY_RISING_FALLING LPTIM_CFGR_CKPOL_1 253 /** 254 * @} 255 */ 256 257 /** @defgroup LPTIM_Trigger_Source LPTIM Trigger Source 258 * @{ 259 */ 260 #define LPTIM_TRIGSOURCE_SOFTWARE 0x0000FFFFU 261 #define LPTIM_TRIGSOURCE_0 0x00000000U 262 #define LPTIM_TRIGSOURCE_1 LPTIM_CFGR_TRIGSEL_0 263 #define LPTIM_TRIGSOURCE_2 LPTIM_CFGR_TRIGSEL_1 264 #define LPTIM_TRIGSOURCE_3 (LPTIM_CFGR_TRIGSEL_0 | LPTIM_CFGR_TRIGSEL_1) 265 #define LPTIM_TRIGSOURCE_4 LPTIM_CFGR_TRIGSEL_2 266 #define LPTIM_TRIGSOURCE_5 (LPTIM_CFGR_TRIGSEL_0 | LPTIM_CFGR_TRIGSEL_2) 267 #define LPTIM_TRIGSOURCE_6 (LPTIM_CFGR_TRIGSEL_1 | LPTIM_CFGR_TRIGSEL_2) 268 #define LPTIM_TRIGSOURCE_7 LPTIM_CFGR_TRIGSEL 269 /** 270 * @} 271 */ 272 273 /** @defgroup LPTIM_External_Trigger_Polarity LPTIM External Trigger Polarity 274 * @{ 275 */ 276 #define LPTIM_ACTIVEEDGE_RISING LPTIM_CFGR_TRIGEN_0 277 #define LPTIM_ACTIVEEDGE_FALLING LPTIM_CFGR_TRIGEN_1 278 #define LPTIM_ACTIVEEDGE_RISING_FALLING LPTIM_CFGR_TRIGEN 279 /** 280 * @} 281 */ 282 283 /** @defgroup LPTIM_Trigger_Sample_Time LPTIM Trigger Sample Time 284 * @{ 285 */ 286 #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION 0x00000000U 287 #define LPTIM_TRIGSAMPLETIME_2TRANSITIONS LPTIM_CFGR_TRGFLT_0 288 #define LPTIM_TRIGSAMPLETIME_4TRANSITIONS LPTIM_CFGR_TRGFLT_1 289 #define LPTIM_TRIGSAMPLETIME_8TRANSITIONS LPTIM_CFGR_TRGFLT 290 /** 291 * @} 292 */ 293 294 /** @defgroup LPTIM_Updating_Mode LPTIM Updating Mode 295 * @{ 296 */ 297 298 #define LPTIM_UPDATE_IMMEDIATE 0x00000000U 299 #define LPTIM_UPDATE_ENDOFPERIOD LPTIM_CFGR_PRELOAD 300 /** 301 * @} 302 */ 303 304 /** @defgroup LPTIM_Counter_Source LPTIM Counter Source 305 * @{ 306 */ 307 308 #define LPTIM_COUNTERSOURCE_INTERNAL 0x00000000U 309 #define LPTIM_COUNTERSOURCE_EXTERNAL LPTIM_CFGR_COUNTMODE 310 /** 311 * @} 312 */ 313 314 /** @defgroup LPTIM_Input1_Source LPTIM Input1 Source 315 * @{ 316 */ 317 318 #define LPTIM_INPUT1SOURCE_GPIO 0x00000000U /*!< For LPTIM1 and LPTIM2 */ 319 #define LPTIM_INPUT1SOURCE_COMP1 LPTIM_CFGR2_IN1SEL_0 /*!< For LPTIM1 and LPTIM2 */ 320 #define LPTIM_INPUT1SOURCE_COMP2 LPTIM_CFGR2_IN1SEL_1 /*!< For LPTIM2 */ 321 #define LPTIM_INPUT1SOURCE_COMP1_COMP2 (LPTIM_CFGR2_IN1SEL_1 | LPTIM_CFGR2_IN1SEL_0) /*!< For LPTIM2 */ 322 /** 323 * @} 324 */ 325 326 /** @defgroup LPTIM_Input2_Source LPTIM Input2 Source 327 * @{ 328 */ 329 330 #define LPTIM_INPUT2SOURCE_GPIO 0x00000000U /*!< For LPTIM1 */ 331 #define LPTIM_INPUT2SOURCE_COMP2 LPTIM_CFGR2_IN2SEL_0 /*!< For LPTIM1 */ 332 /** 333 * @} 334 */ 335 336 /** @defgroup LPTIM_Flag_Definition LPTIM Flags Definition 337 * @{ 338 */ 339 340 #define LPTIM_FLAG_DOWN LPTIM_ISR_DOWN 341 #define LPTIM_FLAG_UP LPTIM_ISR_UP 342 #define LPTIM_FLAG_ARROK LPTIM_ISR_ARROK 343 #define LPTIM_FLAG_CMPOK LPTIM_ISR_CMPOK 344 #define LPTIM_FLAG_EXTTRIG LPTIM_ISR_EXTTRIG 345 #define LPTIM_FLAG_ARRM LPTIM_ISR_ARRM 346 #define LPTIM_FLAG_CMPM LPTIM_ISR_CMPM 347 /** 348 * @} 349 */ 350 351 /** @defgroup LPTIM_Interrupts_Definition LPTIM Interrupts Definition 352 * @{ 353 */ 354 #define LPTIM_IT_DOWN LPTIM_IER_DOWNIE 355 #define LPTIM_IT_UP LPTIM_IER_UPIE 356 #define LPTIM_IT_ARROK LPTIM_IER_ARROKIE 357 #define LPTIM_IT_CMPOK LPTIM_IER_CMPOKIE 358 #define LPTIM_IT_EXTTRIG LPTIM_IER_EXTTRIGIE 359 #define LPTIM_IT_ARRM LPTIM_IER_ARRMIE 360 #define LPTIM_IT_CMPM LPTIM_IER_CMPMIE 361 /** 362 * @} 363 */ 364 365 /** 366 * @} 367 */ 368 369 /* Exported macros -----------------------------------------------------------*/ 370 /** @defgroup LPTIM_Exported_Macros LPTIM Exported Macros 371 * @{ 372 */ 373 374 /** @brief Reset LPTIM handle state. 375 * @param __HANDLE__ LPTIM handle 376 * @retval None 377 */ 378 #if (USE_HAL_LPTIM_REGISTER_CALLBACKS == 1) 379 #define __HAL_LPTIM_RESET_HANDLE_STATE(__HANDLE__) do { \ 380 (__HANDLE__)->State = HAL_LPTIM_STATE_RESET; \ 381 (__HANDLE__)->MspInitCallback = NULL; \ 382 (__HANDLE__)->MspDeInitCallback = NULL; \ 383 } while(0) 384 #else 385 #define __HAL_LPTIM_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_LPTIM_STATE_RESET) 386 #endif /* USE_HAL_LPTIM_REGISTER_CALLBACKS */ 387 388 /** 389 * @brief Enable the LPTIM peripheral. 390 * @param __HANDLE__ LPTIM handle 391 * @retval None 392 */ 393 #define __HAL_LPTIM_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= (LPTIM_CR_ENABLE)) 394 395 /** 396 * @brief Disable the LPTIM peripheral. 397 * @param __HANDLE__ LPTIM handle 398 * @note The following sequence is required to solve LPTIM disable HW limitation. 399 * Please check Errata Sheet ES0335 for more details under "MCU may remain 400 * stuck in LPTIM interrupt when entering Stop mode" section. 401 * @note Please call @ref HAL_LPTIM_GetState() after a call to __HAL_LPTIM_DISABLE to 402 * check for TIMEOUT. 403 * @retval None 404 */ 405 #define __HAL_LPTIM_DISABLE(__HANDLE__) LPTIM_Disable(__HANDLE__) 406 407 /** 408 * @brief Start the LPTIM peripheral in Continuous mode. 409 * @param __HANDLE__ LPTIM handle 410 * @retval None 411 */ 412 #define __HAL_LPTIM_START_CONTINUOUS(__HANDLE__) ((__HANDLE__)->Instance->CR |= LPTIM_CR_CNTSTRT) 413 /** 414 * @brief Start the LPTIM peripheral in single mode. 415 * @param __HANDLE__ LPTIM handle 416 * @retval None 417 */ 418 #define __HAL_LPTIM_START_SINGLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= LPTIM_CR_SNGSTRT) 419 420 /** 421 * @brief Reset the LPTIM Counter register in synchronous mode. 422 * @param __HANDLE__ LPTIM handle 423 * @retval None 424 */ 425 #define __HAL_LPTIM_RESET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CR |= LPTIM_CR_COUNTRST) 426 427 /** 428 * @brief Reset after read of the LPTIM Counter register in asynchronous mode. 429 * @param __HANDLE__ LPTIM handle 430 * @retval None 431 */ 432 #define __HAL_LPTIM_RESET_COUNTER_AFTERREAD(__HANDLE__) ((__HANDLE__)->Instance->CR |= LPTIM_CR_RSTARE) 433 434 /** 435 * @brief Write the passed parameter in the Autoreload register. 436 * @param __HANDLE__ LPTIM handle 437 * @param __VALUE__ Autoreload value 438 * This parameter must be a value between Min_Data = 0x0001 and Max_Data = 0xFFFF. 439 * @retval None 440 * @note The ARR register can only be modified when the LPTIM instance is enabled. 441 */ 442 #define __HAL_LPTIM_AUTORELOAD_SET(__HANDLE__ , __VALUE__) ((__HANDLE__)->Instance->ARR = (__VALUE__)) 443 444 /** 445 * @brief Write the passed parameter in the Compare register. 446 * @param __HANDLE__ LPTIM handle 447 * @param __VALUE__ Compare value 448 * @retval None 449 * @note The CMP register can only be modified when the LPTIM instance is enabled. 450 */ 451 #define __HAL_LPTIM_COMPARE_SET(__HANDLE__ , __VALUE__) ((__HANDLE__)->Instance->CMP = (__VALUE__)) 452 453 /** 454 * @brief Check whether the specified LPTIM flag is set or not. 455 * @param __HANDLE__ LPTIM handle 456 * @param __FLAG__ LPTIM flag to check 457 * This parameter can be a value of: 458 * @arg LPTIM_FLAG_DOWN : Counter direction change up Flag. 459 * @arg LPTIM_FLAG_UP : Counter direction change down to up Flag. 460 * @arg LPTIM_FLAG_ARROK : Autoreload register update OK Flag. 461 * @arg LPTIM_FLAG_CMPOK : Compare register update OK Flag. 462 * @arg LPTIM_FLAG_EXTTRIG : External trigger edge event Flag. 463 * @arg LPTIM_FLAG_ARRM : Autoreload match Flag. 464 * @arg LPTIM_FLAG_CMPM : Compare match Flag. 465 * @retval The state of the specified flag (SET or RESET). 466 */ 467 #define __HAL_LPTIM_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->ISR &(__FLAG__)) == (__FLAG__)) 468 469 /** 470 * @brief Clear the specified LPTIM flag. 471 * @param __HANDLE__ LPTIM handle. 472 * @param __FLAG__ LPTIM flag to clear. 473 * This parameter can be a value of: 474 * @arg LPTIM_FLAG_DOWN : Counter direction change up Flag. 475 * @arg LPTIM_FLAG_UP : Counter direction change down to up Flag. 476 * @arg LPTIM_FLAG_ARROK : Autoreload register update OK Flag. 477 * @arg LPTIM_FLAG_CMPOK : Compare register update OK Flag. 478 * @arg LPTIM_FLAG_EXTTRIG : External trigger edge event Flag. 479 * @arg LPTIM_FLAG_ARRM : Autoreload match Flag. 480 * @arg LPTIM_FLAG_CMPM : Compare match Flag. 481 * @retval None. 482 */ 483 #define __HAL_LPTIM_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__)) 484 485 /** 486 * @brief Enable the specified LPTIM interrupt. 487 * @param __HANDLE__ LPTIM handle. 488 * @param __INTERRUPT__ LPTIM interrupt to set. 489 * This parameter can be a value of: 490 * @arg LPTIM_IT_DOWN : Counter direction change up Interrupt. 491 * @arg LPTIM_IT_UP : Counter direction change down to up Interrupt. 492 * @arg LPTIM_IT_ARROK : Autoreload register update OK Interrupt. 493 * @arg LPTIM_IT_CMPOK : Compare register update OK Interrupt. 494 * @arg LPTIM_IT_EXTTRIG : External trigger edge event Interrupt. 495 * @arg LPTIM_IT_ARRM : Autoreload match Interrupt. 496 * @arg LPTIM_IT_CMPM : Compare match Interrupt. 497 * @retval None. 498 * @note The LPTIM interrupts can only be enabled when the LPTIM instance is disabled. 499 */ 500 #define __HAL_LPTIM_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER |= (__INTERRUPT__)) 501 502 /** 503 * @brief Disable the specified LPTIM interrupt. 504 * @param __HANDLE__ LPTIM handle. 505 * @param __INTERRUPT__ LPTIM interrupt to set. 506 * This parameter can be a value of: 507 * @arg LPTIM_IT_DOWN : Counter direction change up Interrupt. 508 * @arg LPTIM_IT_UP : Counter direction change down to up Interrupt. 509 * @arg LPTIM_IT_ARROK : Autoreload register update OK Interrupt. 510 * @arg LPTIM_IT_CMPOK : Compare register update OK Interrupt. 511 * @arg LPTIM_IT_EXTTRIG : External trigger edge event Interrupt. 512 * @arg LPTIM_IT_ARRM : Autoreload match Interrupt. 513 * @arg LPTIM_IT_CMPM : Compare match Interrupt. 514 * @retval None. 515 * @note The LPTIM interrupts can only be disabled when the LPTIM instance is disabled. 516 */ 517 #define __HAL_LPTIM_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER &= (~(__INTERRUPT__))) 518 519 /** 520 * @brief Check whether the specified LPTIM interrupt source is enabled or not. 521 * @param __HANDLE__ LPTIM handle. 522 * @param __INTERRUPT__ LPTIM interrupt to check. 523 * This parameter can be a value of: 524 * @arg LPTIM_IT_DOWN : Counter direction change up Interrupt. 525 * @arg LPTIM_IT_UP : Counter direction change down to up Interrupt. 526 * @arg LPTIM_IT_ARROK : Autoreload register update OK Interrupt. 527 * @arg LPTIM_IT_CMPOK : Compare register update OK Interrupt. 528 * @arg LPTIM_IT_EXTTRIG : External trigger edge event Interrupt. 529 * @arg LPTIM_IT_ARRM : Autoreload match Interrupt. 530 * @arg LPTIM_IT_CMPM : Compare match Interrupt. 531 * @retval Interrupt status. 532 */ 533 534 #define __HAL_LPTIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER\ 535 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) 536 537 /** 538 * @brief Enable the LPTIM1 EXTI line in interrupt mode. 539 * @retval None 540 */ 541 #define __HAL_LPTIM_LPTIM1_EXTI_ENABLE_IT() (EXTI->IMR1 |= LPTIM_EXTI_LINE_LPTIM1) 542 543 /** 544 * @brief Disable the LPTIM1 EXTI line in interrupt mode. 545 * @retval None 546 */ 547 #define __HAL_LPTIM_LPTIM1_EXTI_DISABLE_IT() (EXTI->IMR1\ 548 &= ~(LPTIM_EXTI_LINE_LPTIM1)) 549 550 /** 551 * @brief Enable the LPTIM1 EXTI line in event mode. 552 * @retval None 553 */ 554 #define __HAL_LPTIM_LPTIM1_EXTI_ENABLE_EVENT() (EXTI->EMR1 |= LPTIM_EXTI_LINE_LPTIM1) 555 556 /** 557 * @brief Disable the LPTIM1 EXTI line in event mode. 558 * @retval None 559 */ 560 #define __HAL_LPTIM_LPTIM1_EXTI_DISABLE_EVENT() (EXTI->EMR1\ 561 &= ~(LPTIM_EXTI_LINE_LPTIM1)) 562 563 /** 564 * @brief Enable the LPTIM2 EXTI line in interrupt mode. 565 * @retval None 566 */ 567 #define __HAL_LPTIM_LPTIM2_EXTI_ENABLE_IT() (EXTI->IMR1 |= LPTIM_EXTI_LINE_LPTIM2) 568 569 /** 570 * @brief Disable the LPTIM2 EXTI line in interrupt mode. 571 * @retval None 572 */ 573 #define __HAL_LPTIM_LPTIM2_EXTI_DISABLE_IT() (EXTI->IMR1\ 574 &= ~(LPTIM_EXTI_LINE_LPTIM2)) 575 576 /** 577 * @brief Enable the LPTIM2 EXTI line in event mode. 578 * @retval None 579 */ 580 #define __HAL_LPTIM_LPTIM2_EXTI_ENABLE_EVENT() (EXTI->EMR1 |= LPTIM_EXTI_LINE_LPTIM2) 581 582 /** 583 * @brief Disable the LPTIM2 EXTI line in event mode. 584 * @retval None 585 */ 586 #define __HAL_LPTIM_LPTIM2_EXTI_DISABLE_EVENT() (EXTI->EMR1\ 587 &= ~(LPTIM_EXTI_LINE_LPTIM2)) 588 589 /** 590 * @} 591 */ 592 593 /* Exported functions --------------------------------------------------------*/ 594 /** @defgroup LPTIM_Exported_Functions LPTIM Exported Functions 595 * @{ 596 */ 597 598 /** @addtogroup LPTIM_Exported_Functions_Group1 599 * @brief Initialization and Configuration functions. 600 * @{ 601 */ 602 /* Initialization/de-initialization functions ********************************/ 603 HAL_StatusTypeDef HAL_LPTIM_Init(LPTIM_HandleTypeDef *hlptim); 604 HAL_StatusTypeDef HAL_LPTIM_DeInit(LPTIM_HandleTypeDef *hlptim); 605 606 /* MSP functions *************************************************************/ 607 void HAL_LPTIM_MspInit(LPTIM_HandleTypeDef *hlptim); 608 void HAL_LPTIM_MspDeInit(LPTIM_HandleTypeDef *hlptim); 609 /** 610 * @} 611 */ 612 613 /** @addtogroup LPTIM_Exported_Functions_Group2 614 * @brief Start-Stop operation functions. 615 * @{ 616 */ 617 /* Start/Stop operation functions *********************************************/ 618 /* ################################# PWM Mode ################################*/ 619 /* Blocking mode: Polling */ 620 HAL_StatusTypeDef HAL_LPTIM_PWM_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse); 621 HAL_StatusTypeDef HAL_LPTIM_PWM_Stop(LPTIM_HandleTypeDef *hlptim); 622 /* Non-Blocking mode: Interrupt */ 623 HAL_StatusTypeDef HAL_LPTIM_PWM_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse); 624 HAL_StatusTypeDef HAL_LPTIM_PWM_Stop_IT(LPTIM_HandleTypeDef *hlptim); 625 626 /* ############################# One Pulse Mode ##############################*/ 627 /* Blocking mode: Polling */ 628 HAL_StatusTypeDef HAL_LPTIM_OnePulse_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse); 629 HAL_StatusTypeDef HAL_LPTIM_OnePulse_Stop(LPTIM_HandleTypeDef *hlptim); 630 /* Non-Blocking mode: Interrupt */ 631 HAL_StatusTypeDef HAL_LPTIM_OnePulse_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse); 632 HAL_StatusTypeDef HAL_LPTIM_OnePulse_Stop_IT(LPTIM_HandleTypeDef *hlptim); 633 634 /* ############################## Set once Mode ##############################*/ 635 /* Blocking mode: Polling */ 636 HAL_StatusTypeDef HAL_LPTIM_SetOnce_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse); 637 HAL_StatusTypeDef HAL_LPTIM_SetOnce_Stop(LPTIM_HandleTypeDef *hlptim); 638 /* Non-Blocking mode: Interrupt */ 639 HAL_StatusTypeDef HAL_LPTIM_SetOnce_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse); 640 HAL_StatusTypeDef HAL_LPTIM_SetOnce_Stop_IT(LPTIM_HandleTypeDef *hlptim); 641 642 /* ############################### Encoder Mode ##############################*/ 643 /* Blocking mode: Polling */ 644 HAL_StatusTypeDef HAL_LPTIM_Encoder_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period); 645 HAL_StatusTypeDef HAL_LPTIM_Encoder_Stop(LPTIM_HandleTypeDef *hlptim); 646 /* Non-Blocking mode: Interrupt */ 647 HAL_StatusTypeDef HAL_LPTIM_Encoder_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period); 648 HAL_StatusTypeDef HAL_LPTIM_Encoder_Stop_IT(LPTIM_HandleTypeDef *hlptim); 649 650 /* ############################# Time out Mode ##############################*/ 651 /* Blocking mode: Polling */ 652 HAL_StatusTypeDef HAL_LPTIM_TimeOut_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Timeout); 653 HAL_StatusTypeDef HAL_LPTIM_TimeOut_Stop(LPTIM_HandleTypeDef *hlptim); 654 /* Non-Blocking mode: Interrupt */ 655 HAL_StatusTypeDef HAL_LPTIM_TimeOut_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Timeout); 656 HAL_StatusTypeDef HAL_LPTIM_TimeOut_Stop_IT(LPTIM_HandleTypeDef *hlptim); 657 658 /* ############################## Counter Mode ###############################*/ 659 /* Blocking mode: Polling */ 660 HAL_StatusTypeDef HAL_LPTIM_Counter_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period); 661 HAL_StatusTypeDef HAL_LPTIM_Counter_Stop(LPTIM_HandleTypeDef *hlptim); 662 /* Non-Blocking mode: Interrupt */ 663 HAL_StatusTypeDef HAL_LPTIM_Counter_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period); 664 HAL_StatusTypeDef HAL_LPTIM_Counter_Stop_IT(LPTIM_HandleTypeDef *hlptim); 665 /** 666 * @} 667 */ 668 669 /** @addtogroup LPTIM_Exported_Functions_Group3 670 * @brief Read operation functions. 671 * @{ 672 */ 673 /* Reading operation functions ************************************************/ 674 uint32_t HAL_LPTIM_ReadCounter(const LPTIM_HandleTypeDef *hlptim); 675 uint32_t HAL_LPTIM_ReadAutoReload(const LPTIM_HandleTypeDef *hlptim); 676 uint32_t HAL_LPTIM_ReadCompare(const LPTIM_HandleTypeDef *hlptim); 677 /** 678 * @} 679 */ 680 681 /** @addtogroup LPTIM_Exported_Functions_Group4 682 * @brief LPTIM IRQ handler and callback functions. 683 * @{ 684 */ 685 /* LPTIM IRQ functions *******************************************************/ 686 void HAL_LPTIM_IRQHandler(LPTIM_HandleTypeDef *hlptim); 687 688 /* CallBack functions ********************************************************/ 689 void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim); 690 void HAL_LPTIM_AutoReloadMatchCallback(LPTIM_HandleTypeDef *hlptim); 691 void HAL_LPTIM_TriggerCallback(LPTIM_HandleTypeDef *hlptim); 692 void HAL_LPTIM_CompareWriteCallback(LPTIM_HandleTypeDef *hlptim); 693 void HAL_LPTIM_AutoReloadWriteCallback(LPTIM_HandleTypeDef *hlptim); 694 void HAL_LPTIM_DirectionUpCallback(LPTIM_HandleTypeDef *hlptim); 695 void HAL_LPTIM_DirectionDownCallback(LPTIM_HandleTypeDef *hlptim); 696 697 /* Callbacks Register/UnRegister functions ***********************************/ 698 #if (USE_HAL_LPTIM_REGISTER_CALLBACKS == 1) 699 HAL_StatusTypeDef HAL_LPTIM_RegisterCallback(LPTIM_HandleTypeDef *lphtim, HAL_LPTIM_CallbackIDTypeDef CallbackID, 700 pLPTIM_CallbackTypeDef pCallback); 701 HAL_StatusTypeDef HAL_LPTIM_UnRegisterCallback(LPTIM_HandleTypeDef *lphtim, HAL_LPTIM_CallbackIDTypeDef CallbackID); 702 #endif /* USE_HAL_LPTIM_REGISTER_CALLBACKS */ 703 /** 704 * @} 705 */ 706 707 /** @addtogroup LPTIM_Group5 708 * @brief Peripheral State functions. 709 * @{ 710 */ 711 /* Peripheral State functions ************************************************/ 712 HAL_LPTIM_StateTypeDef HAL_LPTIM_GetState(const LPTIM_HandleTypeDef *hlptim); 713 /** 714 * @} 715 */ 716 717 /** 718 * @} 719 */ 720 721 /* Private types -------------------------------------------------------------*/ 722 /** @defgroup LPTIM_Private_Types LPTIM Private Types 723 * @{ 724 */ 725 726 /** 727 * @} 728 */ 729 730 /* Private variables ---------------------------------------------------------*/ 731 /** @defgroup LPTIM_Private_Variables LPTIM Private Variables 732 * @{ 733 */ 734 735 /** 736 * @} 737 */ 738 739 /* Private constants ---------------------------------------------------------*/ 740 /** @defgroup LPTIM_Private_Constants LPTIM Private Constants 741 * @{ 742 */ 743 744 /** 745 * @} 746 */ 747 748 /* Private macros ------------------------------------------------------------*/ 749 /** @defgroup LPTIM_Private_Macros LPTIM Private Macros 750 * @{ 751 */ 752 753 #define IS_LPTIM_CLOCK_SOURCE(__SOURCE__) (((__SOURCE__) == LPTIM_CLOCKSOURCE_ULPTIM) || \ 754 ((__SOURCE__) == LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC)) 755 756 757 #define IS_LPTIM_CLOCK_PRESCALER(__PRESCALER__) (((__PRESCALER__) == LPTIM_PRESCALER_DIV1 ) || \ 758 ((__PRESCALER__) == LPTIM_PRESCALER_DIV2 ) || \ 759 ((__PRESCALER__) == LPTIM_PRESCALER_DIV4 ) || \ 760 ((__PRESCALER__) == LPTIM_PRESCALER_DIV8 ) || \ 761 ((__PRESCALER__) == LPTIM_PRESCALER_DIV16 ) || \ 762 ((__PRESCALER__) == LPTIM_PRESCALER_DIV32 ) || \ 763 ((__PRESCALER__) == LPTIM_PRESCALER_DIV64 ) || \ 764 ((__PRESCALER__) == LPTIM_PRESCALER_DIV128)) 765 766 #define IS_LPTIM_CLOCK_PRESCALERDIV1(__PRESCALER__) ((__PRESCALER__) == LPTIM_PRESCALER_DIV1) 767 768 #define IS_LPTIM_OUTPUT_POLARITY(__POLARITY__) (((__POLARITY__) == LPTIM_OUTPUTPOLARITY_LOW ) || \ 769 ((__POLARITY__) == LPTIM_OUTPUTPOLARITY_HIGH)) 770 771 #define IS_LPTIM_CLOCK_SAMPLE_TIME(__SAMPLETIME__) (((__SAMPLETIME__) == LPTIM_CLOCKSAMPLETIME_DIRECTTRANSITION) || \ 772 ((__SAMPLETIME__) == LPTIM_CLOCKSAMPLETIME_2TRANSITIONS) || \ 773 ((__SAMPLETIME__) == LPTIM_CLOCKSAMPLETIME_4TRANSITIONS) || \ 774 ((__SAMPLETIME__) == LPTIM_CLOCKSAMPLETIME_8TRANSITIONS)) 775 776 #define IS_LPTIM_CLOCK_POLARITY(__POLARITY__) (((__POLARITY__) == LPTIM_CLOCKPOLARITY_RISING) || \ 777 ((__POLARITY__) == LPTIM_CLOCKPOLARITY_FALLING) || \ 778 ((__POLARITY__) == LPTIM_CLOCKPOLARITY_RISING_FALLING)) 779 780 #define IS_LPTIM_TRG_SOURCE(__TRIG__) (((__TRIG__) == LPTIM_TRIGSOURCE_SOFTWARE) || \ 781 ((__TRIG__) == LPTIM_TRIGSOURCE_0) || \ 782 ((__TRIG__) == LPTIM_TRIGSOURCE_1) || \ 783 ((__TRIG__) == LPTIM_TRIGSOURCE_2) || \ 784 ((__TRIG__) == LPTIM_TRIGSOURCE_3) || \ 785 ((__TRIG__) == LPTIM_TRIGSOURCE_4) || \ 786 ((__TRIG__) == LPTIM_TRIGSOURCE_5) || \ 787 ((__TRIG__) == LPTIM_TRIGSOURCE_6) || \ 788 ((__TRIG__) == LPTIM_TRIGSOURCE_7)) 789 790 #define IS_LPTIM_EXT_TRG_POLARITY(__POLARITY__) (((__POLARITY__) == LPTIM_ACTIVEEDGE_RISING ) || \ 791 ((__POLARITY__) == LPTIM_ACTIVEEDGE_FALLING ) || \ 792 ((__POLARITY__) == LPTIM_ACTIVEEDGE_RISING_FALLING )) 793 794 #define IS_LPTIM_TRIG_SAMPLE_TIME(__SAMPLETIME__) (((__SAMPLETIME__) == LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION) || \ 795 ((__SAMPLETIME__) == LPTIM_TRIGSAMPLETIME_2TRANSITIONS ) || \ 796 ((__SAMPLETIME__) == LPTIM_TRIGSAMPLETIME_4TRANSITIONS ) || \ 797 ((__SAMPLETIME__) == LPTIM_TRIGSAMPLETIME_8TRANSITIONS )) 798 799 #define IS_LPTIM_UPDATE_MODE(__MODE__) (((__MODE__) == LPTIM_UPDATE_IMMEDIATE) || \ 800 ((__MODE__) == LPTIM_UPDATE_ENDOFPERIOD)) 801 802 #define IS_LPTIM_COUNTER_SOURCE(__SOURCE__) (((__SOURCE__) == LPTIM_COUNTERSOURCE_INTERNAL) || \ 803 ((__SOURCE__) == LPTIM_COUNTERSOURCE_EXTERNAL)) 804 805 #define IS_LPTIM_COMPARE(__COMPARE__) ((__COMPARE__) <= 0x0000FFFFUL) 806 807 #define IS_LPTIM_PERIOD(__PERIOD__) ((0x00000001UL <= (__PERIOD__)) &&\ 808 ((__PERIOD__) <= 0x0000FFFFUL)) 809 810 #define IS_LPTIM_PULSE(__PULSE__) ((__PULSE__) <= 0x0000FFFFUL) 811 812 #define IS_LPTIM_INPUT1_SOURCE(__INSTANCE__, __SOURCE__) \ 813 ((((__INSTANCE__) == LPTIM1) && \ 814 (((__SOURCE__) == LPTIM_INPUT1SOURCE_GPIO) || \ 815 ((__SOURCE__) == LPTIM_INPUT1SOURCE_COMP1))) \ 816 || \ 817 (((__INSTANCE__) == LPTIM2) && \ 818 (((__SOURCE__) == LPTIM_INPUT1SOURCE_GPIO) || \ 819 ((__SOURCE__) == LPTIM_INPUT1SOURCE_COMP1) || \ 820 ((__SOURCE__) == LPTIM_INPUT1SOURCE_COMP2) || \ 821 ((__SOURCE__) == LPTIM_INPUT1SOURCE_COMP1_COMP2)))) 822 823 #define IS_LPTIM_INPUT2_SOURCE(__INSTANCE__, __SOURCE__) \ 824 (((__INSTANCE__) == LPTIM1) && \ 825 (((__SOURCE__) == LPTIM_INPUT2SOURCE_GPIO) || \ 826 ((__SOURCE__) == LPTIM_INPUT2SOURCE_COMP2))) 827 828 /** 829 * @} 830 */ 831 832 /* Private functions ---------------------------------------------------------*/ 833 /** @defgroup LPTIM_Private_Functions LPTIM Private Functions 834 * @{ 835 */ 836 void LPTIM_Disable(LPTIM_HandleTypeDef *hlptim); 837 /** 838 * @} 839 */ 840 841 /** 842 * @} 843 */ 844 845 #endif /* LPTIM1 || LPTIM2 */ 846 /** 847 * @} 848 */ 849 850 #ifdef __cplusplus 851 } 852 #endif 853 854 #endif /* STM32G0xx_HAL_LPTIM_H */ 855