STM32L4xx_HAL_Driver  1.14.0
Initialization and de-initialization functions

Initialization and Configuration functions. More...

Functions

HAL_StatusTypeDef HAL_OPAMP_Init (OPAMP_HandleTypeDef *hopamp)
 Initializes the OPAMP according to the specified parameters in the OPAMP_InitTypeDef and initialize the associated handle. More...
 
HAL_StatusTypeDef HAL_OPAMP_DeInit (OPAMP_HandleTypeDef *hopamp)
 DeInitialize the OPAMP peripheral. More...
 
void HAL_OPAMP_MspInit (OPAMP_HandleTypeDef *hopamp)
 Initialize the OPAMP MSP. More...
 
void HAL_OPAMP_MspDeInit (OPAMP_HandleTypeDef *hopamp)
 DeInitialize OPAMP MSP. More...
 

Detailed Description

Initialization and Configuration functions.

  ==============================================================================
              ##### Initialization and de-initialization functions #####
  ==============================================================================

Function Documentation

◆ HAL_OPAMP_DeInit()

HAL_StatusTypeDef HAL_OPAMP_DeInit ( OPAMP_HandleTypeDef hopamp)

DeInitialize the OPAMP peripheral.

Note
Deinitialization can be performed if the OPAMP configuration is locked. (the lock is SW in L4)
Parameters
hopampOPAMP handle
Return values
HALstatus

Definition at line 444 of file stm32l4xx_hal_opamp.c.

445 {
446  HAL_StatusTypeDef status = HAL_OK;
447 
448  /* Check the OPAMP handle allocation */
449  /* DeInit not allowed if calibration is ongoing */
450  if(hopamp == NULL)
451  {
452  status = HAL_ERROR;
453  }
454  else if(hopamp->State == HAL_OPAMP_STATE_CALIBBUSY)
455  {
456  status = HAL_ERROR;
457  }
458  else
459  {
460  /* Check the parameter */
461  assert_param(IS_OPAMP_ALL_INSTANCE(hopamp->Instance));
462 
463  /* Set OPAMP_CSR register to reset value */
464  /* Mind that OPAMP1_CSR_OPARANGE of CSR of OPAMP1 remains unchanged (applies to both OPAMPs) */
465  /* OPAMP shall be disabled first separately */
466  CLEAR_BIT(hopamp->Instance->CSR, OPAMP_CSR_OPAMPxEN);
467  MODIFY_REG(hopamp->Instance->CSR, OPAMP_CSR_RESET_BITS, OPAMP_CSR_RESET_VALUE);
468 
469 #if (USE_HAL_OPAMP_REGISTER_CALLBACKS == 1)
470  if(hopamp->MspDeInitCallback == NULL)
471  {
472  hopamp->MspDeInitCallback = HAL_OPAMP_MspDeInit;
473  }
474  /* DeInit the low level hardware */
475  hopamp->MspDeInitCallback(hopamp);
476 #else
477  /* DeInit the low level hardware: GPIO, CLOCK and NVIC */
478  HAL_OPAMP_MspDeInit(hopamp);
479 #endif /* USE_HAL_OPAMP_REGISTER_CALLBACKS */
480  /* Update the OPAMP state*/
481  hopamp->State = HAL_OPAMP_STATE_RESET;
482 
483  /* Process unlocked */
484  __HAL_UNLOCK(hopamp);
485  }
486  return status;
487 }
__HAL_UNLOCK(hrtc)
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
return HAL_OK
void HAL_OPAMP_MspDeInit(OPAMP_HandleTypeDef *hopamp)
DeInitialize OPAMP MSP.
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))

◆ HAL_OPAMP_Init()

HAL_StatusTypeDef HAL_OPAMP_Init ( OPAMP_HandleTypeDef hopamp)

Initializes the OPAMP according to the specified parameters in the OPAMP_InitTypeDef and initialize the associated handle.

Note
If the selected opamp is locked, initialization can't be performed. To unlock the configuration, perform a system reset.
Parameters
hopampOPAMP handle
Return values
HALstatus

Definition at line 280 of file stm32l4xx_hal_opamp.c.

281 {
282  HAL_StatusTypeDef status = HAL_OK;
283  uint32_t updateotrlpotr;
284 
285  /* Check the OPAMP handle allocation and lock status */
286  /* Init not allowed if calibration is ongoing */
287  if(hopamp == NULL)
288  {
289  return HAL_ERROR;
290  }
291  else if(hopamp->State == HAL_OPAMP_STATE_BUSYLOCKED)
292  {
293  return HAL_ERROR;
294  }
295  else if(hopamp->State == HAL_OPAMP_STATE_CALIBBUSY)
296  {
297  return HAL_ERROR;
298  }
299  else
300  {
301  /* Check the parameter */
302  assert_param(IS_OPAMP_ALL_INSTANCE(hopamp->Instance));
303 
304  /* Set OPAMP parameters */
305  assert_param(IS_OPAMP_POWER_SUPPLY_RANGE(hopamp->Init.PowerSupplyRange));
306  assert_param(IS_OPAMP_POWERMODE(hopamp->Init.PowerMode));
307  assert_param(IS_OPAMP_FUNCTIONAL_NORMALMODE(hopamp->Init.Mode));
308  assert_param(IS_OPAMP_NONINVERTING_INPUT(hopamp->Init.NonInvertingInput));
309 
310  if(hopamp->State == HAL_OPAMP_STATE_RESET)
311  {
312 #if (USE_HAL_OPAMP_REGISTER_CALLBACKS == 1)
313  if(hopamp->MspInitCallback == NULL)
314  {
315  hopamp->MspInitCallback = HAL_OPAMP_MspInit;
316  }
317 #endif /* USE_HAL_OPAMP_REGISTER_CALLBACKS */
318  }
319 
320  if ((hopamp->Init.Mode) == OPAMP_STANDALONE_MODE)
321  {
322  assert_param(IS_OPAMP_INVERTING_INPUT_STANDALONE(hopamp->Init.InvertingInput));
323  }
324 
325  if ((hopamp->Init.Mode) == OPAMP_PGA_MODE)
326  {
327  assert_param(IS_OPAMP_INVERTING_INPUT_PGA(hopamp->Init.InvertingInput));
328  }
329 
330  if ((hopamp->Init.Mode) == OPAMP_PGA_MODE)
331  {
332  assert_param(IS_OPAMP_PGA_GAIN(hopamp->Init.PgaGain));
333  }
334 
335  assert_param(IS_OPAMP_TRIMMING(hopamp->Init.UserTrimming));
336  if ((hopamp->Init.UserTrimming) == OPAMP_TRIMMING_USER)
337  {
338  if (hopamp->Init.PowerMode == OPAMP_POWERMODE_NORMAL)
339  {
340  assert_param(IS_OPAMP_TRIMMINGVALUE(hopamp->Init.TrimmingValueP));
341  assert_param(IS_OPAMP_TRIMMINGVALUE(hopamp->Init.TrimmingValueN));
342  }
343  else
344  {
345  assert_param(IS_OPAMP_TRIMMINGVALUE(hopamp->Init.TrimmingValuePLowPower));
346  assert_param(IS_OPAMP_TRIMMINGVALUE(hopamp->Init.TrimmingValueNLowPower));
347  }
348  }
349 
350  if(hopamp->State == HAL_OPAMP_STATE_RESET)
351  {
352  /* Allocate lock resource and initialize it */
353  hopamp->Lock = HAL_UNLOCKED;
354  }
355 
356 #if (USE_HAL_OPAMP_REGISTER_CALLBACKS == 1)
357  hopamp->MspInitCallback(hopamp);
358 #else
359  /* Call MSP init function */
360  HAL_OPAMP_MspInit(hopamp);
361 #endif /* USE_HAL_OPAMP_REGISTER_CALLBACKS */
362 
363  /* Set operating mode */
364  CLEAR_BIT(hopamp->Instance->CSR, OPAMP_CSR_CALON);
365 
366  if (hopamp->Init.Mode == OPAMP_PGA_MODE)
367  {
368  MODIFY_REG(hopamp->Instance->CSR, OPAMP_CSR_INIT_MASK_PGA, \
369  hopamp->Init.PowerMode | \
370  hopamp->Init.Mode | \
371  hopamp->Init.PgaGain | \
372  hopamp->Init.InvertingInput | \
373  hopamp->Init.NonInvertingInput | \
374  hopamp->Init.UserTrimming);
375  }
376 
377  if (hopamp->Init.Mode == OPAMP_FOLLOWER_MODE)
378  {
379  /* In Follower mode InvertingInput is Not Applicable */
380  MODIFY_REG(hopamp->Instance->CSR, OPAMP_CSR_INIT_MASK_FOLLOWER, \
381  hopamp->Init.PowerMode | \
382  hopamp->Init.Mode | \
383  hopamp->Init.NonInvertingInput | \
384  hopamp->Init.UserTrimming);
385  }
386 
387  if (hopamp->Init.Mode == OPAMP_STANDALONE_MODE)
388  {
389  MODIFY_REG(hopamp->Instance->CSR, OPAMP_CSR_INIT_MASK_STANDALONE, \
390  hopamp->Init.PowerMode | \
391  hopamp->Init.Mode | \
392  hopamp->Init.InvertingInput | \
393  hopamp->Init.NonInvertingInput | \
394  hopamp->Init.UserTrimming);
395  }
396 
397  if (hopamp->Init.UserTrimming == OPAMP_TRIMMING_USER)
398  {
399  /* Set power mode and associated calibration parameters */
400  if (hopamp->Init.PowerMode != OPAMP_POWERMODE_LOWPOWER)
401  {
402  /* OPAMP_POWERMODE_NORMAL */
403  /* Set calibration mode (factory or user) and values for */
404  /* transistors differential pair high (PMOS) and low (NMOS) for */
405  /* normal mode. */
406  updateotrlpotr = (((hopamp->Init.TrimmingValueP) << (OPAMP_INPUT_NONINVERTING)) \
407  | (hopamp->Init.TrimmingValueN));
408  MODIFY_REG(hopamp->Instance->OTR, OPAMP_OTR_TRIMOFFSETN | OPAMP_OTR_TRIMOFFSETP, updateotrlpotr);
409  }
410  else
411  {
412  /* OPAMP_POWERMODE_LOWPOWER */
413  /* transistors differential pair high (PMOS) and low (NMOS) for */
414  /* low power mode. */
415  updateotrlpotr = (((hopamp->Init.TrimmingValuePLowPower) << (OPAMP_INPUT_NONINVERTING)) \
416  | (hopamp->Init.TrimmingValueNLowPower));
417  MODIFY_REG(hopamp->Instance->LPOTR, OPAMP_OTR_TRIMOFFSETN | OPAMP_OTR_TRIMOFFSETP, updateotrlpotr);
418  }
419  }
420 
421  /* Configure the power supply range */
422  /* The OPAMP_CSR_OPARANGE is common configuration for all OPAMPs */
423  /* bit OPAMP1_CSR_OPARANGE is used for both OPAMPs */
424  MODIFY_REG(OPAMP1->CSR, OPAMP1_CSR_OPARANGE, hopamp->Init.PowerSupplyRange);
425 
426  /* Update the OPAMP state*/
427  if (hopamp->State == HAL_OPAMP_STATE_RESET)
428  {
429  /* From RESET state to READY State */
430  hopamp->State = HAL_OPAMP_STATE_READY;
431  }
432  /* else: remain in READY or BUSY state (no update) */
433  return status;
434  }
435 }
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
return HAL_OK
void HAL_OPAMP_MspInit(OPAMP_HandleTypeDef *hopamp)
Initialize the OPAMP MSP.
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))

◆ HAL_OPAMP_MspDeInit()

__weak void HAL_OPAMP_MspDeInit ( OPAMP_HandleTypeDef hopamp)

DeInitialize OPAMP MSP.

Parameters
hopampOPAMP handle
Return values
None

Definition at line 509 of file stm32l4xx_hal_opamp.c.

510 {
511  /* Prevent unused argument(s) compilation warning */
512  UNUSED(hopamp);
513 
514  /* NOTE : This function should not be modified, when the callback is needed,
515  the function "HAL_OPAMP_MspDeInit()" must be implemented in the user file.
516  */
517 }

◆ HAL_OPAMP_MspInit()

__weak void HAL_OPAMP_MspInit ( OPAMP_HandleTypeDef hopamp)

Initialize the OPAMP MSP.

Parameters
hopampOPAMP handle
Return values
None

Definition at line 494 of file stm32l4xx_hal_opamp.c.

495 {
496  /* Prevent unused argument(s) compilation warning */
497  UNUSED(hopamp);
498 
499  /* NOTE : This function should not be modified, when the callback is needed,
500  the function "HAL_OPAMP_MspInit()" must be implemented in the user file.
501  */
502 }