/** * @brief DeInitializes the OPAMP peripheral * @note Deinitialization can't be performed if the OPAMP configuration is locked. * To unlock the configuration, perform a system reset. * @param hopamp: OPAMP handle * @retval HAL status */ HAL_StatusTypeDef HAL_OPAMP_DeInit(OPAMP_HandleTypeDef *hopamp) { HAL_StatusTypeDef status = HAL_OK; /* Check the OPAMP handle allocation */ /* Check if OPAMP locked */ /* DeInit not allowed if calibration is ongoing */ if((hopamp == NULL) || (hopamp->State == HAL_OPAMP_STATE_BUSYLOCKED) \ || (hopamp->State == HAL_OPAMP_STATE_CALIBBUSY)) { status = HAL_ERROR; } else { /* Check the parameter */ assert_param(IS_OPAMP_ALL_INSTANCE(hopamp->Instance)); /* Set OPAMP_CSR register to reset value */ WRITE_REG(hopamp->Instance->CSR, OPAMP_CSR_RESET_VALUE); /* DeInit the low level hardware: GPIO, CLOCK and NVIC */ HAL_OPAMP_MspDeInit(hopamp); /* Update the OPAMP state*/ hopamp->State = HAL_OPAMP_STATE_RESET; } return status; }
/** * @brief DeInitialize the OPAMP peripheral. * @note Deinitialization can be performed if the OPAMP configuration is locked. * (the lock is SW in L4) * @param hopamp: OPAMP handle * @retval HAL status */ HAL_StatusTypeDef HAL_OPAMP_DeInit(OPAMP_HandleTypeDef *hopamp) { HAL_StatusTypeDef status = HAL_OK; /* Check the OPAMP handle allocation */ /* DeInit not allowed if calibration is ongoing */ if((hopamp == NULL) || (hopamp->State == HAL_OPAMP_STATE_CALIBBUSY)) { status = HAL_ERROR; } else { /* Check the parameter */ assert_param(IS_OPAMP_ALL_INSTANCE(hopamp->Instance)); /* Set OPAMP_CSR register to reset value */ /* Mind that OPAMP1_CSR_OPARANGE of CSR of OPAMP1 remains unchanged (applies to both OPAMPs) */ /* OPAMP shall be disabled first separately */ CLEAR_BIT(hopamp->Instance->CSR, OPAMP_CSR_OPAMPxEN); MODIFY_REG(hopamp->Instance->CSR, OPAMP_CSR_RESET_BITS, OPAMP_CSR_RESET_VALUE); /* DeInit the low level hardware: GPIO, CLOCK and NVIC */ HAL_OPAMP_MspDeInit(hopamp); /* Update the OPAMP state*/ hopamp->State = HAL_OPAMP_STATE_RESET; /* Process unlocked */ __HAL_UNLOCK(hopamp); } return status; }
/** * @brief DeInitializes the OPAMP peripheral * @note Deinitialization can't be performed if the OPAMP configuration is locked. * To unlock the configuration, perform a system reset. * @param hopamp: OPAMP handle * @retval HAL status */ HAL_StatusTypeDef HAL_OPAMP_DeInit(OPAMP_HandleTypeDef* hopamp) { HAL_StatusTypeDef status = HAL_OK; /* Check the OPAMP handle allocation */ /* Check if OPAMP locked */ /* DeInit not allowed if calibration is ongoing */ if((hopamp == NULL) || (hopamp->State == HAL_OPAMP_STATE_BUSYLOCKED) \ || (hopamp->State == HAL_OPAMP_STATE_CALIBBUSY)) { status = HAL_ERROR; } else { /* Check the parameter */ assert_param(IS_OPAMP_ALL_INSTANCE(hopamp->Instance)); /* Open all switches on non-inverting input, inverting input and output */ /* feedback. */ CLEAR_BIT(OPAMP->CSR, __OPAMP_CSR_ALL_SWITCHES(hopamp)); /* DeInit the low level hardware */ HAL_OPAMP_MspDeInit(hopamp); /* Update the OPAMP state*/ hopamp->State = HAL_OPAMP_STATE_RESET; } /* Process unlocked */ __HAL_UNLOCK(hopamp); return status; }
/** * @brief DeInitializes the OPAMP peripheral * @note Deinitialization can be performed if the OPAMP configuration is locked. * (the OPAMP lock is SW in STM32L1) * @param hopamp: OPAMP handle * @retval HAL status */ HAL_StatusTypeDef HAL_OPAMP_DeInit(OPAMP_HandleTypeDef* hopamp) { HAL_StatusTypeDef status = HAL_OK; /* Check the OPAMP handle allocation */ /* DeInit not allowed if calibration is ongoing */ if((hopamp == NULL) || (hopamp->State == HAL_OPAMP_STATE_CALIBBUSY)) { status = HAL_ERROR; } else { /* Check the parameter */ assert_param(IS_OPAMP_ALL_INSTANCE(hopamp->Instance)); /* Disable the selected opamp */ SET_BIT (OPAMP->CSR, OPAMP_CSR_OPAXPD(hopamp)); /* Open all switches on non-inverting input, inverting input and output */ /* feedback. */ /* Note: OPAMP register CSR is written directly, independently of OPAMP */ /* instance, because all OPAMP settings are dispatched in the same */ /* register. */ /* Settings of bits for each OPAMP instances are managed case by */ /* case using macro (OPAMP_CSR_S3SELX(), OPAMP_CSR_ANAWSELX(), ...) */ CLEAR_BIT(OPAMP->CSR, OPAMP_CSR_ALL_SWITCHES(hopamp)); /* Note: Registers and bits shared with other OPAMP instances are kept */ /* unchanged, to not impact other OPAMP while operating on the */ /* selected OPAMP. */ /* Unchanged: bit OPAMP_OTR_OT_USER (parameter "UserTrimming") */ /* bit OPAMP_CSR_AOP_RANGE (parameter "PowerSupplyRange")*/ /* DeInit the low level hardware: GPIO, CLOCK and NVIC */ HAL_OPAMP_MspDeInit(hopamp); /* Update the OPAMP state*/ hopamp->State = HAL_OPAMP_STATE_RESET; } /* Process unlocked */ __HAL_UNLOCK(hopamp); return status; }
/** * @brief DeInitializes the OPAMP peripheral * @note Deinitialization can't be performed if the OPAMP configuration is locked. * To unlock the configuration, perform a system reset. * @param hopamp: OPAMP handle * @retval HAL status */ HAL_StatusTypeDef HAL_OPAMP_DeInit(OPAMP_HandleTypeDef *hopamp) { HAL_StatusTypeDef status = HAL_OK; /* Check the OPAMP handle allocation */ /* DeInit not allowed if calibration is ongoing */ if((hopamp == NULL) || (hopamp->State == HAL_OPAMP_STATE_CALIBBUSY)) { status = HAL_ERROR; } else { /* Check the parameter */ assert_param(IS_OPAMP_ALL_INSTANCE(hopamp->Instance)); /* Set OPAMP_CSR register to reset value */ WRITE_REG(hopamp->Instance->CSR, OPAMP_CSR_RESET_VALUE); /* DeInit the low level hardware: GPIO, CLOCK and NVIC */ /* When OPAMP is locked, unlocking can be achieved thanks to */ /* __HAL_RCC_SYSCFG_CLK_DISABLE() call within HAL_OPAMP_MspDeInit */ /* Note that __HAL_RCC_SYSCFG_CLK_DISABLE() also disables comparator */ HAL_OPAMP_MspDeInit(hopamp); if (OPAMP_CSR_RESET_VALUE == hopamp->Instance->CSR) { /* Update the OPAMP state */ hopamp->State = HAL_OPAMP_STATE_RESET; } else /* RESET STATE */ { /* DeInit not complete */ /* It can be the case if OPAMP was formerly locked */ status = HAL_ERROR; /* The OPAMP state is NOT updated */ } } /* Process unlocked */ __HAL_UNLOCK(hopamp); return status; }