1 /** 2 ****************************************************************************** 3 * @file stm32l1xx_hal_comp.h 4 * @author MCD Application Team 5 * @brief Header file of COMP HAL module. 6 ****************************************************************************** 7 * @attention 8 * 9 * <h2><center>© Copyright (c) 2017 STMicroelectronics. 10 * All rights reserved.</center></h2> 11 * 12 * This software component is licensed by ST under BSD 3-Clause license, 13 * the "License"; You may not use this file except in compliance with the 14 * License. You may obtain a copy of the License at: 15 * opensource.org/licenses/BSD-3-Clause 16 * 17 ****************************************************************************** 18 */ 19 20 /* Define to prevent recursive inclusion -------------------------------------*/ 21 #ifndef __STM32L1xx_HAL_COMP_H 22 #define __STM32L1xx_HAL_COMP_H 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 /* Includes ------------------------------------------------------------------*/ 29 #include "stm32l1xx_hal_def.h" 30 31 /** @addtogroup STM32L1xx_HAL_Driver 32 * @{ 33 */ 34 35 /** @addtogroup COMP 36 * @{ 37 */ 38 39 /* Exported types ------------------------------------------------------------*/ 40 /** @defgroup COMP_Exported_Types COMP Exported Types 41 * @{ 42 */ 43 44 /** 45 * @brief COMP Init structure definition 46 */ 47 typedef struct 48 { 49 50 uint32_t InvertingInput; /*!< Selects the inverting input of the comparator. 51 This parameter can be a value of @ref COMP_InvertingInput 52 Note: Inverting input can be changed on the fly, while comparator is running. 53 Note: This feature is available on COMP2 only. If COMP1 is selected, this parameter is discarded (On COMP1, inverting input is fixed to Vrefint). */ 54 55 uint32_t NonInvertingInput; /*!< Selects the non inverting input of the comparator. 56 This parameter can be a value of @ref COMPEx_NonInvertingInput */ 57 58 uint32_t Output; /*!< Selects the output redirection of the comparator. 59 This parameter can be a value of @ref COMP_Output 60 Note: This feature is available on COMP2 only. If COMP1 is selected, this parameter is discarded. */ 61 62 uint32_t Mode; /*!< Selects the operating consumption mode of the comparator 63 to adjust the speed/consumption. 64 This parameter can be a value of @ref COMP_Mode 65 Note: This feature is available on COMP2 only. If COMP1 is selected, this parameter is discarded. */ 66 67 uint32_t WindowMode; /*!< Selects the window mode of the 2 comparators. 68 If enabled, non-inverting inputs of the 2 comparators are connected together and are using inputs of COMP2 only (COMP1 non-inverting input is no more accessible, even from ADC channel VCOMP). 69 This parameter can be a value of @ref COMP_WindowMode 70 Note: This feature must be enabled from COMP2 instance. If COMP1 is selected, this parameter is discarded. */ 71 72 uint32_t TriggerMode; /*!< Selects the trigger mode of the comparator when using interruption on EXTI line (interrupt mode). 73 This parameter can be a value of @ref COMP_TriggerMode 74 Note: This feature is used with function "HAL_COMP_Start_IT()". In all other functions, this parameter is discarded. */ 75 76 uint32_t NonInvertingInputPull; /*!< Selects the internal pulling resistor connected on non inverting input. 77 This parameter can be a value of @ref COMP_NonInvertingInputPull 78 Note: To avoid extra power consumption, only one resistor should be enabled at a time. 79 Note: This feature is available on COMP1 only. If COMP2 is selected, this parameter is discarded. */ 80 81 }COMP_InitTypeDef; 82 83 /** 84 * @brief HAL State structures definition 85 */ 86 typedef enum 87 { 88 HAL_COMP_STATE_RESET = 0x00, /*!< COMP not yet initialized or disabled */ 89 HAL_COMP_STATE_READY = 0x01, /*!< COMP initialized and ready for use */ 90 HAL_COMP_STATE_READY_LOCKED = 0x11, /*!< COMP initialized but the configuration is locked */ 91 HAL_COMP_STATE_BUSY = 0x02, /*!< COMP is running */ 92 HAL_COMP_STATE_BUSY_LOCKED = 0x12 /*!< COMP is running and the configuration is locked */ 93 }HAL_COMP_StateTypeDef; 94 95 /** 96 * @brief COMP Handle Structure definition 97 */ 98 typedef struct __COMP_HandleTypeDef 99 { 100 COMP_TypeDef *Instance; /*!< Register base address */ 101 COMP_InitTypeDef Init; /*!< COMP required parameters */ 102 HAL_LockTypeDef Lock; /*!< Locking object */ 103 __IO HAL_COMP_StateTypeDef State; /*!< COMP communication state */ 104 __IO uint32_t ErrorCode; /*!< COMP Error code */ 105 #if (USE_HAL_COMP_REGISTER_CALLBACKS == 1) 106 void (* TriggerCallback)(struct __COMP_HandleTypeDef *hcomp); /*!< COMP trigger callback */ 107 void (* MspInitCallback)(struct __COMP_HandleTypeDef *hcomp); /*!< COMP Msp Init callback */ 108 void (* MspDeInitCallback)(struct __COMP_HandleTypeDef *hcomp); /*!< COMP Msp DeInit callback */ 109 #endif /* USE_HAL_COMP_REGISTER_CALLBACKS */ 110 } COMP_HandleTypeDef; 111 112 #if (USE_HAL_COMP_REGISTER_CALLBACKS == 1) 113 /** 114 * @brief HAL COMP Callback ID enumeration definition 115 */ 116 typedef enum 117 { 118 HAL_COMP_TRIGGER_CB_ID = 0x00U, /*!< COMP trigger callback ID */ 119 HAL_COMP_MSPINIT_CB_ID = 0x01U, /*!< COMP Msp Init callback ID */ 120 HAL_COMP_MSPDEINIT_CB_ID = 0x02U /*!< COMP Msp DeInit callback ID */ 121 } HAL_COMP_CallbackIDTypeDef; 122 123 /** 124 * @brief HAL COMP Callback pointer definition 125 */ 126 typedef void (*pCOMP_CallbackTypeDef)(COMP_HandleTypeDef *hcomp); /*!< pointer to a COMP callback function */ 127 128 #endif /* USE_HAL_COMP_REGISTER_CALLBACKS */ 129 130 /** 131 * @} 132 */ 133 134 /* Exported constants --------------------------------------------------------*/ 135 /** @defgroup COMP_Exported_Constants COMP Exported Constants 136 * @{ 137 */ 138 139 /** @defgroup COMP_Error_Code COMP Error Code 140 * @{ 141 */ 142 #define HAL_COMP_ERROR_NONE (0x00U) /*!< No error */ 143 #if (USE_HAL_COMP_REGISTER_CALLBACKS == 1) 144 #define HAL_COMP_ERROR_INVALID_CALLBACK (0x01U) /*!< Invalid Callback error */ 145 #endif /* USE_HAL_COMP_REGISTER_CALLBACKS */ 146 /** 147 * @} 148 */ 149 150 /** @defgroup COMP_Output COMP Output 151 * @{ 152 */ 153 #define COMP_OUTPUT_TIM2IC4 (0x00000000U) /*!< COMP2 output connected to TIM2 Input Capture 4 */ 154 #define COMP_OUTPUT_TIM2OCREFCLR ( COMP_CSR_OUTSEL_0) /*!< COMP2 output connected to TIM2 OCREF Clear */ 155 #define COMP_OUTPUT_TIM3IC4 ( COMP_CSR_OUTSEL_1 ) /*!< COMP2 output connected to TIM3 Input Capture 4 */ 156 #define COMP_OUTPUT_TIM3OCREFCLR ( COMP_CSR_OUTSEL_1 | COMP_CSR_OUTSEL_0) /*!< COMP2 output connected to TIM3 OCREF Clear */ 157 #define COMP_OUTPUT_TIM4IC4 (COMP_CSR_OUTSEL_2 ) /*!< COMP2 output connected to TIM4 Input Capture 4 */ 158 #define COMP_OUTPUT_TIM4OCREFCLR (COMP_CSR_OUTSEL_2 | COMP_CSR_OUTSEL_0) /*!< COMP2 output connected to TIM4 OCREF Clear */ 159 #define COMP_OUTPUT_TIM10IC1 (COMP_CSR_OUTSEL_2 | COMP_CSR_OUTSEL_1 ) /*!< COMP2 output connected to TIM10 Input Capture 1 */ 160 #define COMP_OUTPUT_NONE (COMP_CSR_OUTSEL_2 | COMP_CSR_OUTSEL_1 | COMP_CSR_OUTSEL_0) /*!< COMP2 output is not connected to other peripherals */ 161 162 #define IS_COMP_OUTPUT(OUTPUT) (((OUTPUT) == COMP_OUTPUT_TIM2IC4) || \ 163 ((OUTPUT) == COMP_OUTPUT_TIM2OCREFCLR) || \ 164 ((OUTPUT) == COMP_OUTPUT_TIM3IC4) || \ 165 ((OUTPUT) == COMP_OUTPUT_TIM3OCREFCLR) || \ 166 ((OUTPUT) == COMP_OUTPUT_TIM4IC4) || \ 167 ((OUTPUT) == COMP_OUTPUT_TIM4OCREFCLR) || \ 168 ((OUTPUT) == COMP_OUTPUT_TIM10IC1) || \ 169 ((OUTPUT) == COMP_OUTPUT_NONE) ) 170 /** 171 * @} 172 */ 173 174 /** @defgroup COMP_InvertingInput COMP InvertingInput 175 * @{ 176 */ 177 /* Inverting Input specific to COMP2 */ 178 #define COMP_INVERTINGINPUT_IO ( COMP_CSR_INSEL_0) /*!< External I/O (COMP2_INM connected to pin PB3) connected to comparator 2 inverting input */ 179 #define COMP_INVERTINGINPUT_VREFINT ( COMP_CSR_INSEL_1 ) /*!< VREFINT connected to comparator 2 inverting input */ 180 #define COMP_INVERTINGINPUT_3_4VREFINT ( COMP_CSR_INSEL_1 | COMP_CSR_INSEL_0) /*!< 3/4 VREFINT connected to comparator 2 inverting input */ 181 #define COMP_INVERTINGINPUT_1_2VREFINT (COMP_CSR_INSEL_2 ) /*!< 1/2 VREFINT connected to comparator 2 inverting input */ 182 #define COMP_INVERTINGINPUT_1_4VREFINT (COMP_CSR_INSEL_2 | COMP_CSR_INSEL_0) /*!< 1/4 VREFINT connected to comparator 2 inverting input */ 183 #define COMP_INVERTINGINPUT_DAC1 (COMP_CSR_INSEL_2 | COMP_CSR_INSEL_1 ) /*!< DAC_OUT1 (PA4) connected to comparator 2 inverting input */ 184 #define COMP_INVERTINGINPUT_DAC2 (COMP_CSR_INSEL_2 | COMP_CSR_INSEL_1 | COMP_CSR_INSEL_0) /*!< DAC2_OUT (PA5) connected to comparator 2 inverting input */ 185 186 #define IS_COMP_INVERTINGINPUT(INPUT) (((INPUT) == COMP_INVERTINGINPUT_IO) || \ 187 ((INPUT) == COMP_INVERTINGINPUT_VREFINT) || \ 188 ((INPUT) == COMP_INVERTINGINPUT_3_4VREFINT) || \ 189 ((INPUT) == COMP_INVERTINGINPUT_1_2VREFINT) || \ 190 ((INPUT) == COMP_INVERTINGINPUT_1_4VREFINT) || \ 191 ((INPUT) == COMP_INVERTINGINPUT_DAC1) || \ 192 ((INPUT) == COMP_INVERTINGINPUT_DAC2) ) 193 /** 194 * @} 195 */ 196 197 /** @defgroup COMP_Mode COMP Mode 198 * @{ 199 */ 200 /* Please refer to the electrical characteristics in the device datasheet for 201 the power consumption values */ 202 #define COMP_MODE_LOWSPEED (0x00000000U) /*!< Low Speed */ 203 #define COMP_MODE_HIGHSPEED COMP_CSR_SPEED /*!< High Speed */ 204 205 #define IS_COMP_MODE(SPEED) (((SPEED) == COMP_MODE_LOWSPEED) || \ 206 ((SPEED) == COMP_MODE_HIGHSPEED)) 207 /** 208 * @} 209 */ 210 211 /** @defgroup COMP_WindowMode COMP WindowMode 212 * @{ 213 */ 214 #define COMP_WINDOWMODE_DISABLE (0x00000000U) /*!< Window mode disabled: COMP1 non-inverting input is independant */ 215 #define COMP_WINDOWMODE_ENABLE COMP_CSR_WNDWE /*!< Window mode enabled: COMP1 non-inverting input is no more accessible, even from ADC channel VCOMP) (connected to COMP2 non-inverting input) */ 216 217 #define IS_COMP_WINDOWMODE(WINDOWMODE) (((WINDOWMODE) == COMP_WINDOWMODE_DISABLE) || \ 218 ((WINDOWMODE) == COMP_WINDOWMODE_ENABLE)) 219 /** 220 * @} 221 */ 222 223 /** @defgroup COMP_OutputLevel COMP OutputLevel 224 * @{ 225 */ 226 /* Comparator output is low when the non-inverting input is at a lower */ 227 /* voltage than the inverting input. */ 228 #define COMP_OUTPUTLEVEL_LOW (0x00000000U) 229 230 /* Comparator output is high when the non-inverting input is at a higher */ 231 /* voltage than the inverting input. */ 232 #define COMP_OUTPUTLEVEL_HIGH (0x00000001U) 233 /** 234 * @} 235 */ 236 237 /** @defgroup COMP_TriggerMode COMP TriggerMode 238 * @{ 239 */ 240 #define COMP_TRIGGERMODE_NONE (0x00000000U) /*!< No External Interrupt trigger detection */ 241 #define COMP_TRIGGERMODE_IT_RISING (0x00000001U) /*!< External Interrupt Mode with Rising edge trigger detection */ 242 #define COMP_TRIGGERMODE_IT_FALLING (0x00000002U) /*!< External Interrupt Mode with Falling edge trigger detection */ 243 #define COMP_TRIGGERMODE_IT_RISING_FALLING (0x00000003U) /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ 244 245 #define IS_COMP_TRIGGERMODE(MODE) (((MODE) == COMP_TRIGGERMODE_NONE) || \ 246 ((MODE) == COMP_TRIGGERMODE_IT_RISING) || \ 247 ((MODE) == COMP_TRIGGERMODE_IT_FALLING) || \ 248 ((MODE) == COMP_TRIGGERMODE_IT_RISING_FALLING) ) 249 /** 250 * @} 251 */ 252 253 /** @defgroup COMP_ExtiLineEvent COMP ExtiLineEvent 254 * @{ 255 */ 256 #define COMP_EXTI_LINE_COMP1 EXTI_RTSR_TR21 /*!< External interrupt line 21 Connected to COMP1 */ 257 #define COMP_EXTI_LINE_COMP2 EXTI_RTSR_TR22 /*!< External interrupt line 22 Connected to COMP2 */ 258 259 /** 260 * @} 261 */ 262 263 /** @defgroup COMP_NonInvertingInputPull COMP NonInvertingInputPull 264 * @{ 265 */ 266 #define COMP_NONINVERTINGINPUT_NOPULL (0x00000000U) /*!< No internal pull-up or pull-down resistor connected to comparator non inverting input */ 267 #define COMP_NONINVERTINGINPUT_10KPU COMP_CSR_10KPU /*!< Internal 10kOhm pull-up resistor connected to comparator non inverting input */ 268 #define COMP_NONINVERTINGINPUT_10KPD COMP_CSR_10KPD /*!< Internal 10kOhm pull-down resistor connected to comparator non inverting input */ 269 #define COMP_NONINVERTINGINPUT_400KPU COMP_CSR_400KPU /*!< Internal 400kOhm pull-up resistor connected to comparator non inverting input */ 270 #define COMP_NONINVERTINGINPUT_400KPD COMP_CSR_400KPD /*!< Internal 400kOhm pull-down resistor connected to comparator non inverting input */ 271 272 #define IS_COMP_NONINVERTINGINPUTPULL(INPUT) (((INPUT) == COMP_NONINVERTINGINPUT_NOPULL) || \ 273 ((INPUT) == COMP_NONINVERTINGINPUT_10KPU) || \ 274 ((INPUT) == COMP_NONINVERTINGINPUT_10KPD) || \ 275 ((INPUT) == COMP_NONINVERTINGINPUT_400KPU) || \ 276 ((INPUT) == COMP_NONINVERTINGINPUT_400KPD) ) 277 /** 278 * @} 279 */ 280 281 /** 282 * @} 283 */ 284 285 286 /* Exported macro ------------------------------------------------------------*/ 287 288 /** @defgroup COMP_Exported_Macro COMP Exported Macro 289 * @{ 290 */ 291 292 /** @defgroup COMP_Handle_Management COMP Handle Management 293 * @{ 294 */ 295 296 /** @brief Reset COMP handle state 297 * @param __HANDLE__ COMP handle. 298 * @retval None 299 */ 300 #if (USE_HAL_COMP_REGISTER_CALLBACKS == 1) 301 #define __HAL_COMP_RESET_HANDLE_STATE(__HANDLE__) do{ \ 302 (__HANDLE__)->State = HAL_COMP_STATE_RESET; \ 303 (__HANDLE__)->MspInitCallback = NULL; \ 304 (__HANDLE__)->MspDeInitCallback = NULL; \ 305 } while(0) 306 #else 307 #define __HAL_COMP_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_COMP_STATE_RESET) 308 #endif 309 310 /** 311 * @brief Clear COMP error code (set it to no error code "HAL_COMP_ERROR_NONE"). 312 * @param __HANDLE__ COMP handle 313 * @retval None 314 */ 315 #define COMP_CLEAR_ERRORCODE(__HANDLE__) ((__HANDLE__)->ErrorCode = HAL_COMP_ERROR_NONE) 316 317 /** 318 * @brief Enables the specified comparator 319 * @param __HANDLE__ COMP handle. 320 * @retval None. 321 */ 322 #define __HAL_COMP_ENABLE(__HANDLE__) \ 323 ( ( ((__HANDLE__)->Instance == COMP1) \ 324 )? \ 325 SET_BIT(COMP->CSR, COMP_CSR_CMP1EN) \ 326 : \ 327 MODIFY_REG(COMP->CSR, COMP_CSR_INSEL, (__HANDLE__)->Init.InvertingInput ) \ 328 ) 329 330 /** 331 * @brief Disables the specified comparator 332 * @param __HANDLE__ COMP handle. 333 * @retval None. 334 */ 335 #define __HAL_COMP_DISABLE(__HANDLE__) \ 336 ( ( ((__HANDLE__)->Instance == COMP1) \ 337 )? \ 338 CLEAR_BIT(COMP->CSR, COMP_CSR_CMP1EN) \ 339 : \ 340 CLEAR_BIT(COMP->CSR, COMP_CSR_INSEL) \ 341 ) 342 343 /** @brief Checks whether the specified COMP flag is set or not. 344 * @param __HANDLE__ specifies the COMP Handle. 345 * @param __FLAG__ specifies the flag to check. 346 * This parameter can be one of the following values: 347 * @arg COMP_FLAG_LOCK: lock flag 348 * @retval The new state of __FLAG__ (TRUE or FALSE). 349 */ 350 #define __HAL_COMP_GET_FLAG(__HANDLE__, __FLAG__) (READ_BIT((__HANDLE__)->Instance->CSR, (__FLAG__)) == (__FLAG__)) 351 352 /** 353 * @brief Enable the COMP1 EXTI line rising edge trigger. 354 * @retval None 355 */ 356 #define __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR, COMP_EXTI_LINE_COMP1) 357 358 /** 359 * @brief Disable the COMP1 EXTI line rising edge trigger. 360 * @retval None 361 */ 362 #define __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR, COMP_EXTI_LINE_COMP1) 363 364 /** 365 * @brief Enable the COMP1 EXTI line falling edge trigger. 366 * @retval None 367 */ 368 #define __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR, COMP_EXTI_LINE_COMP1) 369 370 /** 371 * @brief Disable the COMP1 EXTI line falling edge trigger. 372 * @retval None 373 */ 374 #define __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR, COMP_EXTI_LINE_COMP1) 375 376 /** 377 * @brief Enable the COMP1 EXTI line rising & falling edge trigger. 378 * @retval None 379 */ 380 #define __HAL_COMP_COMP1_EXTI_ENABLE_RISING_FALLING_EDGE() do { \ 381 __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE(); \ 382 __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE(); \ 383 } while(0) 384 385 /** 386 * @brief Disable the COMP1 EXTI line rising & falling edge trigger. 387 * @retval None 388 */ 389 #define __HAL_COMP_COMP1_EXTI_DISABLE_RISING_FALLING_EDGE() do { \ 390 __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE(); \ 391 __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE(); \ 392 } while(0) 393 394 /** 395 * @brief Enable the COMP1 EXTI line in interrupt mode. 396 * @retval None 397 */ 398 #define __HAL_COMP_COMP1_EXTI_ENABLE_IT() SET_BIT(EXTI->IMR, COMP_EXTI_LINE_COMP1) 399 400 /** 401 * @brief Disable the COMP1 EXTI line in interrupt mode. 402 * @retval None 403 */ 404 #define __HAL_COMP_COMP1_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->IMR, COMP_EXTI_LINE_COMP1) 405 406 /** 407 * @brief Enable the COMP1 EXTI Line in event mode. 408 * @retval None 409 */ 410 #define __HAL_COMP_COMP1_EXTI_ENABLE_EVENT() SET_BIT(EXTI->EMR, COMP_EXTI_LINE_COMP1) 411 412 /** 413 * @brief Disable the COMP1 EXTI Line in event mode. 414 * @retval None 415 */ 416 #define __HAL_COMP_COMP1_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->EMR, COMP_EXTI_LINE_COMP1) 417 418 /** 419 * @brief Check whether the COMP1 EXTI line flag is set or not. 420 * @retval RESET or SET 421 */ 422 #define __HAL_COMP_COMP1_EXTI_GET_FLAG() READ_BIT(EXTI->PR, COMP_EXTI_LINE_COMP1) 423 424 /** 425 * @brief Clear the the COMP1 EXTI flag. 426 * @retval None 427 */ 428 #define __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() WRITE_REG(EXTI->PR, COMP_EXTI_LINE_COMP1) 429 430 /** 431 * @brief Generates a Software interrupt on COMP1 EXTI Line. 432 * @retval None 433 */ 434 #define __HAL_COMP_COMP1_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER, COMP_EXTI_LINE_COMP1) 435 436 /** 437 * @brief Enable the COMP2 EXTI line rising edge trigger. 438 * @retval None 439 */ 440 #define __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR, COMP_EXTI_LINE_COMP2) 441 442 /** 443 * @brief Disable the COMP2 EXTI line rising edge trigger. 444 * @retval None 445 */ 446 #define __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR, COMP_EXTI_LINE_COMP2) 447 448 /** 449 * @brief Enable the COMP2 EXTI line falling edge trigger. 450 * @retval None 451 */ 452 #define __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR, COMP_EXTI_LINE_COMP2) 453 454 /** 455 * @brief Disable the COMP2 EXTI line falling edge trigger. 456 * @retval None 457 */ 458 #define __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR, COMP_EXTI_LINE_COMP2) 459 460 /** 461 * @brief Enable the COMP2 EXTI line rising & falling edge trigger. 462 * @retval None 463 */ 464 #define __HAL_COMP_COMP2_EXTI_ENABLE_RISING_FALLING_EDGE() do { \ 465 __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE(); \ 466 __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE(); \ 467 } while(0) 468 469 /** 470 * @brief Disable the COMP2 EXTI line rising & falling edge trigger. 471 * @retval None 472 */ 473 #define __HAL_COMP_COMP2_EXTI_DISABLE_RISING_FALLING_EDGE() do { \ 474 __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE(); \ 475 __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE(); \ 476 } while(0) 477 478 /** 479 * @brief Enable the COMP2 EXTI line. 480 * @retval None 481 */ 482 #define __HAL_COMP_COMP2_EXTI_ENABLE_IT() SET_BIT(EXTI->IMR, COMP_EXTI_LINE_COMP2) 483 484 /** 485 * @brief Disable the COMP2 EXTI line. 486 * @retval None 487 */ 488 #define __HAL_COMP_COMP2_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->IMR, COMP_EXTI_LINE_COMP2) 489 490 /** 491 * @brief Enable the COMP2 EXTI Line in event mode. 492 * @retval None 493 */ 494 #define __HAL_COMP_COMP2_EXTI_ENABLE_EVENT() SET_BIT(EXTI->EMR, COMP_EXTI_LINE_COMP2) 495 496 /** 497 * @brief Disable the COMP2 EXTI Line in event mode. 498 * @retval None 499 */ 500 #define __HAL_COMP_COMP2_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->EMR, COMP_EXTI_LINE_COMP2) 501 502 /** 503 * @brief Check whether the COMP2 EXTI line flag is set or not. 504 * @retval RESET or SET 505 */ 506 #define __HAL_COMP_COMP2_EXTI_GET_FLAG() READ_BIT(EXTI->PR, COMP_EXTI_LINE_COMP2) 507 508 /** 509 * @brief Clear the the COMP2 EXTI flag. 510 * @retval None 511 */ 512 #define __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() WRITE_REG(EXTI->PR, COMP_EXTI_LINE_COMP2) 513 514 /** 515 * @brief Generates a Software interrupt on COMP1 EXTI Line. 516 * @retval None 517 */ 518 #define __HAL_COMP_COMP2_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER, COMP_EXTI_LINE_COMP2) 519 520 /** 521 * @} 522 */ 523 524 /* Private macro -------------------------------------------------------------*/ 525 526 /** @defgroup COMP_Private_Macro COMP Private Macro 527 * @{ 528 */ 529 530 /** 531 * @brief Get the specified EXTI line for a comparator instance 532 * @param __INSTANCE__ specifies the COMP instance. 533 * @retval value of @ref COMP_ExtiLineEvent 534 */ 535 #define COMP_GET_EXTI_LINE(__INSTANCE__) \ 536 ( ( ((__INSTANCE__) == COMP1) \ 537 )? \ 538 (COMP_EXTI_LINE_COMP1) \ 539 : \ 540 (COMP_EXTI_LINE_COMP2) \ 541 ) 542 543 /** 544 * @brief Select the COMP register CSR bit CMPxOUT corresponding to the 545 * selected COMP instance. 546 * @param __HANDLE__: COMP handle 547 * @retval Comparator register CSR bit COMP_CSR_CMP1OUT or COMP_CSR_CMP2OUT 548 */ 549 #define __COMP_CSR_CMPXOUT(__HANDLE__) \ 550 ( ( ((__HANDLE__)->Instance == COMP1) \ 551 )? \ 552 (COMP_CSR_CMP1OUT) \ 553 : \ 554 (COMP_CSR_CMP2OUT) \ 555 ) 556 557 /** 558 * @brief Verification of COMP state: enabled or disabled 559 * @param __HANDLE__: COMP handle 560 * @retval SET (COMP enabled) or RESET (COMP disabled) 561 */ 562 #define __COMP_IS_ENABLED(__HANDLE__) \ 563 ( ( ((__HANDLE__)->Instance == COMP1) \ 564 )? \ 565 (((READ_BIT(COMP->CSR , COMP_CSR_CMP1EN) == COMP_CSR_CMP1EN) \ 566 ) ? SET : RESET) \ 567 : \ 568 (((READ_BIT(COMP->CSR , COMP_CSR_INSEL) != RESET) \ 569 ) ? SET : RESET) \ 570 ) 571 572 /** 573 * @} 574 */ 575 576 577 /* Include COMP HAL Extension module */ 578 #include "stm32l1xx_hal_comp_ex.h" 579 580 /* Exported functions --------------------------------------------------------*/ 581 /** @addtogroup COMP_Exported_Functions 582 * @{ 583 */ 584 585 /* Initialization and de-initialization functions ******************************/ 586 /** @addtogroup COMP_Exported_Functions_Group1 587 * @{ 588 */ 589 HAL_StatusTypeDef HAL_COMP_Init(COMP_HandleTypeDef *hcomp); 590 HAL_StatusTypeDef HAL_COMP_DeInit (COMP_HandleTypeDef *hcomp); 591 void HAL_COMP_MspInit(COMP_HandleTypeDef *hcomp); 592 void HAL_COMP_MspDeInit(COMP_HandleTypeDef *hcomp); 593 594 #if (USE_HAL_COMP_REGISTER_CALLBACKS == 1) 595 /* Callbacks Register/UnRegister functions ***********************************/ 596 HAL_StatusTypeDef HAL_COMP_RegisterCallback(COMP_HandleTypeDef *hcomp, HAL_COMP_CallbackIDTypeDef CallbackID, pCOMP_CallbackTypeDef pCallback); 597 HAL_StatusTypeDef HAL_COMP_UnRegisterCallback(COMP_HandleTypeDef *hcomp, HAL_COMP_CallbackIDTypeDef CallbackID); 598 #endif /* USE_HAL_COMP_REGISTER_CALLBACKS */ 599 600 /** 601 * @} 602 */ 603 604 /* I/O operation functions *****************************************************/ 605 /** @addtogroup COMP_Exported_Functions_Group2 606 * @{ 607 */ 608 HAL_StatusTypeDef HAL_COMP_Start(COMP_HandleTypeDef *hcomp); 609 HAL_StatusTypeDef HAL_COMP_Stop(COMP_HandleTypeDef *hcomp); 610 HAL_StatusTypeDef HAL_COMP_Start_IT(COMP_HandleTypeDef *hcomp); 611 HAL_StatusTypeDef HAL_COMP_Stop_IT(COMP_HandleTypeDef *hcomp); 612 void HAL_COMP_IRQHandler(COMP_HandleTypeDef *hcomp); 613 /** 614 * @} 615 */ 616 617 /* Peripheral Control functions ************************************************/ 618 /** @addtogroup COMP_Exported_Functions_Group3 619 * @{ 620 */ 621 HAL_StatusTypeDef HAL_COMP_Lock(COMP_HandleTypeDef *hcomp); 622 uint32_t HAL_COMP_GetOutputLevel(COMP_HandleTypeDef *hcomp); 623 624 /* Callback in Interrupt mode */ 625 void HAL_COMP_TriggerCallback(COMP_HandleTypeDef *hcomp); 626 /** 627 * @} 628 */ 629 630 /* Peripheral State functions **************************************************/ 631 /** @addtogroup COMP_Exported_Functions_Group4 632 * @{ 633 */ 634 HAL_COMP_StateTypeDef HAL_COMP_GetState(COMP_HandleTypeDef *hcomp); 635 uint32_t HAL_COMP_GetError(COMP_HandleTypeDef *hcomp); 636 /** 637 * @} 638 */ 639 640 /** 641 * @} 642 */ 643 644 /** 645 * @} 646 */ 647 648 /** 649 * @} 650 */ 651 652 #ifdef __cplusplus 653 } 654 #endif 655 656 #endif /* __STM32L1xx_HAL_COMP_H */ 657 658 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 659