1 /** 2 ****************************************************************************** 3 * @file stm32u5xx_hal_lptim.h 4 * @author MCD Application Team 5 * @brief Header file of LPTIM HAL module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2021 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 STM32U5xx_HAL_LPTIM_H 21 #define STM32U5xx_HAL_LPTIM_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32u5xx_hal_def.h" 29 30 /* Include low level driver */ 31 #include "stm32u5xx_ll_lptim.h" 32 33 /** @addtogroup STM32U5xx_HAL_Driver 34 * @{ 35 */ 36 37 #if defined (LPTIM1) || defined (LPTIM2) || defined (LPTIM3) || defined (LPTIM4) 38 39 /** @addtogroup LPTIM 40 * @{ 41 */ 42 43 /* Exported types ------------------------------------------------------------*/ 44 /** @defgroup LPTIM_Exported_Types LPTIM Exported Types 45 * @{ 46 */ 47 48 /** 49 * @brief LPTIM Clock configuration definition 50 */ 51 typedef struct 52 { 53 uint32_t Source; /*!< Selects the clock source. 54 This parameter can be a value of @ref LPTIM_Clock_Source */ 55 56 uint32_t Prescaler; /*!< Specifies the counter clock Prescaler. 57 This parameter can be a value of @ref LPTIM_Clock_Prescaler */ 58 59 } LPTIM_ClockConfigTypeDef; 60 61 /** 62 * @brief LPTIM Clock configuration definition 63 */ 64 typedef struct 65 { 66 uint32_t Polarity; /*!< Selects the polarity of the active edge for the counter unit 67 if the ULPTIM input is selected. 68 Note: This parameter is used only when Ultra low power clock source is used. 69 Note: If the polarity is configured on 'both edges', an auxiliary clock 70 (one of the Low power oscillator) must be active. 71 This parameter can be a value of @ref LPTIM_Clock_Polarity */ 72 73 uint32_t SampleTime; /*!< Selects the clock sampling time to configure the clock glitch filter. 74 Note: This parameter is used only when Ultra low power clock source is used. 75 This parameter can be a value of @ref LPTIM_Clock_Sample_Time */ 76 77 } LPTIM_ULPClockConfigTypeDef; 78 79 /** 80 * @brief LPTIM Trigger configuration definition 81 */ 82 typedef struct 83 { 84 uint32_t Source; /*!< Selects the Trigger source. 85 This parameter can be a value of @ref LPTIM_Trigger_Source */ 86 87 uint32_t ActiveEdge; /*!< Selects the Trigger active edge. 88 Note: This parameter is used only when an external trigger is used. 89 This parameter can be a value of @ref LPTIM_External_Trigger_Polarity */ 90 91 uint32_t SampleTime; /*!< Selects the trigger sampling time to configure the clock glitch filter. 92 Note: This parameter is used only when an external trigger is used. 93 This parameter can be a value of @ref LPTIM_Trigger_Sample_Time */ 94 } LPTIM_TriggerConfigTypeDef; 95 96 /** 97 * @brief LPTIM Initialization Structure definition 98 */ 99 typedef struct 100 { 101 LPTIM_ClockConfigTypeDef Clock; /*!< Specifies the clock parameters */ 102 103 LPTIM_ULPClockConfigTypeDef UltraLowPowerClock;/*!< Specifies the Ultra Low Power clock parameters */ 104 105 LPTIM_TriggerConfigTypeDef Trigger; /*!< Specifies the Trigger parameters */ 106 107 uint32_t Period; /*!< Specifies the period value to be loaded into the active 108 Auto-Reload Register at the next update event. 109 This parameter can be a number between 110 Min_Data = 0x0001 and Max_Data = 0xFFFF. */ 111 112 uint32_t UpdateMode; /*!< Specifies whether the update of the autoreload and the compare 113 values is done immediately or after the end of current period. 114 This parameter can be a value of @ref LPTIM_Updating_Mode */ 115 116 uint32_t CounterSource; /*!< Specifies whether the counter is incremented each internal event 117 or each external event. 118 This parameter can be a value of @ref LPTIM_Counter_Source */ 119 120 uint32_t Input1Source; /*!< Specifies source selected for input1 (GPIO or comparator output). 121 This parameter can be a value of @ref LPTIM_Input1_Source */ 122 123 uint32_t Input2Source; /*!< Specifies source selected for input2 (GPIO or comparator output). 124 Note: This parameter is used only for encoder feature so is used only 125 for LPTIM1 instance. 126 This parameter can be a value of @ref LPTIM_Input2_Source */ 127 128 uint32_t RepetitionCounter;/*!< Specifies the repetition counter value. 129 Each time the RCR downcounter reaches zero, an update event is 130 generated and counting restarts from the RCR value (N). 131 Note: When using repetition counter the UpdateMode field must be 132 set to LPTIM_UPDATE_ENDOFPERIOD otherwise unpredictable 133 behavior may occur. 134 This parameter must be a number between Min_Data = 0x00 and 135 Max_Data = 0xFF. */ 136 } LPTIM_InitTypeDef; 137 138 /** 139 * @brief LPTIM Output Compare Configuration Structure definition 140 */ 141 typedef struct 142 { 143 uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. 144 This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ 145 uint32_t OCPolarity; /*!< Specifies the output polarity. 146 This parameter can be a value of @ref LPTIM_Output_Compare_Polarity */ 147 } LPTIM_OC_ConfigTypeDef; 148 149 /** 150 * @brief LPTIM Input Capture Configuration Structure definition 151 */ 152 typedef struct 153 { 154 uint32_t ICInputSource; /*!< Specifies source selected for IC channel. 155 This parameter can be a value of @ref LPTIM_Input_Capture_Source */ 156 157 uint32_t ICPrescaler; /*!< Specifies the Input Capture Prescaler. 158 This parameter can be a value of @ref LPTIM_Input_Capture_Prescaler */ 159 160 uint32_t ICPolarity; /*!< Specifies the active edge of the input signal. 161 This parameter can be a value of @ref LPTIM_Input_Capture_Polarity */ 162 163 uint32_t ICFilter; /*!< Specifies the input capture filter. 164 This parameter can be a value of @ref LPTIM_Input_Capture_Filter */ 165 } LPTIM_IC_ConfigTypeDef; 166 167 /** 168 * @brief HAL LPTIM State structure definition 169 */ 170 typedef enum 171 { 172 HAL_LPTIM_STATE_RESET = 0x00U, /*!< Peripheral not yet initialized or disabled */ 173 HAL_LPTIM_STATE_READY = 0x01U, /*!< Peripheral Initialized and ready for use */ 174 HAL_LPTIM_STATE_BUSY = 0x02U, /*!< An internal process is ongoing */ 175 HAL_LPTIM_STATE_TIMEOUT = 0x03U, /*!< Timeout state */ 176 HAL_LPTIM_STATE_ERROR = 0x04U /*!< Internal Process is ongoing */ 177 } HAL_LPTIM_StateTypeDef; 178 179 /** 180 * @brief HAL Active channel structures definition 181 */ 182 typedef enum 183 { 184 HAL_LPTIM_ACTIVE_CHANNEL_1 = 0x01U, /*!< The active channel is 1 */ 185 HAL_LPTIM_ACTIVE_CHANNEL_2 = 0x02U, /*!< The active channel is 2 */ 186 HAL_LPTIM_ACTIVE_CHANNEL_CLEARED = 0x00U /*!< All active channels cleared */ 187 } HAL_LPTIM_ActiveChannel; 188 189 /** 190 * @brief LPTIM Channel States definition 191 */ 192 typedef enum 193 { 194 HAL_LPTIM_CHANNEL_STATE_RESET = 0x00U, /*!< LPTIM Channel initial state */ 195 HAL_LPTIM_CHANNEL_STATE_READY = 0x01U, /*!< LPTIM Channel ready for use */ 196 HAL_LPTIM_CHANNEL_STATE_BUSY = 0x02U, /*!< An internal process is ongoing on the LPTIM channel */ 197 } HAL_LPTIM_ChannelStateTypeDef; 198 199 /** 200 * @brief LPTIM handle Structure definition 201 */ 202 #if (USE_HAL_LPTIM_REGISTER_CALLBACKS == 1) 203 typedef struct __LPTIM_HandleTypeDef 204 #else 205 typedef struct 206 #endif /* USE_HAL_LPTIM_REGISTER_CALLBACKS */ 207 { 208 LPTIM_TypeDef *Instance; /*!< Register base address */ 209 210 LPTIM_InitTypeDef Init; /*!< LPTIM required parameters */ 211 212 HAL_LPTIM_ActiveChannel Channel; /*!< Active channel */ 213 214 DMA_HandleTypeDef *hdma[3]; /*!< DMA Handlers array, This array is accessed by a @ref LPTIM_DMA_Handle_index */ 215 216 HAL_StatusTypeDef Status; /*!< LPTIM peripheral status */ 217 218 HAL_LockTypeDef Lock; /*!< LPTIM locking object */ 219 220 __IO HAL_LPTIM_StateTypeDef State; /*!< LPTIM peripheral state */ 221 222 __IO HAL_LPTIM_ChannelStateTypeDef ChannelState[2]; /*!< LPTIM channel operation state */ 223 224 #if (USE_HAL_LPTIM_REGISTER_CALLBACKS == 1) 225 void (* MspInitCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< LPTIM Base Msp Init Callback */ 226 void (* MspDeInitCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< LPTIM Base Msp DeInit Callback */ 227 void (* CompareMatchCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< Compare match Callback */ 228 void (* AutoReloadMatchCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< Auto-reload match Callback */ 229 void (* TriggerCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< External trigger event detection Callback */ 230 void (* CompareWriteCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< Compare register write complete Callback */ 231 void (* AutoReloadWriteCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< Auto-reload register write complete Callback */ 232 void (* DirectionUpCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< Up-counting direction change Callback */ 233 void (* DirectionDownCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< Down-counting direction change Callback */ 234 void (* UpdateEventCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< Update event detection Callback */ 235 void (* RepCounterWriteCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< Repetition counter register write complete Callback */ 236 void (* UpdateEventHalfCpltCallback)(struct __LPTIM_HandleTypeDef *hlptim);/*!< Update event half complete detection Callback */ 237 void (* ErrorCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< LPTIM Error Callback */ 238 void (* IC_CaptureCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< Input capture Callback */ 239 void (* IC_CaptureHalfCpltCallback)(struct __LPTIM_HandleTypeDef *htim); /*!< Input Capture half complete Callback */ 240 void (* IC_OverCaptureCallback)(struct __LPTIM_HandleTypeDef *hlptim); /*!< Over capture Callback */ 241 #endif /* USE_HAL_LPTIM_REGISTER_CALLBACKS */ 242 } LPTIM_HandleTypeDef; 243 244 #if (USE_HAL_LPTIM_REGISTER_CALLBACKS == 1) 245 /** 246 * @brief HAL LPTIM Callback ID enumeration definition 247 */ 248 typedef enum 249 { 250 HAL_LPTIM_MSPINIT_CB_ID = 0x00U, /*!< LPTIM Base Msp Init Callback ID */ 251 HAL_LPTIM_MSPDEINIT_CB_ID = 0x01U, /*!< LPTIM Base Msp DeInit Callback ID */ 252 HAL_LPTIM_COMPARE_MATCH_CB_ID = 0x02U, /*!< Compare match Callback ID */ 253 HAL_LPTIM_AUTORELOAD_MATCH_CB_ID = 0x03U, /*!< Auto-reload match Callback ID */ 254 HAL_LPTIM_TRIGGER_CB_ID = 0x04U, /*!< External trigger event detection Callback ID */ 255 HAL_LPTIM_COMPARE_WRITE_CB_ID = 0x05U, /*!< Compare register write complete Callback ID */ 256 HAL_LPTIM_AUTORELOAD_WRITE_CB_ID = 0x06U, /*!< Auto-reload register write complete Callback ID */ 257 HAL_LPTIM_DIRECTION_UP_CB_ID = 0x07U, /*!< Up-counting direction change Callback ID */ 258 HAL_LPTIM_DIRECTION_DOWN_CB_ID = 0x08U, /*!< Down-counting direction change Callback ID */ 259 HAL_LPTIM_UPDATE_EVENT_CB_ID = 0x09U, /*!< Update event detection Callback ID */ 260 HAL_LPTIM_REP_COUNTER_WRITE_CB_ID = 0x0AU, /*!< Repetition counter register write complete Callback ID */ 261 HAL_LPTIM_UPDATE_EVENT_HALF_CB_ID = 0x0BU, /*!< Update event half complete detection Callback ID */ 262 HAL_LPTIM_ERROR_CB_ID = 0x0CU, /*!< LPTIM Error Callback ID */ 263 HAL_LPTIM_IC_CAPTURE_CB_ID = 0x0DU, /*!< Input capture Callback ID */ 264 HAL_LPTIM_IC_CAPTURE_HALF_CB_ID = 0x0EU, /*!< Input capture half complete Callback ID */ 265 HAL_LPTIM_OVER_CAPTURE_CB_ID = 0x0FU, /*!< Over capture Callback ID */ 266 } HAL_LPTIM_CallbackIDTypeDef; 267 268 /** 269 * @brief HAL TIM Callback pointer definition 270 */ 271 typedef void (*pLPTIM_CallbackTypeDef)(LPTIM_HandleTypeDef *hlptim); /*!< pointer to the LPTIM callback function */ 272 273 #endif /* USE_HAL_LPTIM_REGISTER_CALLBACKS */ 274 /** 275 * @} 276 */ 277 278 /* Exported constants --------------------------------------------------------*/ 279 /** @defgroup LPTIM_Exported_Constants LPTIM Exported Constants 280 * @{ 281 */ 282 283 /** @defgroup LPTIM_Clock_Source LPTIM Clock Source 284 * @{ 285 */ 286 #define LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC 0x00000000U 287 #define LPTIM_CLOCKSOURCE_ULPTIM LPTIM_CFGR_CKSEL 288 /** 289 * @} 290 */ 291 292 /** @defgroup LPTIM_Clock_Prescaler LPTIM Clock Prescaler 293 * @{ 294 */ 295 #define LPTIM_PRESCALER_DIV1 0x00000000U 296 #define LPTIM_PRESCALER_DIV2 LPTIM_CFGR_PRESC_0 297 #define LPTIM_PRESCALER_DIV4 LPTIM_CFGR_PRESC_1 298 #define LPTIM_PRESCALER_DIV8 (LPTIM_CFGR_PRESC_0 | LPTIM_CFGR_PRESC_1) 299 #define LPTIM_PRESCALER_DIV16 LPTIM_CFGR_PRESC_2 300 #define LPTIM_PRESCALER_DIV32 (LPTIM_CFGR_PRESC_0 | LPTIM_CFGR_PRESC_2) 301 #define LPTIM_PRESCALER_DIV64 (LPTIM_CFGR_PRESC_1 | LPTIM_CFGR_PRESC_2) 302 #define LPTIM_PRESCALER_DIV128 LPTIM_CFGR_PRESC 303 /** 304 * @} 305 */ 306 307 /** @defgroup LPTIM_Clock_Sample_Time LPTIM Clock Sample Time 308 * @{ 309 */ 310 #define LPTIM_CLOCKSAMPLETIME_DIRECTTRANSITION 0x00000000U 311 #define LPTIM_CLOCKSAMPLETIME_2TRANSITIONS LPTIM_CFGR_CKFLT_0 312 #define LPTIM_CLOCKSAMPLETIME_4TRANSITIONS LPTIM_CFGR_CKFLT_1 313 #define LPTIM_CLOCKSAMPLETIME_8TRANSITIONS LPTIM_CFGR_CKFLT 314 /** 315 * @} 316 */ 317 318 /** @defgroup LPTIM_Clock_Polarity LPTIM Clock Polarity 319 * @{ 320 */ 321 #define LPTIM_CLOCKPOLARITY_RISING 0x00000000U 322 #define LPTIM_CLOCKPOLARITY_FALLING LPTIM_CFGR_CKPOL_0 323 #define LPTIM_CLOCKPOLARITY_RISING_FALLING LPTIM_CFGR_CKPOL_1 324 /** 325 * @} 326 */ 327 328 /** @defgroup LPTIM_Trigger_Source LPTIM Trigger Source 329 * @{ 330 */ 331 #define LPTIM_TRIGSOURCE_SOFTWARE 0x0000FFFFU 332 #define LPTIM_TRIGSOURCE_0 0x00000000U 333 #define LPTIM_TRIGSOURCE_1 LPTIM_CFGR_TRIGSEL_0 334 #define LPTIM_TRIGSOURCE_2 LPTIM_CFGR_TRIGSEL_1 335 #define LPTIM_TRIGSOURCE_3 (LPTIM_CFGR_TRIGSEL_0 | LPTIM_CFGR_TRIGSEL_1) 336 #define LPTIM_TRIGSOURCE_4 LPTIM_CFGR_TRIGSEL_2 337 #define LPTIM_TRIGSOURCE_5 (LPTIM_CFGR_TRIGSEL_0 | LPTIM_CFGR_TRIGSEL_2) 338 #define LPTIM_TRIGSOURCE_6 (LPTIM_CFGR_TRIGSEL_1 | LPTIM_CFGR_TRIGSEL_2) 339 #define LPTIM_TRIGSOURCE_7 LPTIM_CFGR_TRIGSEL 340 /** 341 * @} 342 */ 343 344 /** @defgroup LPTIM_External_Trigger_Polarity LPTIM External Trigger Polarity 345 * @{ 346 */ 347 #define LPTIM_ACTIVEEDGE_RISING LPTIM_CFGR_TRIGEN_0 348 #define LPTIM_ACTIVEEDGE_FALLING LPTIM_CFGR_TRIGEN_1 349 #define LPTIM_ACTIVEEDGE_RISING_FALLING LPTIM_CFGR_TRIGEN 350 /** 351 * @} 352 */ 353 354 /** @defgroup LPTIM_Trigger_Sample_Time LPTIM Trigger Sample Time 355 * @{ 356 */ 357 #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION 0x00000000U 358 #define LPTIM_TRIGSAMPLETIME_2TRANSITIONS LPTIM_CFGR_TRGFLT_0 359 #define LPTIM_TRIGSAMPLETIME_4TRANSITIONS LPTIM_CFGR_TRGFLT_1 360 #define LPTIM_TRIGSAMPLETIME_8TRANSITIONS LPTIM_CFGR_TRGFLT 361 /** 362 * @} 363 */ 364 365 /** @defgroup LPTIM_Updating_Mode LPTIM Updating Mode 366 * @{ 367 */ 368 369 #define LPTIM_UPDATE_IMMEDIATE 0x00000000U 370 #define LPTIM_UPDATE_ENDOFPERIOD LPTIM_CFGR_PRELOAD 371 /** 372 * @} 373 */ 374 375 /** @defgroup LPTIM_Counter_Source LPTIM Counter Source 376 * @{ 377 */ 378 379 #define LPTIM_COUNTERSOURCE_INTERNAL 0x00000000U 380 #define LPTIM_COUNTERSOURCE_EXTERNAL LPTIM_CFGR_COUNTMODE 381 /** 382 * @} 383 */ 384 385 /** @defgroup LPTIM_Input1_Source LPTIM Input1 Source 386 * @{ 387 */ 388 389 #define LPTIM_INPUT1SOURCE_GPIO 0x00000000U /*!< For LPTIM1, LPTIM2, LPTIM3 and LPTIM4 */ 390 #define LPTIM_INPUT1SOURCE_COMP1 LPTIM_CFGR2_IN1SEL_0 /*!< For LPTIM1, LPTIM2, LPTIM3 and LPTIM4 */ 391 /** 392 * @} 393 */ 394 395 /** @defgroup LPTIM_Input2_Source LPTIM Input2 Source 396 * @{ 397 */ 398 399 #define LPTIM_INPUT2SOURCE_GPIO 0x00000000U /*!< For LPTIM1 and LPTIM2 */ 400 #if defined(COMP2) 401 #define LPTIM_INPUT2SOURCE_COMP2 LPTIM_CFGR2_IN2SEL_0 /*!< For LPTIM1 and LPTIM2 */ 402 #endif /* COMP2 */ 403 /** 404 * @} 405 */ 406 407 /** @defgroup LPTIM_Flag_Definition LPTIM Flags Definition 408 * @{ 409 */ 410 411 #define LPTIM_FLAG_CC1O LPTIM_ISR_CC1OF 412 #define LPTIM_FLAG_CC2O LPTIM_ISR_CC2OF 413 #define LPTIM_FLAG_CC1 LPTIM_ISR_CC1IF 414 #define LPTIM_FLAG_CC2 LPTIM_ISR_CC2IF 415 #define LPTIM_FLAG_CMP1OK LPTIM_ISR_CMP1OK 416 #define LPTIM_FLAG_CMP2OK LPTIM_ISR_CMP2OK 417 #define LPTIM_FLAG_DIEROK LPTIM_ISR_DIEROK 418 #define LPTIM_FLAG_REPOK LPTIM_ISR_REPOK 419 #define LPTIM_FLAG_UPDATE LPTIM_ISR_UE 420 #define LPTIM_FLAG_DOWN LPTIM_ISR_DOWN 421 #define LPTIM_FLAG_UP LPTIM_ISR_UP 422 #define LPTIM_FLAG_ARROK LPTIM_ISR_ARROK 423 #define LPTIM_FLAG_EXTTRIG LPTIM_ISR_EXTTRIG 424 #define LPTIM_FLAG_ARRM LPTIM_ISR_ARRM 425 /** 426 * @} 427 */ 428 429 /** @defgroup LPTIM_DMA_sources LPTIM DMA Sources 430 * @{ 431 */ 432 #define LPTIM_DMA_UPDATE LPTIM_DIER_UEDE /*!< DMA request is triggered by the update event */ 433 #define LPTIM_DMA_CC1 LPTIM_DIER_CC1DE /*!< DMA request is triggered by the capture 1 event */ 434 #define LPTIM_DMA_CC2 LPTIM_DIER_CC2DE /*!< DMA request is triggered by the capture 2 event */ 435 436 /** 437 * @} 438 */ 439 440 /** @defgroup LPTIM_DMA_Handle_index LPTIM DMA Handle Index 441 * @{ 442 */ 443 #define LPTIM_DMA_ID_UPDATE ((uint16_t) 0x0000) /*!< Index of the DMA handle used for Update DMA requests */ 444 #define LPTIM_DMA_ID_CC1 ((uint16_t) 0x0001) /*!< Index of the DMA handle used for Capture/Update event 1 DMA request */ 445 #define LPTIM_DMA_ID_CC2 ((uint16_t) 0x0002) /*!< Index of the DMA handle used for Capture/Update event 2 DMA request */ 446 /** 447 * @} 448 */ 449 450 /** @defgroup LPTIM_Interrupts_Definition LPTIM Interrupts Definition 451 * @{ 452 */ 453 #define LPTIM_IT_CC1O LPTIM_DIER_CC1OIE 454 #define LPTIM_IT_CC2O LPTIM_DIER_CC2OIE 455 #define LPTIM_IT_CC1 LPTIM_DIER_CC1IE 456 #define LPTIM_IT_CC2 LPTIM_DIER_CC2IE 457 #define LPTIM_IT_CMP1OK LPTIM_DIER_CMP1OKIE 458 #define LPTIM_IT_CMP2OK LPTIM_DIER_CMP2OKIE 459 #define LPTIM_IT_REPOK LPTIM_DIER_REPOKIE 460 #define LPTIM_IT_UPDATE LPTIM_DIER_UEIE 461 #define LPTIM_IT_DOWN LPTIM_DIER_DOWNIE 462 #define LPTIM_IT_UP LPTIM_DIER_UPIE 463 #define LPTIM_IT_ARROK LPTIM_DIER_ARROKIE 464 #define LPTIM_IT_EXTTRIG LPTIM_DIER_EXTTRIGIE 465 #define LPTIM_IT_ARRM LPTIM_DIER_ARRMIE 466 /** 467 * @} 468 */ 469 470 /** @defgroup LPTIM_Channel LPTIM Channel 471 * @{ 472 */ 473 #define LPTIM_CHANNEL_1 LL_LPTIM_CHANNEL_CH1 /*!< Capture/compare channel 1 identifier */ 474 #define LPTIM_CHANNEL_2 LL_LPTIM_CHANNEL_CH2 /*!< Capture/compare channel 2 identifier */ 475 /** 476 * @} 477 */ 478 479 /** @defgroup LPTIM_Output_Compare_Polarity LPTIM Output Compare Polarity 480 * @{ 481 */ 482 #define LPTIM_OCPOLARITY_HIGH 0x00000000U /*!< Capture/Compare output polarity */ 483 #define LPTIM_OCPOLARITY_LOW 0x00000001U /*!< Capture/Compare output polarity */ 484 /** 485 * @} 486 */ 487 488 /** @defgroup LPTIM_Input_Capture_Prescaler LPTIM Input Capture Prescaler 489 * @{ 490 */ 491 #define LPTIM_ICPSC_DIV1 0x00000000UL /*!< Capture performed each time an edge is detected on the capture input */ 492 #define LPTIM_ICPSC_DIV2 LPTIM_CCMR1_IC1PSC_0 /*!< Capture performed once every 2 events */ 493 #define LPTIM_ICPSC_DIV4 LPTIM_CCMR1_IC1PSC_1 /*!< Capture performed once every 4 events */ 494 #define LPTIM_ICPSC_DIV8 (LPTIM_CCMR1_IC1PSC_0|LPTIM_CCMR1_IC1PSC_1) /*!< Capture performed once every 8 events */ 495 /** 496 * @} 497 */ 498 499 /** @defgroup LPTIM_Input_Capture_Polarity LPTIM Input Capture Polarity 500 * @{ 501 */ 502 #define LPTIM_ICPOLARITY_RISING 0x00000000UL /*!< Capture/Compare input rising polarity */ 503 #define LPTIM_ICPOLARITY_FALLING LPTIM_CCMR1_CC1P_0 /*!< Capture/Compare input falling polarity */ 504 #define LPTIM_ICPOLARITY_RISING_FALLING (LPTIM_CCMR1_CC1P_0|LPTIM_CCMR1_CC1P_1) /*!< Capture/Compare input rising and falling polarities */ 505 /** 506 * @} 507 */ 508 509 /** @defgroup LPTIM_Input_Capture_Filter LPTIM Input Capture Filter 510 * @{ 511 */ 512 #define LPTIM_ICFLT_CLOCK_DIV1 0x00000000UL /*!< any external input capture signal level change is considered as a valid transition */ 513 #define LPTIM_ICFLT_CLOCK_DIV2 LPTIM_CCMR1_IC1F_0 /*!< external input capture signal level change must be stable for at least 2 clock periods before it is considered as valid transition */ 514 #define LPTIM_ICFLT_CLOCK_DIV4 LPTIM_CCMR1_IC1F_1 /*!< external input capture signal level change must be stable for at least 4 clock periods before it is considered as valid transition */ 515 #define LPTIM_ICFLT_CLOCK_DIV8 (LPTIM_CCMR1_IC1F_0|LPTIM_CCMR1_IC1F_1) /*!< external input capture signal level change must be stable for at least 8 clock periods before it is considered as valid transition */ 516 /** 517 * @} 518 */ 519 520 /** @defgroup LPTIM_Input_Capture_Source LPTIM Input Capture Source 521 * @{ 522 */ 523 #define LPTIM_IC1SOURCE_GPIO 0x00000000UL /*!< For LPTIM1, LPTIM2 and LPTIM3 */ 524 #define LPTIM_IC1SOURCE_COMP1 LPTIM_CFGR2_IC1SEL_0 /*!< For LPTIM1, LPTIM2 and LPTIM3 */ 525 #if defined(COMP2) 526 #define LPTIM_IC1SOURCE_COMP2 LPTIM_CFGR2_IC1SEL_1 /*!< For LPTIM1, LPTIM2 and LPTIM3 */ 527 #endif /* COMP2 */ 528 #define LPTIM_IC2SOURCE_GPIO 0x00000000UL /*!< For LPTIM1, LPTIM2 and LPTIM3 */ 529 #define LPTIM_IC2SOURCE_LSI LPTIM_CFGR2_IC2SEL_0 /*!< For LPTIM1 */ 530 #define LPTIM_IC2SOURCE_LSE LPTIM_CFGR2_IC2SEL_1 /*!< For LPTIM1 */ 531 #define LPTIM_IC2SOURCE_HSI_256 LPTIM_CFGR2_IC2SEL_0 /*!< For LPTIM2 */ 532 #define LPTIM_IC2SOURCE_MSIS_1024 LPTIM_CFGR2_IC2SEL_1 /*!< For LPTIM2 */ 533 #define LPTIM_IC2SOURCE_MSIS_4 (LPTIM_CFGR2_IC2SEL_0|LPTIM_CFGR2_IC2SEL_1) /*!< For LPTIM2 */ 534 /** 535 * @} 536 */ 537 /** 538 * @} 539 */ 540 541 /* Exported macros -----------------------------------------------------------*/ 542 /** @defgroup LPTIM_Exported_Macros LPTIM Exported Macros 543 * @{ 544 */ 545 546 /** @brief Reset LPTIM handle state. 547 * @param __HANDLE__ LPTIM handle 548 * @retval None 549 */ 550 #if (USE_HAL_LPTIM_REGISTER_CALLBACKS == 1) 551 #define __HAL_LPTIM_RESET_HANDLE_STATE(__HANDLE__) do { \ 552 (__HANDLE__)->State = HAL_LPTIM_STATE_RESET; \ 553 (__HANDLE__)->ChannelState[0] = HAL_LPTIM_CHANNEL_STATE_RESET;\ 554 (__HANDLE__)->ChannelState[1] = HAL_LPTIM_CHANNEL_STATE_RESET;\ 555 (__HANDLE__)->MspInitCallback = NULL; \ 556 (__HANDLE__)->MspDeInitCallback = NULL; \ 557 } while(0) 558 #else 559 #define __HAL_LPTIM_RESET_HANDLE_STATE(__HANDLE__) do { \ 560 (__HANDLE__)->State = HAL_LPTIM_STATE_RESET; \ 561 (__HANDLE__)->ChannelState[0] = HAL_LPTIM_CHANNEL_STATE_RESET;\ 562 (__HANDLE__)->ChannelState[1] = HAL_LPTIM_CHANNEL_STATE_RESET;\ 563 } while(0) 564 #endif /* USE_HAL_LPTIM_REGISTER_CALLBACKS */ 565 566 /** 567 * @brief Enable the LPTIM peripheral. 568 * @param __HANDLE__ LPTIM handle 569 * @retval None 570 */ 571 #define __HAL_LPTIM_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= (LPTIM_CR_ENABLE)) 572 573 /** 574 * @brief Disable the LPTIM peripheral. 575 * @param __HANDLE__ LPTIM handle 576 * @retval None 577 */ 578 #define __HAL_LPTIM_DISABLE(__HANDLE__) \ 579 do { \ 580 if (((__HANDLE__)->Instance->CCMR1 & LPTIM_CCMR1_CC1E) == 0UL) \ 581 { \ 582 if(((__HANDLE__)->Instance->CCMR1 & LPTIM_CCMR1_CC2E) == 0UL) \ 583 { \ 584 (__HANDLE__)->Instance->CR &= ~(LPTIM_CR_ENABLE); \ 585 } \ 586 } \ 587 } while(0) 588 589 /** 590 * @brief Start the LPTIM peripheral in Continuous mode. 591 * @param __HANDLE__ LPTIM handle 592 * @retval None 593 */ 594 #define __HAL_LPTIM_START_CONTINUOUS(__HANDLE__) ((__HANDLE__)->Instance->CR |= LPTIM_CR_CNTSTRT) 595 /** 596 * @brief Start the LPTIM peripheral in single mode. 597 * @param __HANDLE__ LPTIM handle 598 * @retval None 599 */ 600 #define __HAL_LPTIM_START_SINGLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= LPTIM_CR_SNGSTRT) 601 602 /** 603 * @brief Reset the LPTIM Counter register in synchronous mode. 604 * @param __HANDLE__ LPTIM handle 605 * @retval None 606 */ 607 #define __HAL_LPTIM_RESET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CR |= LPTIM_CR_COUNTRST) 608 609 /** 610 * @brief Reset after read of the LPTIM Counter register in asynchronous mode. 611 * @param __HANDLE__ LPTIM handle 612 * @retval None 613 */ 614 #define __HAL_LPTIM_RESET_COUNTER_AFTERREAD(__HANDLE__) ((__HANDLE__)->Instance->CR |= LPTIM_CR_RSTARE) 615 616 /** 617 * @brief Write the passed parameter in the Autoreload register. 618 * @param __HANDLE__ LPTIM handle 619 * @param __VALUE__ Autoreload value 620 * This parameter must be a value between Min_Data = 0x0001 and Max_Data = 0xFFFF. 621 * @retval None 622 * @note The ARR register can only be modified when the LPTIM instance is enabled. 623 */ 624 #define __HAL_LPTIM_AUTORELOAD_SET(__HANDLE__ , __VALUE__) ((__HANDLE__)->Instance->ARR = (__VALUE__)) 625 626 /** 627 * @brief Write the passed parameter in the Compare register. 628 * @param __HANDLE__ LPTIM handle 629 * @param __VALUE__ Compare value 630 * @param __CHANNEL__ TIM Channel to be configured 631 * @retval None 632 * @note The CCRx registers can only be modified when the LPTIM instance is enabled. 633 */ 634 #define __HAL_LPTIM_COMPARE_SET(__HANDLE__ , __CHANNEL__, __VALUE__) \ 635 (((__CHANNEL__) == LPTIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__VALUE__)) :\ 636 ((__CHANNEL__) == LPTIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__VALUE__)) : 0U) 637 638 /** 639 * @brief Write the passed parameter in the Repetition register. 640 * @param __HANDLE__ LPTIM handle 641 * @param __VALUE__ Repetition value 642 * @retval None 643 */ 644 #define __HAL_LPTIM_REPETITIONCOUNTER_SET(__HANDLE__ , __VALUE__) ((__HANDLE__)->Instance->RCR = (__VALUE__)) 645 646 /** 647 * @brief Return the current Repetition value. 648 * @param __HANDLE__ LPTIM handle 649 * @retval Repetition register value 650 * @note The RCR register can only be modified when the LPTIM instance is enabled. 651 */ 652 #define __HAL_LPTIM_REPETITIONCOUNTER_GET(__HANDLE__) ((__HANDLE__)->Instance->RCR) 653 654 /** 655 * @brief Enable the LPTIM signal input/output on the corresponding pin. 656 * @param __HANDLE__ LPTIM handle 657 * @param __CHANNEL__ LPTIM Channels to be enabled. 658 * This parameter can be one of the following values: 659 * @arg LPTIM_CHANNEL_1: LPTIM Channel 1 selected 660 * @arg LPTIM_CHANNEL_2: LPTIM Channel 2 selected 661 * @retval None 662 */ 663 #define __HAL_LPTIM_CAPTURE_COMPARE_ENABLE(__HANDLE__, __CHANNEL__) \ 664 do { \ 665 switch (__CHANNEL__) \ 666 { \ 667 case LPTIM_CHANNEL_1: \ 668 ((__HANDLE__)->Instance->CCMR1 |= LPTIM_CCMR1_CC1E); \ 669 break; \ 670 case LPTIM_CHANNEL_2: \ 671 ((__HANDLE__)->Instance->CCMR1 |= LPTIM_CCMR1_CC2E); \ 672 break; \ 673 default: \ 674 break; \ 675 } \ 676 } \ 677 while(0) 678 679 /** 680 * @brief Disable the LPTIM signal input/output on the corresponding pin. 681 * @param __HANDLE__ LPTIM handle 682 * @param __CHANNEL__ LPTIM Channels to be disabled. 683 * This parameter can be one of the following values: 684 * @arg LPTIM_CHANNEL_1: LPTIM Channel 1 selected 685 * @arg LPTIM_CHANNEL_2: LPTIM Channel 2 selected 686 * @retval None 687 */ 688 #define __HAL_LPTIM_CAPTURE_COMPARE_DISABLE(__HANDLE__, __CHANNEL__) \ 689 do { \ 690 switch (__CHANNEL__) \ 691 { \ 692 case LPTIM_CHANNEL_1: \ 693 ((__HANDLE__)->Instance->CCMR1 &= ~LPTIM_CCMR1_CC1E); \ 694 break; \ 695 case LPTIM_CHANNEL_2: \ 696 ((__HANDLE__)->Instance->CCMR1 &= ~LPTIM_CCMR1_CC2E); \ 697 break; \ 698 default: \ 699 break; \ 700 } \ 701 } \ 702 while(0) 703 704 /** 705 * @brief Check whether the specified LPTIM flag is set or not. 706 * @param __HANDLE__ LPTIM handle 707 * @param __FLAG__ LPTIM flag to check 708 * This parameter can be a value of: 709 * @arg LPTIM_FLAG_REPOK : Repetition register update OK Flag. 710 * @arg LPTIM_FLAG_UPDATE : Update event Flag. 711 * @arg LPTIM_FLAG_DOWN : Counter direction change up Flag. 712 * @arg LPTIM_FLAG_UP : Counter direction change down to up Flag. 713 * @arg LPTIM_FLAG_ARROK : Autoreload register update OK Flag. 714 * @arg LPTIM_FLAG_CMP1OK : Compare register 1 update OK Flag. 715 * @arg LPTIM_FLAG_CMP2OK : Compare register 2 update OK Flag. 716 * @arg LPTIM_FLAG_EXTTRIG : External trigger edge event Flag. 717 * @arg LPTIM_FLAG_ARRM : Autoreload match Flag. 718 * @arg LPTIM_FLAG_CC1 : Capture/Compare 1 interrupt flag. 719 * @arg LPTIM_FLAG_CC2 : Capture/Compare 2 interrupt flag. 720 * @arg LPTIM_FLAG_CC1O : Capture/Compare 1 over-capture flag. 721 * @arg LPTIM_FLAG_CC2O : Capture/Compare 2 over-capture flag. 722 * @arg LPTIM_FLAG_DIEROK : DMA & interrupt enable update OK flag. 723 * @retval The state of the specified flag (SET or RESET). 724 */ 725 #define __HAL_LPTIM_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->ISR &(__FLAG__)) == (__FLAG__)) 726 727 /** 728 * @brief Clear the specified LPTIM flag. 729 * @param __HANDLE__ LPTIM handle. 730 * @param __FLAG__ LPTIM flag to clear. 731 * This parameter can be a value of: 732 * @arg LPTIM_FLAG_REPOK : Repetition register update OK Flag. 733 * @arg LPTIM_FLAG_UPDATE : Update event Flag. 734 * @arg LPTIM_FLAG_DOWN : Counter direction change up Flag. 735 * @arg LPTIM_FLAG_UP : Counter direction change down to up Flag. 736 * @arg LPTIM_FLAG_ARROK : Autoreload register update OK Flag. 737 * @arg LPTIM_FLAG_CMP1OK : Compare register 1 update OK Flag. 738 * @arg LPTIM_FLAG_CMP2OK : Compare register 2 update OK Flag. 739 * @arg LPTIM_FLAG_EXTTRIG : External trigger edge event Flag. 740 * @arg LPTIM_FLAG_ARRM : Autoreload match Flag. 741 * @arg LPTIM_FLAG_CC1 : Capture/Compare 1 interrupt flag. 742 * @arg LPTIM_FLAG_CC2 : Capture/Compare 2 interrupt flag. 743 * @arg LPTIM_FLAG_CC1O : Capture/Compare 1 over-capture flag. 744 * @arg LPTIM_FLAG_CC2O : Capture/Compare 2 over-capture flag. 745 * @arg LPTIM_FLAG_DIEROK : DMA & interrupt enable update OK flag. 746 * @retval None. 747 */ 748 #define __HAL_LPTIM_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__)) 749 750 /** 751 * @brief Enable the specified LPTIM interrupt. 752 * @param __HANDLE__ LPTIM handle. 753 * @param __INTERRUPT__ LPTIM interrupt to set. 754 * This parameter can be a value of: 755 * @arg LPTIM_IT_REPOK : Repetition register update OK Interrupt. 756 * @arg LPTIM_IT_UPDATE : Update event register Interrupt. 757 * @arg LPTIM_IT_DOWN : Counter direction change up Interrupt. 758 * @arg LPTIM_IT_UP : Counter direction change down to up Interrupt. 759 * @arg LPTIM_IT_ARROK : Autoreload register update OK Interrupt. 760 * @arg LPTIM_IT_CMP1OK : Compare register 1 update OK Interrupt. 761 * @arg LPTIM_IT_CMP2OK : Compare register 2 update OK Interrupt. 762 * @arg LPTIM_IT_EXTTRIG : External trigger edge event Interrupt. 763 * @arg LPTIM_IT_ARRM : Autoreload match Interrupt. 764 * @arg LPTIM_IT_CC1 : Capture/Compare 1 interrupt Interrupt. 765 * @arg LPTIM_IT_CC2 : Capture/Compare 2 interrupt Interrupt. 766 * @arg LPTIM_IT_CC1O : Capture/Compare 1 over-capture Interrupt. 767 * @arg LPTIM_IT_CC2O : Capture/Compare 2 over-capture Interrupt. 768 * @retval None. 769 * @note The LPTIM interrupts can only be enabled when the LPTIM instance is enabled. 770 */ 771 #define __HAL_LPTIM_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER |= (__INTERRUPT__)) 772 773 /** 774 * @brief Disable the specified LPTIM interrupt. 775 * @param __HANDLE__ LPTIM handle. 776 * @param __INTERRUPT__ LPTIM interrupt to set. 777 * This parameter can be a value of: 778 * @arg LPTIM_IT_REPOK : Repetition register update OK Interrupt. 779 * @arg LPTIM_IT_UPDATE : Update event register Interrupt. 780 * @arg LPTIM_IT_DOWN : Counter direction change up Interrupt. 781 * @arg LPTIM_IT_UP : Counter direction change down to up Interrupt. 782 * @arg LPTIM_IT_ARROK : Autoreload register update OK Interrupt. 783 * @arg LPTIM_IT_CMP1OK : Compare register 1 update OK Interrupt. 784 * @arg LPTIM_IT_CMP2OK : Compare register 2 update OK Interrupt. 785 * @arg LPTIM_IT_EXTTRIG : External trigger edge event Interrupt. 786 * @arg LPTIM_IT_ARRM : Autoreload match Interrupt. 787 * @arg LPTIM_IT_CC1 : Capture/Compare 1 interrupt Interrupt. 788 * @arg LPTIM_IT_CC2 : Capture/Compare 2 interrupt Interrupt. 789 * @arg LPTIM_IT_CC1O : Capture/Compare 1 over-capture Interrupt. 790 * @arg LPTIM_IT_CC2O : Capture/Compare 2 over-capture Interrupt. 791 * @retval None. 792 * @note The LPTIM interrupts can only be disabled when the LPTIM instance is enabled. 793 */ 794 #define __HAL_LPTIM_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER &= (~(__INTERRUPT__))) 795 796 /** @brief Enable the specified DMA request. 797 * @param __HANDLE__ specifies the TIM Handle. 798 * @param __DMA__ specifies the LPTIM DMA request to enable. 799 * This parameter can be one of the following values: 800 * @arg LPTIM_DMA_UPDATE: Update DMA request 801 * @arg LPTIM_DMA_CC1: Capture/Compare 1 DMA request 802 * @arg LPTIM_DMA_CC2: Capture/Compare 2 DMA request 803 * @retval None 804 */ 805 #define __HAL_LPTIM_ENABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER |= (__DMA__)) 806 807 /** @brief Disable the specified DMA request. 808 * @param __HANDLE__ specifies the LPTIM Handle. 809 * @param __DMA__ specifies the LPTIM DMA request to disable. 810 * This parameter can be one of the following values: 811 * @arg LPTIM_DMA_UPDATE: Update DMA request 812 * @arg LPTIM_DMA_CC1: Capture/Compare 1 DMA request 813 * @arg LPTIM_DMA_CC2: Capture/Compare 2 DMA request 814 * @retval None 815 */ 816 #define __HAL_LPTIM_DISABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER &= ~(__DMA__)) 817 818 /** 819 * @brief Check whether the specified LPTIM interrupt source is enabled or not. 820 * @param __HANDLE__ LPTIM handle. 821 * @param __INTERRUPT__ LPTIM interrupt to check. 822 * This parameter can be a value of: 823 * @arg LPTIM_IT_REPOK : Repetition register update OK Interrupt. 824 * @arg LPTIM_IT_UPDATE : Update event register Interrupt. 825 * @arg LPTIM_IT_DOWN : Counter direction change up Interrupt. 826 * @arg LPTIM_IT_UP : Counter direction change down to up Interrupt. 827 * @arg LPTIM_IT_ARROK : Autoreload register update OK Interrupt. 828 * @arg LPTIM_IT_CMP1OK : Compare register 1 update OK Interrupt. 829 * @arg LPTIM_IT_CMP2OK : Compare register 2 update OK Interrupt. 830 * @arg LPTIM_IT_EXTTRIG : External trigger edge event Interrupt. 831 * @arg LPTIM_IT_ARRM : Autoreload match Interrupt. 832 * @arg LPTIM_IT_CC1 : Capture/Compare 1 interrupt Interrupt. 833 * @arg LPTIM_IT_CC2 : Capture/Compare 2 interrupt Interrupt. 834 * @arg LPTIM_IT_CC1O : Capture/Compare 1 over-capture Interrupt. 835 * @arg LPTIM_IT_CC2O : Capture/Compare 2 over-capture Interrupt. 836 * @retval Interrupt status. 837 */ 838 839 #define __HAL_LPTIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER\ 840 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) 841 842 /** 843 * @} 844 */ 845 846 /* Exported functions --------------------------------------------------------*/ 847 /** @defgroup LPTIM_Exported_Functions LPTIM Exported Functions 848 * @{ 849 */ 850 851 /** @addtogroup LPTIM_Exported_Functions_Group1 852 * @brief Initialization and Configuration functions. 853 * @{ 854 */ 855 /* Initialization/de-initialization functions ********************************/ 856 HAL_StatusTypeDef HAL_LPTIM_Init(LPTIM_HandleTypeDef *hlptim); 857 HAL_StatusTypeDef HAL_LPTIM_DeInit(LPTIM_HandleTypeDef *hlptim); 858 859 /* MSP functions *************************************************************/ 860 void HAL_LPTIM_MspInit(LPTIM_HandleTypeDef *hlptim); 861 void HAL_LPTIM_MspDeInit(LPTIM_HandleTypeDef *hlptim); 862 /** 863 * @} 864 */ 865 866 /** @addtogroup LPTIM_Exported_Functions_Group2 867 * @brief Start-Stop operation functions. 868 * @{ 869 */ 870 /* Config functions **********************************************************/ 871 HAL_StatusTypeDef HAL_LPTIM_OC_ConfigChannel(LPTIM_HandleTypeDef *hlptim, const LPTIM_OC_ConfigTypeDef *sConfig, 872 uint32_t Channel); 873 874 /* Start/Stop operation functions *********************************************/ 875 /* ################################# PWM Mode ################################*/ 876 /* Blocking mode: Polling */ 877 HAL_StatusTypeDef HAL_LPTIM_PWM_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 878 HAL_StatusTypeDef HAL_LPTIM_PWM_Stop(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 879 /* Non-Blocking mode: Interrupt */ 880 HAL_StatusTypeDef HAL_LPTIM_PWM_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 881 HAL_StatusTypeDef HAL_LPTIM_PWM_Stop_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 882 HAL_StatusTypeDef HAL_LPTIM_PWM_Start_DMA(LPTIM_HandleTypeDef *hlptim, uint32_t Channel, const uint32_t *pData, 883 uint32_t Length); 884 HAL_StatusTypeDef HAL_LPTIM_PWM_Stop_DMA(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 885 886 /* ############################# One Pulse Mode ##############################*/ 887 /* Blocking mode: Polling */ 888 HAL_StatusTypeDef HAL_LPTIM_OnePulse_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 889 HAL_StatusTypeDef HAL_LPTIM_OnePulse_Stop(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 890 /* Non-Blocking mode: Interrupt */ 891 HAL_StatusTypeDef HAL_LPTIM_OnePulse_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 892 HAL_StatusTypeDef HAL_LPTIM_OnePulse_Stop_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 893 894 /* ############################## Set once Mode ##############################*/ 895 /* Blocking mode: Polling */ 896 HAL_StatusTypeDef HAL_LPTIM_SetOnce_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 897 HAL_StatusTypeDef HAL_LPTIM_SetOnce_Stop(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 898 /* Non-Blocking mode: Interrupt */ 899 HAL_StatusTypeDef HAL_LPTIM_SetOnce_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 900 HAL_StatusTypeDef HAL_LPTIM_SetOnce_Stop_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 901 902 /* ############################### Encoder Mode ##############################*/ 903 /* Blocking mode: Polling */ 904 HAL_StatusTypeDef HAL_LPTIM_Encoder_Start(LPTIM_HandleTypeDef *hlptim); 905 HAL_StatusTypeDef HAL_LPTIM_Encoder_Stop(LPTIM_HandleTypeDef *hlptim); 906 /* Non-Blocking mode: Interrupt */ 907 HAL_StatusTypeDef HAL_LPTIM_Encoder_Start_IT(LPTIM_HandleTypeDef *hlptim); 908 HAL_StatusTypeDef HAL_LPTIM_Encoder_Stop_IT(LPTIM_HandleTypeDef *hlptim); 909 910 /* ############################# Time out Mode ##############################*/ 911 /* Blocking mode: Polling */ 912 HAL_StatusTypeDef HAL_LPTIM_TimeOut_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Timeout); 913 HAL_StatusTypeDef HAL_LPTIM_TimeOut_Stop(LPTIM_HandleTypeDef *hlptim); 914 /* Non-Blocking mode: Interrupt */ 915 HAL_StatusTypeDef HAL_LPTIM_TimeOut_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Timeout); 916 HAL_StatusTypeDef HAL_LPTIM_TimeOut_Stop_IT(LPTIM_HandleTypeDef *hlptim); 917 918 /* ############################## Counter Mode ###############################*/ 919 /* Blocking mode: Polling */ 920 HAL_StatusTypeDef HAL_LPTIM_Counter_Start(LPTIM_HandleTypeDef *hlptim); 921 HAL_StatusTypeDef HAL_LPTIM_Counter_Stop(LPTIM_HandleTypeDef *hlptim); 922 /* Non-Blocking mode: Interrupt */ 923 HAL_StatusTypeDef HAL_LPTIM_Counter_Start_IT(LPTIM_HandleTypeDef *hlptim); 924 HAL_StatusTypeDef HAL_LPTIM_Counter_Stop_IT(LPTIM_HandleTypeDef *hlptim); 925 926 /* ############################## Input Capture Mode ###############################*/ 927 /* Blocking mode: Polling */ 928 HAL_StatusTypeDef HAL_LPTIM_IC_ConfigChannel(LPTIM_HandleTypeDef *hlptim, const LPTIM_IC_ConfigTypeDef *sConfig, 929 uint32_t Channel); 930 HAL_StatusTypeDef HAL_LPTIM_IC_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 931 HAL_StatusTypeDef HAL_LPTIM_IC_Stop(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 932 /* Non-Blocking mode: Interrupt */ 933 HAL_StatusTypeDef HAL_LPTIM_IC_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 934 HAL_StatusTypeDef HAL_LPTIM_IC_Stop_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 935 HAL_StatusTypeDef HAL_LPTIM_IC_Start_DMA(LPTIM_HandleTypeDef *hlptim, uint32_t Channel, uint32_t *pData, 936 uint32_t Length); 937 HAL_StatusTypeDef HAL_LPTIM_IC_Stop_DMA(LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 938 /** 939 * @} 940 */ 941 942 /** @addtogroup LPTIM_Exported_Functions_Group3 943 * @brief Read operation functions. 944 * @{ 945 */ 946 /* Reading operation functions ************************************************/ 947 uint32_t HAL_LPTIM_ReadCounter(const LPTIM_HandleTypeDef *hlptim); 948 uint32_t HAL_LPTIM_ReadAutoReload(const LPTIM_HandleTypeDef *hlptim); 949 uint32_t HAL_LPTIM_ReadCapturedValue(const LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 950 uint8_t HAL_LPTIM_IC_GetOffset(const LPTIM_HandleTypeDef *hlptim, uint32_t Channel); 951 /** 952 * @} 953 */ 954 955 /** @addtogroup LPTIM_Exported_Functions_Group4 956 * @brief LPTIM IRQ handler and callback functions. 957 * @{ 958 */ 959 /* LPTIM IRQ functions *******************************************************/ 960 void HAL_LPTIM_IRQHandler(LPTIM_HandleTypeDef *hlptim); 961 962 /* CallBack functions ********************************************************/ 963 void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim); 964 void HAL_LPTIM_AutoReloadMatchCallback(LPTIM_HandleTypeDef *hlptim); 965 void HAL_LPTIM_TriggerCallback(LPTIM_HandleTypeDef *hlptim); 966 void HAL_LPTIM_CompareWriteCallback(LPTIM_HandleTypeDef *hlptim); 967 void HAL_LPTIM_AutoReloadWriteCallback(LPTIM_HandleTypeDef *hlptim); 968 void HAL_LPTIM_DirectionUpCallback(LPTIM_HandleTypeDef *hlptim); 969 void HAL_LPTIM_DirectionDownCallback(LPTIM_HandleTypeDef *hlptim); 970 void HAL_LPTIM_ErrorCallback(LPTIM_HandleTypeDef *hlptim); 971 void HAL_LPTIM_UpdateEventCallback(LPTIM_HandleTypeDef *hlptim); 972 void HAL_LPTIM_UpdateEventHalfCpltCallback(LPTIM_HandleTypeDef *hlptim); 973 void HAL_LPTIM_RepCounterWriteCallback(LPTIM_HandleTypeDef *hlptim); 974 void HAL_LPTIM_IC_CaptureCallback(LPTIM_HandleTypeDef *hlptim); 975 void HAL_LPTIM_IC_CaptureHalfCpltCallback(LPTIM_HandleTypeDef *hlptim); 976 void HAL_LPTIM_IC_OverCaptureCallback(LPTIM_HandleTypeDef *hlptim); 977 978 /* Callbacks Register/UnRegister functions ***********************************/ 979 #if (USE_HAL_LPTIM_REGISTER_CALLBACKS == 1) 980 HAL_StatusTypeDef HAL_LPTIM_RegisterCallback(LPTIM_HandleTypeDef *lphtim, HAL_LPTIM_CallbackIDTypeDef CallbackID, 981 pLPTIM_CallbackTypeDef pCallback); 982 HAL_StatusTypeDef HAL_LPTIM_UnRegisterCallback(LPTIM_HandleTypeDef *lphtim, HAL_LPTIM_CallbackIDTypeDef CallbackID); 983 #endif /* USE_HAL_LPTIM_REGISTER_CALLBACKS */ 984 /** 985 * @} 986 */ 987 988 /** @addtogroup LPTIM_Group5 989 * @brief Peripheral State functions. 990 * @{ 991 */ 992 /* Peripheral State functions ************************************************/ 993 HAL_LPTIM_StateTypeDef HAL_LPTIM_GetState(const LPTIM_HandleTypeDef *hlptim); 994 /** 995 * @} 996 */ 997 998 /** 999 * @} 1000 */ 1001 1002 /* Private types -------------------------------------------------------------*/ 1003 /** @defgroup LPTIM_Private_Types LPTIM Private Types 1004 * @{ 1005 */ 1006 1007 /** 1008 * @} 1009 */ 1010 1011 /* Private variables ---------------------------------------------------------*/ 1012 /** @defgroup LPTIM_Private_Variables LPTIM Private Variables 1013 * @{ 1014 */ 1015 1016 /** 1017 * @} 1018 */ 1019 1020 /* Private constants ---------------------------------------------------------*/ 1021 /** @defgroup LPTIM_Private_Constants LPTIM Private Constants 1022 * @{ 1023 */ 1024 1025 /** 1026 * @} 1027 */ 1028 1029 /* Private macros ------------------------------------------------------------*/ 1030 /** @defgroup LPTIM_Private_Macros LPTIM Private Macros 1031 * @{ 1032 */ 1033 1034 #define IS_LPTIM_CLOCK_SOURCE(__SOURCE__) (((__SOURCE__) == LPTIM_CLOCKSOURCE_ULPTIM) || \ 1035 ((__SOURCE__) == LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC)) 1036 1037 1038 #define IS_LPTIM_CLOCK_PRESCALER(__PRESCALER__) (((__PRESCALER__) == LPTIM_PRESCALER_DIV1 ) || \ 1039 ((__PRESCALER__) == LPTIM_PRESCALER_DIV2 ) || \ 1040 ((__PRESCALER__) == LPTIM_PRESCALER_DIV4 ) || \ 1041 ((__PRESCALER__) == LPTIM_PRESCALER_DIV8 ) || \ 1042 ((__PRESCALER__) == LPTIM_PRESCALER_DIV16 ) || \ 1043 ((__PRESCALER__) == LPTIM_PRESCALER_DIV32 ) || \ 1044 ((__PRESCALER__) == LPTIM_PRESCALER_DIV64 ) || \ 1045 ((__PRESCALER__) == LPTIM_PRESCALER_DIV128)) 1046 1047 #define IS_LPTIM_CLOCK_PRESCALERDIV1(__PRESCALER__) ((__PRESCALER__) == LPTIM_PRESCALER_DIV1) 1048 #define IS_LPTIM_CLOCK_SAMPLE_TIME(__SAMPLETIME__) (((__SAMPLETIME__) == LPTIM_CLOCKSAMPLETIME_DIRECTTRANSITION) || \ 1049 ((__SAMPLETIME__) == LPTIM_CLOCKSAMPLETIME_2TRANSITIONS) || \ 1050 ((__SAMPLETIME__) == LPTIM_CLOCKSAMPLETIME_4TRANSITIONS) || \ 1051 ((__SAMPLETIME__) == LPTIM_CLOCKSAMPLETIME_8TRANSITIONS)) 1052 1053 #define IS_LPTIM_CLOCK_POLARITY(__POLARITY__) (((__POLARITY__) == LPTIM_CLOCKPOLARITY_RISING) || \ 1054 ((__POLARITY__) == LPTIM_CLOCKPOLARITY_FALLING) || \ 1055 ((__POLARITY__) == LPTIM_CLOCKPOLARITY_RISING_FALLING)) 1056 1057 #define IS_LPTIM_TRG_SOURCE(__TRIG__) (((__TRIG__) == LPTIM_TRIGSOURCE_SOFTWARE) || \ 1058 ((__TRIG__) == LPTIM_TRIGSOURCE_0) || \ 1059 ((__TRIG__) == LPTIM_TRIGSOURCE_1) || \ 1060 ((__TRIG__) == LPTIM_TRIGSOURCE_2) || \ 1061 ((__TRIG__) == LPTIM_TRIGSOURCE_3) || \ 1062 ((__TRIG__) == LPTIM_TRIGSOURCE_4) || \ 1063 ((__TRIG__) == LPTIM_TRIGSOURCE_5) || \ 1064 ((__TRIG__) == LPTIM_TRIGSOURCE_6) || \ 1065 ((__TRIG__) == LPTIM_TRIGSOURCE_7)) 1066 1067 #define IS_LPTIM_EXT_TRG_POLARITY(__POLARITY__) (((__POLARITY__) == LPTIM_ACTIVEEDGE_RISING ) || \ 1068 ((__POLARITY__) == LPTIM_ACTIVEEDGE_FALLING ) || \ 1069 ((__POLARITY__) == LPTIM_ACTIVEEDGE_RISING_FALLING )) 1070 1071 #define IS_LPTIM_TRIG_SAMPLE_TIME(__SAMPLETIME__) (((__SAMPLETIME__) == LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION) || \ 1072 ((__SAMPLETIME__) == LPTIM_TRIGSAMPLETIME_2TRANSITIONS ) || \ 1073 ((__SAMPLETIME__) == LPTIM_TRIGSAMPLETIME_4TRANSITIONS ) || \ 1074 ((__SAMPLETIME__) == LPTIM_TRIGSAMPLETIME_8TRANSITIONS )) 1075 1076 #define IS_LPTIM_UPDATE_MODE(__MODE__) (((__MODE__) == LPTIM_UPDATE_IMMEDIATE) || \ 1077 ((__MODE__) == LPTIM_UPDATE_ENDOFPERIOD)) 1078 1079 #define IS_LPTIM_COUNTER_SOURCE(__SOURCE__) (((__SOURCE__) == LPTIM_COUNTERSOURCE_INTERNAL) || \ 1080 ((__SOURCE__) == LPTIM_COUNTERSOURCE_EXTERNAL)) 1081 1082 #define IS_LPTIM_COMPARE(__COMPARE__) ((__COMPARE__) <= 0x0000FFFFUL) 1083 1084 #define IS_LPTIM_PERIOD(__PERIOD__) ((0x00000001UL <= (__PERIOD__)) &&\ 1085 ((__PERIOD__) <= 0x0000FFFFUL)) 1086 1087 #define IS_LPTIM_PULSE(__PULSE__) ((__PULSE__) <= 0x0000FFFFUL) 1088 1089 #define IS_LPTIM_OC_POLARITY(__OCPOLARITY__) (((__OCPOLARITY__) == LPTIM_OCPOLARITY_LOW) || \ 1090 ((__OCPOLARITY__) == LPTIM_OCPOLARITY_HIGH)) 1091 #define IS_LPTIM_IC_PRESCALER(__PRESCALER__) (((__PRESCALER__) == LPTIM_ICPSC_DIV1) ||\ 1092 ((__PRESCALER__) == LPTIM_ICPSC_DIV2) ||\ 1093 ((__PRESCALER__) == LPTIM_ICPSC_DIV4) ||\ 1094 ((__PRESCALER__) == LPTIM_ICPSC_DIV8)) 1095 1096 #define IS_LPTIM_IC_POLARITY(__POLARITY__) (((__POLARITY__) == LPTIM_ICPOLARITY_RISING) || \ 1097 ((__POLARITY__) == LPTIM_ICPOLARITY_FALLING) ||\ 1098 ((__POLARITY__) == LPTIM_ICPOLARITY_RISING_FALLING)) 1099 1100 #define IS_LPTIM_IC_FILTER(__FILTER__) (((__FILTER__) == LPTIM_ICFLT_CLOCK_DIV1) ||\ 1101 ((__FILTER__) == LPTIM_ICFLT_CLOCK_DIV2) ||\ 1102 ((__FILTER__) == LPTIM_ICFLT_CLOCK_DIV4) ||\ 1103 ((__FILTER__) == LPTIM_ICFLT_CLOCK_DIV8)) 1104 1105 #define IS_LPTIM_REPETITION(__REPETITION__) ((__REPETITION__) <= 0x000000FFUL) 1106 1107 #define IS_LPTIM_INPUT1_SOURCE(__INSTANCE__, __SOURCE__) \ 1108 ((((__INSTANCE__) == LPTIM1) || \ 1109 ((__INSTANCE__) == LPTIM2) || \ 1110 ((__INSTANCE__) == LPTIM3) || \ 1111 ((__INSTANCE__) == LPTIM4)) && \ 1112 (((__SOURCE__) == LPTIM_INPUT1SOURCE_GPIO) || \ 1113 ((__SOURCE__) == LPTIM_INPUT1SOURCE_COMP1))) 1114 1115 #if defined(COMP2) 1116 #define IS_LPTIM_INPUT2_SOURCE(__INSTANCE__, __SOURCE__) \ 1117 ((((__INSTANCE__) == LPTIM1) || \ 1118 ((__INSTANCE__) == LPTIM2)) && \ 1119 (((__SOURCE__) == LPTIM_INPUT2SOURCE_GPIO) || \ 1120 ((__SOURCE__) == LPTIM_INPUT2SOURCE_COMP2))) 1121 #else 1122 #define IS_LPTIM_INPUT2_SOURCE(__INSTANCE__, __SOURCE__) \ 1123 ((((__INSTANCE__) == LPTIM1) || \ 1124 ((__INSTANCE__) == LPTIM2)) && \ 1125 (((__SOURCE__) == LPTIM_INPUT2SOURCE_GPIO))) 1126 #endif /* COMP2 */ 1127 1128 #if defined(COMP2) 1129 #define IS_LPTIM_IC1_SOURCE(__INSTANCE__, __SOURCE__) \ 1130 ((((__INSTANCE__) == LPTIM1) || \ 1131 ((__INSTANCE__) == LPTIM2)|| \ 1132 ((__INSTANCE__) == LPTIM3)) && \ 1133 (((__SOURCE__) == LPTIM_IC1SOURCE_GPIO) || \ 1134 ((__SOURCE__) == LPTIM_IC1SOURCE_COMP1) || \ 1135 ((__SOURCE__) == LPTIM_IC1SOURCE_COMP2))) 1136 #else 1137 #define IS_LPTIM_IC1_SOURCE(__INSTANCE__, __SOURCE__) \ 1138 ((((__INSTANCE__) == LPTIM1) || \ 1139 ((__INSTANCE__) == LPTIM2)|| \ 1140 ((__INSTANCE__) == LPTIM3)) && \ 1141 (((__SOURCE__) == LPTIM_IC1SOURCE_GPIO) || \ 1142 ((__SOURCE__) == LPTIM_IC1SOURCE_COMP1))) 1143 #endif /* COMP2 */ 1144 1145 #define IS_LPTIM_IC2_SOURCE(__INSTANCE__, __SOURCE__) \ 1146 ((((__INSTANCE__) == LPTIM1) && \ 1147 (((__SOURCE__) == LPTIM_IC2SOURCE_GPIO) || \ 1148 ((__SOURCE__) == LPTIM_IC2SOURCE_LSI) || \ 1149 ((__SOURCE__) == LPTIM_IC2SOURCE_LSE))) \ 1150 || \ 1151 (((__INSTANCE__) == LPTIM2) && \ 1152 (((__SOURCE__) == LPTIM_IC2SOURCE_GPIO) || \ 1153 ((__SOURCE__) == LPTIM_IC2SOURCE_HSI_256) || \ 1154 ((__SOURCE__) == LPTIM_IC2SOURCE_MSIS_1024)|| \ 1155 ((__SOURCE__) == LPTIM_IC2SOURCE_MSIS_4))) \ 1156 || \ 1157 (((__INSTANCE__) == LPTIM3) && \ 1158 ((__SOURCE__) == LPTIM_IC2SOURCE_GPIO))) 1159 1160 #define LPTIM_CHANNEL_STATE_GET(__INSTANCE__, __CHANNEL__)\ 1161 (((__CHANNEL__) == LPTIM_CHANNEL_1) ? (__INSTANCE__)->ChannelState[0] :\ 1162 (__INSTANCE__)->ChannelState[1]) 1163 1164 #define LPTIM_CHANNEL_STATE_SET(__INSTANCE__, __CHANNEL__, __CHANNEL_STATE__) \ 1165 (((__CHANNEL__) == LPTIM_CHANNEL_1) ? ((__INSTANCE__)->ChannelState[0] = (__CHANNEL_STATE__)) :\ 1166 ((__INSTANCE__)->ChannelState[1] = (__CHANNEL_STATE__))) 1167 1168 #define LPTIM_CHANNEL_STATE_SET_ALL(__INSTANCE__, __CHANNEL_STATE__) do { \ 1169 (__INSTANCE__)->ChannelState[0] =\ 1170 (__CHANNEL_STATE__); \ 1171 (__INSTANCE__)->ChannelState[1] =\ 1172 (__CHANNEL_STATE__); \ 1173 } while(0) 1174 1175 #define IS_LPTIM_CCX_INSTANCE(__INSTANCE__, __CHANNEL__) \ 1176 (((((__INSTANCE__) == LPTIM1_NS) || ((__INSTANCE__) == LPTIM1_S)) && \ 1177 (((__CHANNEL__) == LPTIM_CHANNEL_1) || \ 1178 ((__CHANNEL__) == LPTIM_CHANNEL_2))) \ 1179 || \ 1180 ((((__INSTANCE__) == LPTIM2_NS) || ((__INSTANCE__) == LPTIM2_S)) && \ 1181 (((__CHANNEL__) == LPTIM_CHANNEL_1) || \ 1182 ((__CHANNEL__) == LPTIM_CHANNEL_2))) \ 1183 || \ 1184 ((((__INSTANCE__) == LPTIM3_NS) || ((__INSTANCE__) == LPTIM3_S)) && \ 1185 (((__CHANNEL__) == LPTIM_CHANNEL_1) || \ 1186 ((__CHANNEL__) == LPTIM_CHANNEL_2))) \ 1187 || \ 1188 ((((__INSTANCE__) == LPTIM4_NS) || ((__INSTANCE__) == LPTIM4_S)) && \ 1189 ((__CHANNEL__) == LPTIM_CHANNEL_1))) 1190 /** 1191 * @} 1192 */ 1193 1194 /* Private functions ---------------------------------------------------------*/ 1195 /** @defgroup LPTIM_Private_Functions LPTIM Private Functions 1196 * @{ 1197 */ 1198 /** 1199 * @} 1200 */ 1201 1202 /** 1203 * @} 1204 */ 1205 1206 #endif /* LPTIM1 || LPTIM2 || LPTIM3 || LPTIM4 */ 1207 /** 1208 * @} 1209 */ 1210 1211 #ifdef __cplusplus 1212 } 1213 #endif 1214 1215 #endif /* STM32U5xx_HAL_LPTIM_H */ 1216