Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:36

0001 /**
0002   ******************************************************************************
0003   * @file    stm32h7xx_hal_opamp.h
0004   * @author  MCD Application Team
0005   * @brief   Header file of OPAMP HAL module.
0006   ******************************************************************************
0007   * @attention
0008   *
0009   * Copyright (c) 2017 STMicroelectronics.
0010   * All rights reserved.
0011   *
0012   * This software is licensed under terms that can be found in the LICENSE file
0013   * in the root directory of this software component.
0014   * If no LICENSE file comes with this software, it is provided AS-IS.
0015   *
0016   ******************************************************************************
0017   */
0018 
0019 /* Define to prevent recursive inclusion -------------------------------------*/
0020 #ifndef STM32H7xx_HAL_OPAMP_H
0021 #define STM32H7xx_HAL_OPAMP_H
0022 
0023 #ifdef __cplusplus
0024  extern "C" {
0025 #endif
0026                   
0027 /* Includes ------------------------------------------------------------------*/
0028 #include "stm32h7xx_hal_def.h"
0029 
0030 /** @addtogroup STM32H7xx_HAL_Driver
0031   * @{
0032   */
0033 
0034 /** @addtogroup OPAMP
0035   * @{
0036   */ 
0037 
0038 /* Exported types ------------------------------------------------------------*/ 
0039 
0040 /** @defgroup OPAMP_Exported_Types OPAMP Exported Types
0041   * @ingroup RTEMSBSPsARMSTM32H7
0042   * @{
0043   */
0044 
0045 /** 
0046   * @brief  OPAMP Init structure definition  
0047   */
0048   
0049 typedef struct
0050 {
0051 
0052   uint32_t PowerMode;                   /*!< Specifies the power mode Normal or High Speed.
0053                                              This parameter must be a value of @ref OPAMP_PowerMode */
0054 
0055   uint32_t Mode;                        /*!< Specifies the OPAMP mode
0056                                              This parameter must be a value of @ref OPAMP_Mode 
0057                                              mode is either Standalone, - Follower or PGA */
0058 
0059   uint32_t InvertingInput;              /*!< Specifies the inverting input in Standalone & PGA modes
0060                                              - In Standalone mode i.e when mode is OPAMP_STANDALONE_MODE
0061                                                  This parameter must be a value of @ref OPAMP_InvertingInput 
0062                                              - In Follower mode i.e when mode is OPAMP_FOLLOWER_MODE
0063                                            & In PGA mode i.e when mode is OPAMP_PGA_MODE 
0064                                                  This parameter is Not Applicable */
0065 
0066   uint32_t NonInvertingInput;           /*!< Specifies the non inverting input of the opamp:
0067                                              This parameter must be a value of @ref OPAMP_NonInvertingInput */
0068 
0069   uint32_t PgaGain;                     /*!< Specifies the gain in PGA mode 
0070                                              i.e. when mode is OPAMP_PGA_MODE. 
0071                                              This parameter must be a value of @ref OPAMP_PgaGain */
0072 
0073   uint32_t PgaConnect;                  /*!< Specifies the inverting pin in PGA mode 
0074                                              i.e. when mode is OPAMP_PGA_MODE 
0075                                              This parameter must be a value of @ref OPAMP_PgaConnect 
0076                                              Either: not connected, connected to VINM0, connected to VINM1
0077                                              (VINM0 or VINM1 are typically used for external filtering) */
0078 
0079   uint32_t UserTrimming;                /*!< Specifies the trimming mode 
0080                                              This parameter must be a value of @ref OPAMP_UserTrimming 
0081                                              UserTrimming is either factory or user trimming.*/
0082 
0083   uint32_t TrimmingValueP;              /*!< Specifies the offset trimming value (PMOS) in Normal Mode
0084                                              i.e. when UserTrimming is OPAMP_TRIMMING_USER. 
0085                                              This parameter must be a number between Min_Data = 0 and Max_Data = 31.
0086                                              16 is typical default value */
0087 
0088   uint32_t TrimmingValueN;              /*!< Specifies the offset trimming value (NMOS) in Normal Mode
0089                                              i.e. when UserTrimming is OPAMP_TRIMMING_USER. 
0090                                              This parameter must be a number between Min_Data = 0 and Max_Data = 31.
0091                                              16 is typical default value */
0092 
0093   uint32_t TrimmingValuePHighSpeed;      /*!< Specifies the offset trimming value (PMOS) in High Speed Mode
0094                                              i.e. when UserTrimming is OPAMP_TRIMMING_USER.
0095                                              This parameter must be a number between Min_Data = 0 and Max_Data = 31.
0096                                              16 is typical default value */
0097 
0098   uint32_t TrimmingValueNHighSpeed;      /*!< Specifies the offset trimming value (NMOS) in High Speed Mode
0099                                              i.e. when UserTrimming is OPAMP_TRIMMING_USER. 
0100                                              This parameter must be a number between Min_Data = 0 and Max_Data = 31.
0101                                              16 is typical default value */
0102 
0103 }OPAMP_InitTypeDef;
0104 
0105 /** 
0106   * @brief  HAL State structures definition  
0107   */ 
0108 
0109 typedef enum
0110 {
0111   HAL_OPAMP_STATE_RESET               = 0x00000000U, /*!< OPAMP is not yet Initialized          */
0112 
0113   HAL_OPAMP_STATE_READY               = 0x00000001U, /*!< OPAMP is initialized and ready for use */
0114   HAL_OPAMP_STATE_CALIBBUSY           = 0x00000002U, /*!< OPAMP is enabled in auto calibration mode */
0115 
0116   HAL_OPAMP_STATE_BUSY                = 0x00000004U, /*!< OPAMP is enabled and running in normal mode */
0117   HAL_OPAMP_STATE_BUSYLOCKED          = 0x00000005U  /*!< OPAMP is locked
0118                                                          only system reset allows reconfiguring the opamp. */
0119 
0120 }HAL_OPAMP_StateTypeDef;
0121 
0122 /** 
0123   * @brief OPAMP Handle Structure definition
0124   */ 
0125 #if (USE_HAL_OPAMP_REGISTER_CALLBACKS == 1)
0126 typedef struct __OPAMP_HandleTypeDef
0127 #else
0128 typedef struct
0129 #endif /* USE_HAL_OPAMP_REGISTER_CALLBACKS */
0130 {
0131   OPAMP_TypeDef                 *Instance;                    /*!< OPAMP instance's registers base address */
0132   OPAMP_InitTypeDef              Init;                         /*!< OPAMP required parameters */
0133   HAL_StatusTypeDef              Status;                       /*!< OPAMP peripheral status   */
0134   HAL_LockTypeDef                Lock;                         /*!< Locking object          */
0135   __IO HAL_OPAMP_StateTypeDef    State;                        /*!< OPAMP communication state */
0136 
0137 #if (USE_HAL_OPAMP_REGISTER_CALLBACKS == 1)
0138 void (* MspInitCallback)                (struct __OPAMP_HandleTypeDef *hopamp);
0139 void (* MspDeInitCallback)              (struct __OPAMP_HandleTypeDef *hopamp); 
0140 #endif /* USE_HAL_OPAMP_REGISTER_CALLBACKS */ 
0141 } OPAMP_HandleTypeDef;
0142 
0143 /** 
0144   * @brief HAl_OPAMP_TrimmingValueTypeDef definition 
0145   */ 
0146 
0147 typedef  uint32_t HAL_OPAMP_TrimmingValueTypeDef;
0148 
0149 #if (USE_HAL_OPAMP_REGISTER_CALLBACKS == 1)
0150 /**
0151   * @brief  HAL OPAMP Callback ID enumeration definition
0152   */
0153 typedef enum
0154 {
0155   HAL_OPAMP_MSPINIT_CB_ID                     = 0x01U,  /*!< OPAMP MspInit Callback ID           */
0156   HAL_OPAMP_MSPDEINIT_CB_ID                   = 0x02U,  /*!< OPAMP MspDeInit Callback ID         */
0157   HAL_OPAMP_ALL_CB_ID                         = 0x03U   /*!< OPAMP All ID                        */
0158 }HAL_OPAMP_CallbackIDTypeDef;
0159 
0160 /**
0161   * @brief  HAL OPAMP Callback pointer definition
0162   */
0163 typedef void (*pOPAMP_CallbackTypeDef)(OPAMP_HandleTypeDef *hopamp);
0164 #endif /* USE_HAL_OPAMP_REGISTER_CALLBACKS */
0165 /**
0166   * @}
0167   */
0168     
0169 /* Exported constants --------------------------------------------------------*/
0170 /** @defgroup OPAMP_Exported_Constants OPAMP Exported Constants
0171   * @ingroup RTEMSBSPsARMSTM32H7
0172   * @{
0173   */
0174 
0175 /** @defgroup OPAMP_Mode OPAMP Mode
0176   * @ingroup RTEMSBSPsARMSTM32H7
0177   * @{
0178   */
0179 #define OPAMP_STANDALONE_MODE             0x00000000U                                  /*!< standalone mode */
0180 #define OPAMP_PGA_MODE                    OPAMP_CSR_VMSEL_1                            /*!< PGA mode */
0181 #define OPAMP_FOLLOWER_MODE               (OPAMP_CSR_VMSEL_1 | OPAMP_CSR_VMSEL_0)      /*!< follower mode */
0182     
0183 /**
0184   * @}
0185   */
0186 
0187 /** @defgroup OPAMP_NonInvertingInput OPAMP Non Inverting Input
0188   * @ingroup RTEMSBSPsARMSTM32H7
0189   * @{
0190   */
0191 
0192 #define OPAMP_NONINVERTINGINPUT_IO0         0x00000000U                /*!< OPAMP non-inverting input connected to dedicated IO pin */
0193 #define OPAMP_NONINVERTINGINPUT_DAC_CH      OPAMP_CSR_VPSEL_0          /*!< OPAMP non-inverting input connected internally to DAC channel */
0194 #if defined(DAC2)
0195 #define OPAMP_NONINVERTINGINPUT_DAC2_CH     OPAMP_CSR_VPSEL_1         /*!< Only OPAMP2 non-inverting input connected internally to DAC2 channel */
0196 #endif /* DAC2 */
0197 
0198 /**
0199   * @}
0200   */
0201 
0202 /** @defgroup OPAMP_InvertingInput OPAMP Inverting Input
0203   * @ingroup RTEMSBSPsARMSTM32H7
0204   * @{
0205   */
0206 
0207 #define OPAMP_INVERTINGINPUT_IO0               0x00000000U                            /*!< OPAMP inverting input connected to dedicated IO pin */
0208 #define OPAMP_INVERTINGINPUT_IO1               OPAMP_CSR_VMSEL_0                      /*!< OPAMP inverting input connected to dedicated IO pin */
0209 
0210 /**
0211   * @}
0212   */
0213 
0214 /** @defgroup OPAMP_PgaConnect OPAMP Pga Connect
0215   * @ingroup RTEMSBSPsARMSTM32H7
0216   * @{
0217   */
0218 
0219 #define OPAMP_PGA_CONNECT_INVERTINGINPUT_NO                0x00000000U                                /*!< In PGA mode, the inverting input is not connected */
0220 #define OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0               OPAMP_CSR_PGGAIN_2                         /*!< In PGA mode, the inverting input is connected to VINM0 */
0221 #define OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0_BIAS          OPAMP_CSR_PGGAIN_3                         /*!< In PGA mode, the inverting input is connected to VINM0 or bias */
0222 #define OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0_IO1_BIAS      (OPAMP_CSR_PGGAIN_2 | OPAMP_CSR_PGGAIN_3)  /*!< In PGA mode, the inverting input is connected to VINM0 or bias , VINM1 connected for filtering */
0223 
0224 
0225 /**
0226   * @}
0227   */
0228 
0229 /** @defgroup OPAMP_PgaGain OPAMP Pga Gain
0230   * @ingroup RTEMSBSPsARMSTM32H7
0231   * @{
0232   */
0233 
0234 #define OPAMP_PGA_GAIN_2_OR_MINUS_1               0x00000000U                                 /*!< PGA gain could be 2 or -1   */
0235 #define OPAMP_PGA_GAIN_4_OR_MINUS_3               OPAMP_CSR_PGGAIN_0                          /*!< PGA gain could be 4 or -3   */
0236 #define OPAMP_PGA_GAIN_8_OR_MINUS_7               OPAMP_CSR_PGGAIN_1                          /*!< PGA gain could be 8 or -7   */
0237 #define OPAMP_PGA_GAIN_16_OR_MINUS_15             (OPAMP_CSR_PGGAIN_0 | OPAMP_CSR_PGGAIN_1)   /*!< PGA gain could be 16 or -15 */
0238 
0239 /**
0240   * @}
0241   */
0242 
0243 /** @defgroup OPAMP_PowerMode OPAMP PowerMode
0244   * @ingroup RTEMSBSPsARMSTM32H7
0245   * @{
0246   */
0247 #define OPAMP_POWERMODE_NORMAL         0x00000000U
0248 #define OPAMP_POWERMODE_HIGHSPEED      OPAMP_CSR_OPAHSM
0249 
0250 /**
0251   * @}
0252   */
0253 
0254 
0255 /** @defgroup OPAMP_VREF OPAMP VREF
0256   * @ingroup RTEMSBSPsARMSTM32H7
0257   * @{
0258   */
0259 
0260 #define OPAMP_VREF_3VDDA                     0x00000000U                 /*!< OPAMP Vref = 3.3% VDDA */
0261 #define OPAMP_VREF_10VDDA                    OPAMP_CSR_CALSEL_0          /*!< OPAMP Vref = 10% VDDA  */
0262 #define OPAMP_VREF_50VDDA                    OPAMP_CSR_CALSEL_1          /*!< OPAMP Vref = 50% VDDA  */
0263 #define OPAMP_VREF_90VDDA                    OPAMP_CSR_CALSEL            /*!< OPAMP Vref = 90% VDDA  */
0264 
0265 /**
0266   * @}
0267   */ 
0268 
0269 /** @defgroup OPAMP_UserTrimming OPAMP User Trimming
0270   * @ingroup RTEMSBSPsARMSTM32H7
0271   * @{
0272   */
0273 #define OPAMP_TRIMMING_FACTORY         0x00000000U                             /*!< Factory trimming */
0274 #define OPAMP_TRIMMING_USER            OPAMP_CSR_USERTRIM                      /*!< User trimming */
0275 
0276 
0277 /**
0278   * @}
0279   */
0280 
0281 /** @defgroup OPAMP_FactoryTrimming OPAMP Factory Trimming
0282   * @ingroup RTEMSBSPsARMSTM32H7
0283   * @{
0284   */
0285 #define OPAMP_FACTORYTRIMMING_DUMMY    0xFFFFFFFFU                          /*!< Dummy value if trimming value could not be retrieved */
0286 
0287 #define OPAMP_FACTORYTRIMMING_N        0x00000000U                          /*!< Offset trimming N */
0288 #define OPAMP_FACTORYTRIMMING_P        0x00000001U                          /*!< Offset trimming P */
0289 
0290 /**
0291   * @}
0292   */
0293 
0294  /**
0295   * @}
0296   */ 
0297 
0298 /* Private constants ---------------------------------------------------------*/
0299 /** @defgroup OPAMP_Private_Constants OPAMP Private Constants
0300   * @ingroup RTEMSBSPsARMSTM32H7
0301   * @brief   OPAMP Private constants and defines
0302   * @{
0303   */
0304 
0305 /* NONINVERTING bit position in OTR & HSOTR */
0306 #define OPAMP_INPUT_NONINVERTING           (8U)  /*!< Non inverting input */  
0307 
0308 /* Offset trimming time: during calibration, minimum time needed between two  */
0309 /* steps to have 1 mV accuracy.                                               */
0310 /* Refer to datasheet, electrical characteristics: parameter tOFFTRIM Typ=2ms.*/
0311 /* Unit: ms.                                                                  */
0312 #define OPAMP_TRIMMING_DELAY               (2U)
0313 
0314 /**
0315   * @}
0316   */
0317 
0318 /* Exported macros -----------------------------------------------------------*/
0319 /** @defgroup OPAMP_Exported_Macros OPAMP Exported Macros
0320   * @ingroup RTEMSBSPsARMSTM32H7
0321   * @{
0322   */
0323 
0324 /** @brief Reset OPAMP handle state.
0325   * @param  __HANDLE__: OPAMP handle.
0326   * @retval None
0327   */
0328 #define __HAL_OPAMP_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_OPAMP_STATE_RESET)
0329 
0330 /**
0331   * @}
0332   */ 
0333 
0334 /* Private macro -------------------------------------------------------------*/
0335 
0336 /** @defgroup OPAMP_Private_Macros OPAMP Private Macros
0337   * @ingroup RTEMSBSPsARMSTM32H7
0338   * @{
0339   */
0340 
0341 #define IS_OPAMP_FUNCTIONAL_NORMALMODE(INPUT) (((INPUT) == OPAMP_STANDALONE_MODE) || \
0342                                                ((INPUT) == OPAMP_PGA_MODE) || \
0343                                                ((INPUT) == OPAMP_FOLLOWER_MODE))
0344 
0345 #define IS_OPAMP_INVERTING_INPUT_STANDALONE(INPUT) (((INPUT) == OPAMP_INVERTINGINPUT_IO0) || \
0346                                                     ((INPUT) == OPAMP_INVERTINGINPUT_IO1))
0347 
0348 #if defined(DAC2)
0349 #define IS_OPAMP_NONINVERTING_INPUT(INPUT) (((INPUT) == OPAMP_NONINVERTINGINPUT_IO0) || \
0350                                             ((INPUT) == OPAMP_NONINVERTINGINPUT_DAC_CH) || \
0351                                             ((INPUT) == OPAMP_NONINVERTINGINPUT_DAC2_CH))
0352 #else 
0353 #define IS_OPAMP_NONINVERTING_INPUT(INPUT) (((INPUT) == OPAMP_NONINVERTINGINPUT_IO0) || \
0354                                             ((INPUT) == OPAMP_NONINVERTINGINPUT_DAC_CH))
0355 #endif /* DAC2 */
0356 
0357 #define IS_OPAMP_PGACONNECT(CONNECT) (((CONNECT) == OPAMP_PGA_CONNECT_INVERTINGINPUT_NO)  || \
0358                                       ((CONNECT) == OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0) || \
0359                                       ((CONNECT) == OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0_BIAS) || \
0360                                       ((CONNECT) == OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0_IO1_BIAS))
0361 
0362 #define IS_OPAMP_PGA_GAIN(GAIN) (((GAIN) == OPAMP_PGA_GAIN_2_OR_MINUS_1) || \
0363                                  ((GAIN) == OPAMP_PGA_GAIN_4_OR_MINUS_3) || \
0364                                  ((GAIN) == OPAMP_PGA_GAIN_8_OR_MINUS_7) || \
0365                                  ((GAIN) == OPAMP_PGA_GAIN_16_OR_MINUS_15))
0366 
0367 
0368 #define IS_OPAMP_VREF(VREF) (((VREF) == OPAMP_VREF_3VDDA)  || \
0369                              ((VREF) == OPAMP_VREF_10VDDA) || \
0370                              ((VREF) == OPAMP_VREF_50VDDA) || \
0371                              ((VREF) == OPAMP_VREF_90VDDA))
0372 
0373 #define IS_OPAMP_POWERMODE(TRIMMING) (((TRIMMING) == OPAMP_POWERMODE_NORMAL) || \
0374                                       ((TRIMMING) == OPAMP_POWERMODE_HIGHSPEED) )
0375 
0376 
0377 #define IS_OPAMP_TRIMMING(TRIMMING) (((TRIMMING) == OPAMP_TRIMMING_FACTORY) || \
0378                                      ((TRIMMING) == OPAMP_TRIMMING_USER))
0379 
0380 
0381 #define IS_OPAMP_TRIMMINGVALUE(TRIMMINGVALUE) ((TRIMMINGVALUE) <= 0x1FU)
0382 
0383 #define IS_OPAMP_FACTORYTRIMMING(TRIMMING) (((TRIMMING) == OPAMP_FACTORYTRIMMING_N) || \
0384                                              ((TRIMMING) == OPAMP_FACTORYTRIMMING_P))
0385 
0386 /**
0387   * @}
0388   */ 
0389 
0390 /* Include OPAMP HAL Extended module */
0391 #include "stm32h7xx_hal_opamp_ex.h"
0392 
0393 /* Exported functions --------------------------------------------------------*/
0394 /** @addtogroup OPAMP_Exported_Functions
0395   * @{
0396   */
0397 
0398 /** @addtogroup OPAMP_Exported_Functions_Group1
0399   * @{
0400   */
0401 /* Initialization/de-initialization functions  **********************************/
0402 HAL_StatusTypeDef HAL_OPAMP_Init(OPAMP_HandleTypeDef *hopamp);
0403 HAL_StatusTypeDef HAL_OPAMP_DeInit (OPAMP_HandleTypeDef *hopamp);
0404 void HAL_OPAMP_MspInit(OPAMP_HandleTypeDef *hopamp);
0405 void HAL_OPAMP_MspDeInit(OPAMP_HandleTypeDef *hopamp);
0406 /**
0407   * @}
0408   */
0409 
0410 /** @addtogroup OPAMP_Exported_Functions_Group2
0411   * @{
0412   */
0413 
0414 /* I/O operation functions  *****************************************************/
0415 HAL_StatusTypeDef HAL_OPAMP_Start(OPAMP_HandleTypeDef *hopamp);
0416 HAL_StatusTypeDef HAL_OPAMP_Stop(OPAMP_HandleTypeDef *hopamp);
0417 HAL_StatusTypeDef HAL_OPAMP_SelfCalibrate(OPAMP_HandleTypeDef *hopamp); 
0418 
0419 /**
0420   * @}
0421   */
0422 
0423 /** @addtogroup OPAMP_Exported_Functions_Group3
0424   * @{
0425   */
0426 
0427 /* Peripheral Control functions  ************************************************/
0428 #if (USE_HAL_OPAMP_REGISTER_CALLBACKS == 1)
0429 /* OPAMP callback registering/unregistering */
0430 HAL_StatusTypeDef HAL_OPAMP_RegisterCallback (OPAMP_HandleTypeDef *hopamp, HAL_OPAMP_CallbackIDTypeDef CallbackId, pOPAMP_CallbackTypeDef pCallback);
0431 HAL_StatusTypeDef HAL_OPAMP_UnRegisterCallback (OPAMP_HandleTypeDef *hopamp, HAL_OPAMP_CallbackIDTypeDef CallbackId);
0432 #endif /* USE_HAL_OPAMP_REGISTER_CALLBACKS */
0433 HAL_StatusTypeDef HAL_OPAMP_Lock(OPAMP_HandleTypeDef *hopamp);
0434 HAL_OPAMP_TrimmingValueTypeDef HAL_OPAMP_GetTrimOffset (OPAMP_HandleTypeDef *hopamp, uint32_t trimmingoffset);
0435 
0436 /**
0437   * @}
0438   */
0439 
0440 /** @addtogroup OPAMP_Exported_Functions_Group4
0441   * @{
0442   */
0443 
0444 /* Peripheral State functions  **************************************************/
0445 HAL_OPAMP_StateTypeDef HAL_OPAMP_GetState(OPAMP_HandleTypeDef *hopamp);
0446 
0447 /**
0448   * @}
0449   */
0450 
0451 /**
0452   * @}
0453   */
0454 
0455 /**
0456   * @}
0457   */ 
0458 
0459 /**
0460   * @}
0461   */ 
0462 
0463 #ifdef __cplusplus
0464 }
0465 #endif
0466 
0467 #endif /* STM32H7xx_HAL_OPAMP_H */
0468