/** ****************************************************************************** * @file stm32f4xx_dfsdm.c * @author MCD Application Team * @version V1.8.1 * @date 27-January-2022 * @brief This file provides firmware functions to manage the following * functionalities of Digital Filter for Sigma Delta modulator * (DFSDM) peripheral: * + Initialization functions. * + Configuration functions. * + Interrupts and flags management functions. * * @verbatim * ================================================================================ ##### How to use this driver ##### ================================================================================ [..] @endverbatim ****************************************************************************** * @attention * * Copyright (c) 2016 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stm32f4xx_dfsdm.h" #include "stm32f4xx_rcc.h" /** @addtogroup STM32F4xx_StdPeriph_Driver * @{ */ /** @defgroup DFSDM * @brief DFSDM driver modules * @{ */ #if defined(STM32F412xG) || defined(STM32F413_423xx) /* External variables --------------------------------------------------------*/ /* Private typedef -----------------------------------------------------------*/ /* Private defines -----------------------------------------------------------*/ #define CHCFGR_INIT_CLEAR_MASK (uint32_t) 0xFFFE0F10 /* Private macros ------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ /** @defgroup DFSDM_Private_Functions * @{ */ /** @defgroup DFSDM_Group1 Initialization functions * @brief Initialization functions * @verbatim =============================================================================== Initialization functions =============================================================================== This section provides functions allowing to: - Deinitialize the DFSDM - Initialize DFSDM serial channels transceiver - Initialize DFSDM filter @endverbatim * @{ */ /** * @brief Deinitializes the DFSDM peripheral registers to their default reset values. * @param None. * @retval None. * */ void DFSDM_DeInit(void) { /* Enable LPTx reset state */ RCC_APB2PeriphResetCmd(RCC_APB2Periph_DFSDM1, ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_DFSDM1, DISABLE); #if defined(STM32F413_423xx) RCC_APB2PeriphResetCmd(RCC_APB2Periph_DFSDM2, ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_DFSDM2, DISABLE); #endif /* STM32F413_423xx */ } /** * @brief Initializes the DFSDM serial channels transceiver according to the specified * parameters in the DFSDM_TransceiverInit. * @param DFSDM_Channelx: specifies the channel to be selected. * This parameter can be one of the following values : * @arg DFSDM1_Channel0 : DFSDM 1 Channel 0 * @arg DFSDM1_Channel1 : DFSDM 1 Channel 1 * @arg DFSDM1_Channel2 : DFSDM 1 Channel 2 * @arg DFSDM1_Channel3 : DFSDM 1 Channel 3 * @arg DFSDM2_Channel0 : DFSDM 2 Channel 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel1 : DFSDM 2 Channel 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel2 : DFSDM 2 Channel 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel3 : DFSDM 2 Channel 3 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel4 : DFSDM 2 Channel 4 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel5 : DFSDM 2 Channel 5 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel6 : DFSDM 2 Channel 6 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel7 : DFSDM 2 Channel 7 (available only for STM32F413_423xx devices) * @param DFSDM_TransceiverInitStruct: pointer to a DFSDM_TransceiverInitTypeDef structure * that contains the configuration information for the specified channel. * @retval None * @note It is mandatory to disable the selected channel to use this function. */ void DFSDM_TransceiverInit(DFSDM_Channel_TypeDef* DFSDM_Channelx, DFSDM_TransceiverInitTypeDef* DFSDM_TransceiverInitStruct) { uint32_t tmpreg1 = 0; uint32_t tmpreg2 = 0; /* Check the parameters */ assert_param(IS_DFSDM_ALL_CHANNEL(DFSDM_Channelx)); assert_param(IS_DFSDM_INTERFACE(DFSDM_TransceiverInitStruct->DFSDM_Interface)); assert_param(IS_DFSDM_Input_MODE(DFSDM_TransceiverInitStruct->DFSDM_Input)); assert_param(IS_DFSDM_Redirection_STATE(DFSDM_TransceiverInitStruct->DFSDM_Redirection)); assert_param(IS_DFSDM_PACK_MODE(DFSDM_TransceiverInitStruct->DFSDM_PackingMode)); assert_param(IS_DFSDM_CLOCK(DFSDM_TransceiverInitStruct->DFSDM_Clock)); assert_param(IS_DFSDM_DATA_RIGHT_BIT_SHIFT(DFSDM_TransceiverInitStruct->DFSDM_DataRightShift)); assert_param(IS_DFSDM_OFFSET(DFSDM_TransceiverInitStruct->DFSDM_Offset)); assert_param(IS_DFSDM_CLK_DETECTOR_STATE(DFSDM_TransceiverInitStruct->DFSDM_CLKAbsenceDetector)); assert_param(IS_DFSDM_SC_DETECTOR_STATE(DFSDM_TransceiverInitStruct->DFSDM_ShortCircuitDetector)); /* Get the DFSDM Channelx CHCFGR1 value */ tmpreg1 = DFSDM_Channelx->CHCFGR1; /* Clear SITP, CKABEN, SCDEN and SPICKSEL bits */ tmpreg1 &= CHCFGR_INIT_CLEAR_MASK; /* Set or Reset SITP bits according to DFSDM_Interface value */ /* Set or Reset SPICKSEL bits according to DFSDM_Clock value */ /* Set or Reset DATMPX bits according to DFSDM_InputMode value */ /* Set or Reset CHINSEL bits according to DFSDM_Redirection value */ /* Set or Reset DATPACK bits according to DFSDM_PackingMode value */ /* Set or Reset CKABEN bit according to DFSDM_CLKAbsenceDetector value */ /* Set or Reset SCDEN bit according to DFSDM_ShortCircuitDetector value */ tmpreg1 |= (DFSDM_TransceiverInitStruct->DFSDM_Interface | DFSDM_TransceiverInitStruct->DFSDM_Clock | DFSDM_TransceiverInitStruct->DFSDM_Input | DFSDM_TransceiverInitStruct->DFSDM_Redirection | DFSDM_TransceiverInitStruct->DFSDM_PackingMode | DFSDM_TransceiverInitStruct->DFSDM_CLKAbsenceDetector | DFSDM_TransceiverInitStruct->DFSDM_ShortCircuitDetector); /* Write to DFSDM Channelx CHCFGR1R */ DFSDM_Channelx->CHCFGR1 = tmpreg1; /* Get the DFSDM Channelx CHCFGR2 value */ tmpreg2 = DFSDM_Channelx->CHCFGR2; /* Clear DTRBS and OFFSET bits */ tmpreg2 &= ~(DFSDM_CHCFGR2_DTRBS | DFSDM_CHCFGR2_OFFSET); /* Set or Reset DTRBS bits according to DFSDM_DataRightShift value */ /* Set or Reset OFFSET bits according to DFSDM_Offset value */ tmpreg2 |= (((DFSDM_TransceiverInitStruct->DFSDM_DataRightShift) <<3 ) | ((DFSDM_TransceiverInitStruct->DFSDM_Offset) <<8 )); /* Write to DFSDM Channelx CHCFGR1R */ DFSDM_Channelx->CHCFGR2 = tmpreg2; } /** * @brief Fills each DFSDM_TransceiverInitStruct member with its default value. * @param DFSDM_TransceiverInitStruct : pointer to a DFSDM_TransceiverInitTypeDef structure * which will be initialized. * @retval None */ void DFSDM_TransceiverStructInit(DFSDM_TransceiverInitTypeDef* DFSDM_TransceiverInitStruct) { /* SPI with rising edge to strobe data is selected as default serial interface */ DFSDM_TransceiverInitStruct->DFSDM_Interface = DFSDM_Interface_SPI_FallingEdge; /* Clock coming from internal DFSDM_CKOUT output is selected as default serial clock */ DFSDM_TransceiverInitStruct->DFSDM_Clock = DFSDM_Clock_Internal; /* No data right bit-shift is selected as default data right bit-shift */ DFSDM_TransceiverInitStruct->DFSDM_DataRightShift = 0x0; /* No offset is selected as default offset */ DFSDM_TransceiverInitStruct->DFSDM_Offset = 0x0; /* Clock Absence Detector is Enabled as default state */ DFSDM_TransceiverInitStruct->DFSDM_CLKAbsenceDetector = DFSDM_CLKAbsenceDetector_Enable; } /** * @brief Initializes the DFSDMx Filter according to the specified * parameters in the DFSDM_FilterInitStruct. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param DFSDM_FilterInitStruct: pointer to a DFSDM_FilterInitTypeDef structure * that contains the configuration information for the specified filter. * @retval None * * @note It is mandatory to disable the selected filter to use this function. */ void DFSDM_FilterInit(DFSDM_Filter_TypeDef* DFSDMx, DFSDM_FilterInitTypeDef* DFSDM_FilterInitStruct) { uint32_t tmpreg1 = 0; /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); assert_param(IS_DFSDM_SINC_ORDER(DFSDM_FilterInitStruct->DFSDM_SincOrder)); assert_param(IS_DFSDM_SINC_OVRSMPL_RATIO(DFSDM_FilterInitStruct->DFSDM_FilterOversamplingRatio)); assert_param(IS_DFSDM_INTG_OVRSMPL_RATIO(DFSDM_FilterInitStruct->DFSDM_IntegratorOversamplingRatio)); /* Get the DFSDMx FCR value */ tmpreg1 = DFSDMx->FLTFCR; /* Clear FORD, FOSR and IOSR bits */ tmpreg1 &= ~(DFSDM_FLTFCR_FORD | DFSDM_FLTFCR_FOSR | DFSDM_FLTFCR_IOSR); /* Set or Reset FORD bits according to DFSDM_SincOrder value */ /* Set or Reset FOSR bits according to DFSDM_FilterOversamplingRatio value */ /* Set or Reset IOSR bits according to DFSDM_IntegratorOversamplingRatio value */ tmpreg1 |= (DFSDM_FilterInitStruct->DFSDM_SincOrder | ((DFSDM_FilterInitStruct->DFSDM_FilterOversamplingRatio -1) << 16) | (DFSDM_FilterInitStruct->DFSDM_IntegratorOversamplingRatio -1)); /* Write to DFSDMx FCR */ DFSDMx->FLTFCR = tmpreg1; } /** * @brief Fills each DFSDM_FilterInitStruct member with its default value. * @param DFSDM_FilterInitStruct: pointer to a DFSDM_FilterInitTypeDef structure * which will be initialized. * @retval None */ void DFSDM_FilterStructInit(DFSDM_FilterInitTypeDef* DFSDM_FilterInitStruct) { /* Order = 3 is selected as default sinc order */ DFSDM_FilterInitStruct->DFSDM_SincOrder = DFSDM_SincOrder_Sinc3; /* Ratio = 64 is selected as default oversampling ratio */ DFSDM_FilterInitStruct->DFSDM_FilterOversamplingRatio = 64 ; /* Ratio = 4 is selected as default integrator oversampling ratio */ DFSDM_FilterInitStruct->DFSDM_IntegratorOversamplingRatio = 4; } /** * @} */ /** @defgroup DFSDM_Group2 Configuration functions * @brief Configuration functions * @verbatim =============================================================================== Configuration functions =============================================================================== This section provides functions allowing to configure DFSDM: - Enable/Disable (DFSDM peripheral, Channel, Filter) - Configure Clock output - Configure Injected/Regular channels for Conversion - Configure short circuit detector - Configure Analog watchdog filter @endverbatim * @{ */ #if defined(STM32F412xG) /** * @brief Enables or disables the DFSDM peripheral. * @param NewState: new state of the DFSDM interface. * This parameter can be: ENABLE or DISABLE. * @retval None */ void DFSDM_Command(FunctionalState NewState) { /* Check the parameters */ assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { /* Set the ENABLE bit */ DFSDM1_Channel0 -> CHCFGR1 |= DFSDM_CHCFGR1_DFSDMEN; } else { /* Reset the ENABLE bit */ DFSDM1_Channel0 -> CHCFGR1 &= ~(DFSDM_CHCFGR1_DFSDMEN); } } #endif /* STM32F412xG */ #if defined(STM32F413_423xx) /** * @brief Enables or disables the DFSDM peripheral. * @param Instance: select the instance of DFSDM * This parameter can be: 1 or 2. * @param NewState: new state of the DFSDM interface. * This parameter can be: ENABLE or DISABLE. * @retval None */ void DFSDM_Cmd(uint32_t Instance, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_FUNCTIONAL_STATE(NewState)); if(Instance == 1) { if (NewState != DISABLE) { /* Set the ENABLE bit */ DFSDM1_Channel0 -> CHCFGR1 |= DFSDM_CHCFGR1_DFSDMEN; } else { /* Reset the ENABLE bit */ DFSDM1_Channel0 -> CHCFGR1 &= ~(DFSDM_CHCFGR1_DFSDMEN); } } else /* DFSDM2 */ { if (NewState != DISABLE) { /* Set the ENABLE bit */ DFSDM2_Channel0 -> CHCFGR1 |= DFSDM_CHCFGR1_DFSDMEN; } else { /* Reset the ENABLE bit */ DFSDM2_Channel0 -> CHCFGR1 &= ~(DFSDM_CHCFGR1_DFSDMEN); } } } #endif /* STM32F413_423xx */ /** * @brief Enables or disables the specified DFSDM serial channelx. * @param DFSDM_Channelx: specifies the channel to be selected. * This parameter can be one of the following values : * @arg DFSDM1_Channel0 : DFSDM 1 Channel 0 * @arg DFSDM1_Channel1 : DFSDM 1 Channel 1 * @arg DFSDM1_Channel2 : DFSDM 1 Channel 2 * @arg DFSDM1_Channel3 : DFSDM 1 Channel 3 * @arg DFSDM2_Channel0 : DFSDM 2 Channel 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel1 : DFSDM 2 Channel 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel2 : DFSDM 2 Channel 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel3 : DFSDM 2 Channel 3 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel4 : DFSDM 2 Channel 4 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel5 : DFSDM 2 Channel 5 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel6 : DFSDM 2 Channel 6 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel7 : DFSDM 2 Channel 7 (available only for STM32F413_423xx devices) * @param NewState: new state of the DFSDM serial channelx . * This parameter can be: ENABLE or DISABLE. * @retval None */ void DFSDM_ChannelCmd(DFSDM_Channel_TypeDef* DFSDM_Channelx, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_CHANNEL(DFSDM_Channelx)); assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { /* Set the ENABLE bit */ DFSDM_Channelx->CHCFGR1 |= DFSDM_CHCFGR1_CHEN; } else { /* Reset the ENABLE bit */ DFSDM_Channelx->CHCFGR1 &= ~(DFSDM_CHCFGR1_CHEN); } } /** * @brief Enables or disables the specified DFSDMx Filter. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param NewState: new state of the selected DFSDM module. * This parameter can be: ENABLE or DISABLE. * @retval None */ void DFSDM_FilterCmd(DFSDM_Filter_TypeDef* DFSDMx, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { /* Set the ENABLE bit */ DFSDMx->FLTCR1 |= DFSDM_FLTCR1_DFEN; } else { /* Reset the ENABLE bit */ DFSDMx->FLTCR1 &= ~(DFSDM_FLTCR1_DFEN); } } #if defined(STM32F412xG) /** * @brief Configures the Output serial clock divider. * @param DFSDM_ClkOutDivision: Defines the divider for the output serial clock * This parameter can be a value between 1 and 256. * @retval None * @note The output serial clock is stopped if the divider =1. * By default the serial output clock is stopped. */ void DFSDM_ConfigClkOutputDivider(uint32_t DFSDM_ClkOutDivision) { uint32_t tmpreg1 = 0; /* Check the parameters */ assert_param(IS_DFSDM_CLOCK_OUT_DIVIDER(DFSDM_ClkOutDivision)); /* Get the DFSDM_Channel0 CHCFGR1 value */ tmpreg1 = DFSDM1_Channel0 -> CHCFGR1; /* Clear the CKOUTDIV bits */ tmpreg1 &= (uint32_t)(~DFSDM_CHCFGR1_CKOUTDIV); /* Set or Reset the CKOUTDIV bits */ tmpreg1 |= (uint32_t)((DFSDM_ClkOutDivision - 1) << 16); /* Write to DFSDM Channel0 CHCFGR1 */ DFSDM1_Channel0 -> CHCFGR1 = tmpreg1; } /** * @brief Configures the Output serial clock source. * @param DFSDM_ClkOutSource: Defines the divider for the output serial clock * This parameter can be a value of: * @arg DFSDM_ClkOutSource_SysClock * @arg DFSDM_ClkOutSource_AudioClock * @retval None */ void DFSDM_ConfigClkOutputSource(uint32_t DFSDM_ClkOutSource) { uint32_t tmpreg1 = 0; /* Check the parameters */ assert_param(IS_DFSDM_CLOCK_OUT_SOURCE(DFSDM_ClkOutSource)); /* Get the DFSDM_Channel0 CHCFGR1 value */ tmpreg1 = DFSDM1_Channel0 -> CHCFGR1; /* Clear the CKOUTSRC bit */ tmpreg1 &= ~(DFSDM_CHCFGR1_CKOUTSRC); /* Set or Reset the CKOUTSRC bit */ tmpreg1 |= DFSDM_ClkOutSource; /* Write to DFSDM Channel0 CHCFGR1 */ DFSDM1_Channel0 -> CHCFGR1 = tmpreg1; } #endif /* STM32F412xG */ #if defined(STM32F413_423xx) /** * @brief Configures the Output serial clock divider. * @param Instance: select the instance of DFSDM * This parameter can be: 1 or 2. * @param DFSDM_ClkOutDivision: Defines the divider for the output serial clock * This parameter can be a value between 1 and 256. * @retval None * @note The output serial clock is stopped if the divider =1. * By default the serial output clock is stopped. */ void DFSDM_ConfigClkOutputDivider(uint32_t Instance, uint32_t DFSDM_ClkOutDivision) { uint32_t tmpreg1 = 0; if(Instance == 1) { /* Check the parameters */ assert_param(IS_DFSDM_CLOCK_OUT_DIVIDER(DFSDM_ClkOutDivision)); /* Get the DFSDM_Channel0 CHCFGR1 value */ tmpreg1 = DFSDM1_Channel0 -> CHCFGR1; /* Clear the CKOUTDIV bits */ tmpreg1 &= (uint32_t)(~DFSDM_CHCFGR1_CKOUTDIV); /* Set or Reset the CKOUTDIV bits */ tmpreg1 |= (uint32_t)((DFSDM_ClkOutDivision - 1) << 16); /* Write to DFSDM Channel0 CHCFGR1 */ DFSDM1_Channel0 -> CHCFGR1 = tmpreg1; } else /* DFSDM2 */ { /* Check the parameters */ assert_param(IS_DFSDM_CLOCK_OUT_DIVIDER(DFSDM_ClkOutDivision)); /* Get the DFSDM_Channel0 CHCFGR1 value */ tmpreg1 = DFSDM2_Channel0 -> CHCFGR1; /* Clear the CKOUTDIV bits */ tmpreg1 &= (uint32_t)(~DFSDM_CHCFGR1_CKOUTDIV); /* Set or Reset the CKOUTDIV bits */ tmpreg1 |= (uint32_t)((DFSDM_ClkOutDivision - 1) << 16); /* Write to DFSDM Channel0 CHCFGR1 */ DFSDM2_Channel0 -> CHCFGR1 = tmpreg1; } } /** * @brief Configures the Output serial clock source. * @param Instance: select the instance of DFSDM * This parameter can be: 1 or 2. * @param DFSDM_ClkOutSource: Defines the divider for the output serial clock * This parameter can be a value of: * @arg DFSDM_ClkOutSource_SysClock * @arg DFSDM_ClkOutSource_AudioClock * @retval None */ void DFSDM_ConfigClkOutputSource(uint32_t Instance, uint32_t DFSDM_ClkOutSource) { uint32_t tmpreg1 = 0; if(Instance == 1) { /* Check the parameters */ assert_param(IS_DFSDM_CLOCK_OUT_SOURCE(DFSDM_ClkOutSource)); /* Get the DFSDM_Channel0 CHCFGR1 value */ tmpreg1 = DFSDM1_Channel0 -> CHCFGR1; /* Clear the CKOUTSRC bit */ tmpreg1 &= ~(DFSDM_CHCFGR1_CKOUTSRC); /* Set or Reset the CKOUTSRC bit */ tmpreg1 |= DFSDM_ClkOutSource; /* Write to DFSDM Channel0 CHCFGR1 */ DFSDM1_Channel0 -> CHCFGR1 = tmpreg1; } else /* DFSDM2 */ { /* Check the parameters */ assert_param(IS_DFSDM_CLOCK_OUT_SOURCE(DFSDM_ClkOutSource)); /* Get the DFSDM_Channel0 CHCFGR1 value */ tmpreg1 = DFSDM2_Channel0 -> CHCFGR1; /* Clear the CKOUTSRC bit */ tmpreg1 &= ~(DFSDM_CHCFGR1_CKOUTSRC); /* Set or Reset the CKOUTSRC bit */ tmpreg1 |= DFSDM_ClkOutSource; /* Write to DFSDM Channel0 CHCFGR1 */ DFSDM2_Channel0 -> CHCFGR1 = tmpreg1; } } #endif /* STM32F413_423xx */ /** * @brief Enables or disables the specified Break_i siganl to the specified DFSDM_Channelx. * @param DFSDM_Channelx: specifies the channel to be selected. * This parameter can be one of the following values : * @arg DFSDM1_Channel0 : DFSDM 1 Channel 0 * @arg DFSDM1_Channel1 : DFSDM 1 Channel 1 * @arg DFSDM1_Channel2 : DFSDM 1 Channel 2 * @arg DFSDM1_Channel3 : DFSDM 1 Channel 3 * @arg DFSDM2_Channel0 : DFSDM 2 Channel 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel1 : DFSDM 2 Channel 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel2 : DFSDM 2 Channel 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel3 : DFSDM 2 Channel 3 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel4 : DFSDM 2 Channel 4 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel5 : DFSDM 2 Channel 5 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel6 : DFSDM 2 Channel 6 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel7 : DFSDM 2 Channel 7 (available only for STM32F413_423xx devices) * @param DFSDM_SCDBreak_i: where i can be a value from 0 to 3 to select the specified Break signal. * @param NewState: new state of the selected DFSDM_SCDBreak_i. * This parameter can be: ENABLE or DISABLE. * @retval None */ void DFSDM_ConfigBRKAnalogWatchDog(DFSDM_Channel_TypeDef* DFSDM_Channelx, uint32_t DFSDM_SCDBreak_i, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_CHANNEL(DFSDM_Channelx)); assert_param(IS_DFSDM_SCD_BREAK_SIGNAL(DFSDM_SCDBreak_i)); assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { /* Set the BKSCD[i] bit */ DFSDM_Channelx -> CHAWSCDR |= DFSDM_SCDBreak_i; } else { /* Reset the BKSCD[i] bit */ DFSDM_Channelx -> CHAWSCDR &= ~(DFSDM_SCDBreak_i); } } /** * @brief Enables or disables the specified Break_i siganl to the specified DFSDM_Channelx. * @param DFSDM_Channelx: specifies the channel to be selected. * This parameter can be one of the following values : * @arg DFSDM1_Channel0 : DFSDM 1 Channel 0 * @arg DFSDM1_Channel1 : DFSDM 1 Channel 1 * @arg DFSDM1_Channel2 : DFSDM 1 Channel 2 * @arg DFSDM1_Channel3 : DFSDM 1 Channel 3 * @arg DFSDM2_Channel0 : DFSDM 2 Channel 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel1 : DFSDM 2 Channel 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel2 : DFSDM 2 Channel 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel3 : DFSDM 2 Channel 3 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel4 : DFSDM 2 Channel 4 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel5 : DFSDM 2 Channel 5 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel6 : DFSDM 2 Channel 6 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel7 : DFSDM 2 Channel 7 (available only for STM32F413_423xx devices) * @param DFSDM_SCDBreak_i: where i can be a value from 0 to 3 to select the specified Break signal. * @param NewState: new state of the selected DFSDM_SCDBreak_i. * This parameter can be: ENABLE or DISABLE. * @retval None */ void DFSDM_ConfigBRKShortCircuitDetector(DFSDM_Channel_TypeDef* DFSDM_Channelx, uint32_t DFSDM_SCDBreak_i, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_CHANNEL(DFSDM_Channelx)); assert_param(IS_DFSDM_SCD_BREAK_SIGNAL(DFSDM_SCDBreak_i)); assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { /* Set the BKSCD[i] bit */ DFSDM_Channelx -> CHAWSCDR |= DFSDM_SCDBreak_i; } else { /* Reset the BKSCD[i] bit */ DFSDM_Channelx -> CHAWSCDR &= ~(DFSDM_SCDBreak_i); } } /** * @brief Defines the threshold counter for the short circuit detector for the selected DFSDM_Channelx. * @param DFSDM_Channelx: specifies the channel to be selected. * This parameter can be one of the following values : * @arg DFSDM1_Channel0 : DFSDM 1 Channel 0 * @arg DFSDM1_Channel1 : DFSDM 1 Channel 1 * @arg DFSDM1_Channel2 : DFSDM 1 Channel 2 * @arg DFSDM1_Channel3 : DFSDM 1 Channel 3 * @arg DFSDM2_Channel0 : DFSDM 2 Channel 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel1 : DFSDM 2 Channel 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel2 : DFSDM 2 Channel 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel3 : DFSDM 2 Channel 3 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel4 : DFSDM 2 Channel 4 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel5 : DFSDM 2 Channel 5 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel6 : DFSDM 2 Channel 6 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel7 : DFSDM 2 Channel 7 (available only for STM32F413_423xx devices) * @param DFSDM_SCDThreshold: The threshold counter, this parameter can be a value between 0 and 255. * @retval None */ void DFSDM_ConfigShortCircuitThreshold(DFSDM_Channel_TypeDef* DFSDM_Channelx, uint32_t DFSDM_SCDThreshold) { uint32_t tmpreg1 = 0; /* Check the parameters */ assert_param(IS_DFSDM_ALL_CHANNEL(DFSDM_Channelx)); assert_param(IS_DFSDM_CSD_THRESHOLD_VALUE(DFSDM_SCDThreshold)); /* Get the DFSDM_Channelx AWSCDR value */ tmpreg1 = DFSDM_Channelx -> CHAWSCDR; /* Clear the SCDT bits */ tmpreg1 &= ~(DFSDM_CHAWSCDR_SCDT); /* Set or Reset the SCDT bits */ tmpreg1 |= DFSDM_SCDThreshold; /* Write to DFSDM Channelx AWSCDR */ DFSDM_Channelx -> CHAWSCDR = tmpreg1; } /** * @brief Selects the channel to be guarded by the Analog watchdog for the selected DFSDMx, * and select if the fast analog watchdog is enabled or not. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param DFSDM_AWDChannelx: where x can be a value from 0 to 7 to select the DFSDM Channel. * @param DFSDM_AWDFastMode: The analog watchdog fast mode. * This parameter can be a value of @ref DFSDM_AWD_Fast_Mode_Selection. * @retval None */ void DFSDM_ConfigAnalogWatchdog(DFSDM_Filter_TypeDef* DFSDMx, uint32_t DFSDM_AWDChannelx, uint32_t DFSDM_AWDFastMode) { uint32_t tmpreg1 = 0; uint32_t tmpreg2 = 0; /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); assert_param(IS_DFSDM_AWD_CHANNEL(DFSDM_AWDChannelx)); assert_param(IS_DFSDM_AWD_MODE(DFSDM_AWDFastMode)); /* Get the DFSDMx CR2 value */ tmpreg1 = DFSDMx -> FLTCR2; /* Clear the AWDCH bits */ tmpreg1 &= ~(DFSDM_FLTCR2_AWDCH); /* Set or Reset the AWDCH bits */ tmpreg1 |= DFSDM_AWDChannelx; /* Write to DFSDMx CR2 Register */ DFSDMx -> FLTCR2 |= tmpreg1; /* Get the DFSDMx CR1 value */ tmpreg2 = DFSDMx->FLTCR1; /* Clear the AWFSEL bit */ tmpreg2 &= ~(DFSDM_FLTCR1_AWFSEL); /* Set or Reset the AWFSEL bit */ tmpreg2 |= DFSDM_AWDFastMode; /* Write to DFSDMx CR1 Register */ DFSDMx->FLTCR1 = tmpreg2; } /** * @brief Selects the channel to be guarded by the Analog watchdog of the selected DFSDMx, and the mode to be used. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param DFSDM_ExtremChannelx: where x can be a value from 0 to 7 to select the Channel to be connected * to the Extremes detector. * @retval None */ void DFSDM_SelectExtremesDetectorChannel(DFSDM_Filter_TypeDef* DFSDMx, uint32_t DFSDM_ExtremChannelx) { uint32_t tmpreg1 = 0; /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); assert_param(IS_DFSDM_EXTREM_CHANNEL(DFSDM_ExtremChannelx)); /* Get the DFSDMx CR2 value */ tmpreg1 = DFSDMx -> FLTCR2; /* Clear the EXCH bits */ tmpreg1 &= ~(DFSDM_FLTCR2_EXCH); /* Set or Reset the AWDCH bits */ tmpreg1 |= DFSDM_ExtremChannelx; /* Write to DFSDMx CR2 Register */ DFSDMx -> FLTCR2 = tmpreg1; } /** * @brief Returns the regular conversion data by the DFSDMx. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @retval The converted regular data. * @note This function returns a signed value. */ int32_t DFSDM_GetRegularConversionData(DFSDM_Filter_TypeDef* DFSDMx) { uint32_t reg = 0; int32_t value = 0; /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); /* Get value of data register for regular channel */ reg = DFSDMx -> FLTRDATAR; /* Extract conversion value */ value = (((reg & 0xFFFFFF00) >> 8)); /* Return the conversion result */ return value; } /** * @brief Returns the injected conversion data by the DFSDMx. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @retval The converted regular data. * @note This function returns a signed value. */ int32_t DFSDM_GetInjectedConversionData(DFSDM_Filter_TypeDef* DFSDMx) { uint32_t reg = 0; int32_t value = 0; /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); /* Get value of data register for regular channel */ reg = DFSDMx -> FLTJDATAR; /* Extract conversion value */ value = ((reg & 0xFFFFFF00) >> 8); /* Return the conversion result */ return value; } /** * @brief Returns the highest value converted by the DFSDMx. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @retval The highest converted value. * @note This function returns a signed value. */ int32_t DFSDM_GetMaxValue(DFSDM_Filter_TypeDef* DFSDMx) { int32_t value = 0; /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); value = ((DFSDMx -> FLTEXMAX) >> 8); /* Return the highest converted value */ return value; } /** * @brief Returns the lowest value converted by the DFSDMx. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @retval The lowest converted value. * @note This function returns a signed value. */ int32_t DFSDM_GetMinValue(DFSDM_Filter_TypeDef* DFSDMx) { int32_t value = 0; /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); value = ((DFSDMx -> FLTEXMIN) >> 8); /* Return the lowest conversion value */ return value; } /** * @brief Returns the number of channel on which is captured the highest converted data by the DFSDMx. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @retval The highest converted value. */ int32_t DFSDM_GetMaxValueChannel(DFSDM_Filter_TypeDef* DFSDMx) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); /* Return the highest converted value */ return ((DFSDMx -> FLTEXMAX) & (~DFSDM_FLTEXMAX_EXMAXCH)); } /** * @brief Returns the number of channel on which is captured the lowest converted data by the DFSDMx. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @retval The lowest converted value. */ int32_t DFSDM_GetMinValueChannel(DFSDM_Filter_TypeDef* DFSDMx) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); /* Return the lowest converted value */ return ((DFSDMx -> FLTEXMIN) & (~DFSDM_FLTEXMIN_EXMINCH)); } /** * @brief Returns the conversion time (in 28-bit timer unit) for DFSDMx. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @retval Conversion time. */ uint32_t DFSDM_GetConversionTime(DFSDM_Filter_TypeDef* DFSDMx) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); /* Return the lowest converted value */ return ((DFSDMx -> FLTCNVTIMR >> 4) & 0x0FFFFFFF); } /** * @brief Configures Sinc Filter for the Analog watchdog by setting * the Sinc filter order and the Oversampling ratio for the specified DFSDM_Channelx. * @param DFSDM_Channelx: specifies the channel to be selected. * This parameter can be one of the following values : * @arg DFSDM1_Channel0 : DFSDM 1 Channel 0 * @arg DFSDM1_Channel1 : DFSDM 1 Channel 1 * @arg DFSDM1_Channel2 : DFSDM 1 Channel 2 * @arg DFSDM1_Channel3 : DFSDM 1 Channel 3 * @arg DFSDM2_Channel0 : DFSDM 2 Channel 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel1 : DFSDM 2 Channel 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel2 : DFSDM 2 Channel 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel3 : DFSDM 2 Channel 3 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel4 : DFSDM 2 Channel 4 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel5 : DFSDM 2 Channel 5 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel6 : DFSDM 2 Channel 6 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel7 : DFSDM 2 Channel 7 (available only for STM32F413_423xx devices) * @param DFSDM_AWDSincOrder: The Sinc Filter order this parameter can be a value of @ref DFSDM_AWD_Sinc_Order. * @param DFSDM_AWDSincOverSampleRatio: The Filter Oversampling ratio, this parameter can be a value between 1 and 32. * @retval None */ void DFSDM_ConfigAWDFilter(DFSDM_Channel_TypeDef* DFSDM_Channelx, uint32_t DFSDM_AWDSincOrder, uint32_t DFSDM_AWDSincOverSampleRatio) { uint32_t tmpreg1 = 0; /* Check the parameters */ assert_param(IS_DFSDM_ALL_CHANNEL(DFSDM_Channelx)); assert_param(IS_DFSDM_AWD_SINC_ORDER(DFSDM_AWDSincOrder)); assert_param(IS_DFSDM_AWD_OVRSMPL_RATIO(DFSDM_AWDSincOverSampleRatio)); /* Get the DFSDM_Channelx CHAWSCDR value */ tmpreg1 = DFSDM_Channelx -> CHAWSCDR; /* Clear the FORD and FOSR bits */ tmpreg1 &= ~(DFSDM_CHAWSCDR_AWFORD | DFSDM_CHAWSCDR_AWFOSR); /* Set or Reset the SCDT bits */ tmpreg1 |= (DFSDM_AWDSincOrder | ((DFSDM_AWDSincOverSampleRatio -1) << 16)) ; /* Write to DFSDM Channelx CHAWSCDR */ DFSDM_Channelx -> CHAWSCDR = tmpreg1; } /** * @brief Returns the last Analog Watchdog Filter conversion result data for channelx. * @param DFSDM_Channelx: specifies the channel to be selected. * This parameter can be one of the following values : * @arg DFSDM1_Channel0 : DFSDM 1 Channel 0 * @arg DFSDM1_Channel1 : DFSDM 1 Channel 1 * @arg DFSDM1_Channel2 : DFSDM 1 Channel 2 * @arg DFSDM1_Channel3 : DFSDM 1 Channel 3 * @arg DFSDM2_Channel0 : DFSDM 2 Channel 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel1 : DFSDM 2 Channel 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel2 : DFSDM 2 Channel 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel3 : DFSDM 2 Channel 3 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel4 : DFSDM 2 Channel 4 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel5 : DFSDM 2 Channel 5 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel6 : DFSDM 2 Channel 6 (available only for STM32F413_423xx devices) * @arg DFSDM2_Channel7 : DFSDM 2 Channel 7 (available only for STM32F413_423xx devices) * @retval The Data conversion value. */ uint32_t DFSDM_GetAWDConversionValue(DFSDM_Channel_TypeDef* DFSDM_Channelx) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_CHANNEL(DFSDM_Channelx)); /* Return the last analog watchdog filter conversion value */ return DFSDM_Channelx -> CHWDATAR; } /** * @brief Configures the High Threshold and the Low threshold for the Analog watchdog of the selected DFSDMx. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param DFSDM_HighThreshold: High threshold value. This parameter can be value between 0 and 0xFFFFFF. * @param DFSDM_LowThreshold: Low threshold value. This parameter can be value between 0 and 0xFFFFFF. * @retval None. * @note In case of channels transceivers monitoring (Analog Watchdog fast mode Enabled)), * only the higher 16 bits define the 16-bit threshold compared with analog watchdog filter output. */ void DFSDM_SetAWDThreshold(DFSDM_Filter_TypeDef* DFSDMx, uint32_t DFSDM_HighThreshold, uint32_t DFSDM_LowThreshold) { uint32_t tmpreg1 = 0; uint32_t tmpreg2 = 0; /* Check the parameters */ assert_param(IS_DFSDM_HIGH_THRESHOLD(DFSDM_HighThreshold)); assert_param(IS_DFSDM_LOW_THRESHOLD(DFSDM_LowThreshold)); /* Get the DFSDMx AWHTR value */ tmpreg1 = DFSDMx -> FLTAWHTR; /* Clear the AWHT bits */ tmpreg1 &= ~(DFSDM_FLTAWHTR_AWHT); /* Set or Reset the AWHT bits */ tmpreg1 |= (DFSDM_HighThreshold << 8 ); /* Write to DFSDMx AWHTR Register */ DFSDMx -> FLTAWHTR = tmpreg1; /* Get the DFSDMx AWLTR value */ tmpreg2 = DFSDMx -> FLTAWLTR; /* Clear the AWLTR bits */ tmpreg2 &= ~(DFSDM_FLTAWLTR_AWLT); /* Set or Reset the AWLTR bits */ tmpreg2 |= (DFSDM_LowThreshold << 8 ); /* Write to DFSDMx AWLTR Register */ DFSDMx -> FLTAWLTR = tmpreg2; } /** * @brief Selects the injected channel for the selected DFSDMx. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param DFSDM_InjectedChannelx: where x can be a value from 0 to 7 to select the Channel to be configuraed as * injected channel. * @retval None * @note User can select up to 8 channels. */ void DFSDM_SelectInjectedChannel(DFSDM_Filter_TypeDef* DFSDMx, uint32_t DFSDM_InjectedChannelx) { uint32_t tmpreg1 = 0; /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); assert_param(IS_DFSDM_INJECT_CHANNEL(DFSDM_InjectedChannelx)); /* Get the DFSDMx JCHGR value */ tmpreg1 = DFSDMx -> FLTJCHGR; /* Clear the JCHGR bits */ tmpreg1 &= ~(DFSDM_FLTJCHGR_JCHG); /* Set or Reset the JCHGR bits */ tmpreg1 |= DFSDM_InjectedChannelx; /* Write to DFSDMx JCHGR Register */ DFSDMx -> FLTJCHGR |= tmpreg1; } /** * @brief Selects the regular channel for the selected DFSDMx. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param DFSDM_RegularChannelx: where x can be a value from 0 to 7 to select the Channel to be configurated as * regular channel. * @retval None * @note User can select only one channel. */ void DFSDM_SelectRegularChannel(DFSDM_Filter_TypeDef* DFSDMx, uint32_t DFSDM_RegularChannelx) { uint32_t tmpreg1 = 0; /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); assert_param(IS_DFSDM_REGULAR_CHANNEL(DFSDM_RegularChannelx)); /* Get the DFSDMx CR1 value */ tmpreg1 = DFSDMx -> FLTCR1; /* Clear the RCH bits */ tmpreg1 &= ~(DFSDM_FLTCR1_RCH); /* Set or Reset the RCH bits */ tmpreg1 |= DFSDM_RegularChannelx; /* Write to DFSDMx CR1 Register */ DFSDMx -> FLTCR1 = tmpreg1; } /** * @brief Starts a software start for the injected group of channels of the selected DFSDMx. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @retval None */ void DFSDM_StartSoftwareInjectedConversion(DFSDM_Filter_TypeDef* DFSDMx) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); /* Write 1 to DFSDMx CR1 RSWSTAR bit */ DFSDMx -> FLTCR1 |= DFSDM_FLTCR1_JSWSTART; } /** * @brief Starts a software start of the regular channel of the selected DFSDMx. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @retval None */ void DFSDM_StartSoftwareRegularConversion(DFSDM_Filter_TypeDef* DFSDMx) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); /* Write 1 to DFSDMx CR1 RSWSTAR bit */ DFSDMx -> FLTCR1 |= DFSDM_FLTCR1_RSWSTART; } /** * @brief Selects the Trigger signal to launch the injected conversions of the selected DFSDMx. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param DFSDM_InjectedTrigger: the trigger signal. * This parameter can be a value of: @ref DFSDM_Injected_Trigger_signal * @param DFSDM_TriggerEdge: the edge of the selected trigger * This parameter can be a value of: @ref DFSDM_Trigger_Edge_selection * @retval None. * @note This function can be used only when the filter is disabled, use DFSDM_FilterCmd() * to disable the filter. */ void DFSDM_ConfigInjectedTrigger(DFSDM_Filter_TypeDef* DFSDMx, uint32_t DFSDM_Trigger, uint32_t DFSDM_TriggerEdge) { uint32_t tmpreg1 = 0; /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); if (DFSDMx == DFSDM0) { assert_param(IS_DFSDM0_INJ_TRIGGER(DFSDM_Trigger)); } else { assert_param(IS_DFSDM1_INJ_TRIGGER(DFSDM_Trigger)); } assert_param(IS_DFSDM_TRIGGER_EDGE(DFSDM_TriggerEdge)); /* Get the DFSDMx CR1 value */ tmpreg1 = DFSDMx -> FLTCR1; /* Clear the JEXTSEL & JEXTEN bits */ tmpreg1 &= ~(DFSDM_FLTCR1_JEXTSEL | DFSDM_FLTCR1_JEXTEN); /* Set or Reset the JEXTSEL & JEXTEN bits */ tmpreg1 |= (DFSDM_Trigger | DFSDM_TriggerEdge); /* Write to DFSDMx CR1 Register */ DFSDMx -> FLTCR1 = tmpreg1; } /** * @brief Starts an injected conversion synchronously when in DFSDM0 * an injected conversion started by software. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @retval None * @note This function can be used only when the filter is disabled, use DFSDM_FilterCmd() * to disable the filter. */ void DFSDM_SynchronousFilter0InjectedStart(DFSDM_Filter_TypeDef* DFSDMx) { /* Check the parameters */ assert_param(IS_DFSDM_SYNC_FILTER(DFSDMx)); /* Write 1 to DFSDMx CR1 JSYNC bit */ DFSDMx -> FLTCR1 |= DFSDM_FLTCR1_JSYNC; } /** * @brief Starts a regular conversion synchronously when in DFSDM0 * a regular conversion started by software. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @retval None * @note This function can be used only when the filter is disabled, use DFSDM_FilterCmd() * to disable the filter. */ void DFSDM_SynchronousFilter0RegularStart(DFSDM_Filter_TypeDef* DFSDMx) { /* Check the parameters */ assert_param(IS_DFSDM_SYNC_FILTER(DFSDMx)); /* Write 1 to DFSDMx CR1 RSYNC bit */ DFSDMx -> FLTCR1 |= DFSDM_FLTCR1_RSYNC; } /** * @brief Enables or Disables the continue mode for Regular conversion for the selected filter DFSDMx. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param NewState: new state of the Continuous mode. * This parameter can be: ENABLE or DISABLE. * @retval None */ void DFSDM_RegularContinuousModeCmd(DFSDM_Filter_TypeDef* DFSDMx, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { /* Enable the RCONT bit */ DFSDMx -> FLTCR1 |= DFSDM_FLTCR1_RCONT; } else { /* Disable the RCONT bit */ DFSDMx -> FLTCR1 &= ~(DFSDM_FLTCR1_RCONT); } } /** * @brief Enables or Disables the Fast mode for the selected filter DFSDMx. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param NewState: new state of the Fast mode. * This parameter can be: ENABLE or DISABLE. * @retval None * @note If just a single channel is selected in continuous mode (either by executing a regular * conversion or by executing a injected conversion with only one channel selected), * the sampling rate can be increased several times by enabling the fast mode. * @note This function can be used only when the filter is disabled, use DFSDM_FilterCmd() * to disable the filter. */ void DFSDM_FastModeCmd(DFSDM_Filter_TypeDef* DFSDMx, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { /* Enable the FAST bit */ DFSDMx -> FLTCR1 |= DFSDM_FLTCR1_FAST; } else { /* Disable the FAST bit */ DFSDMx -> FLTCR1 &= ~(DFSDM_FLTCR1_FAST); } } /** * @brief Selects the injected conversions mode for the selected DFSDMx. * Injected conversions can operates in Single mode or Scan mode. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param DFSDM_InjectConvMode: The injected conversion mode, this parameter can be: * @arg DFSDM_InjectConvMode_Single * @arg DFSDM_InjectConvMode_Scan * @retval None. * @note This function can be used only when the filter is disabled, use DFSDM_FilterCmd() * to disable the filter. */ void DFSDM_SelectInjectedConversionMode(DFSDM_Filter_TypeDef* DFSDMx, uint32_t DFSDM_InjectConvMode) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); assert_param(IS_DFSDM_INJ_CONV_MODE(DFSDM_InjectConvMode)); /* Clear the JSCAN bit */ DFSDMx -> FLTCR1 &= ~(DFSDM_FLTCR1_JSCAN); /* Write to DFSDMx CR1 Register */ DFSDMx -> FLTCR1 |= DFSDM_InjectConvMode; } /** * @brief Enables or Disables the DMA to read data for the injected channel group of the selected filter DFSDMx. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param DFSDM_DMAConversionMode: Selects the mode to be configured for DMA read . * @arg DFSDM_DMAConversionMode_Regular: DMA channel Enabled/Disabled to read data for the regular conversion * @arg DFSDM_DMAConversionMode_Injected: DMA channel Enabled/Disabled to read data for the Injected conversion * @param NewState: new state of the DMA channel. * This parameter can be: ENABLE or DISABLE. * @retval None. * @note This function can be used only when the filter is disabled, use DFSDM_FilterCmd() * to disable the filter. */ void DFSDM_DMATransferConfig(DFSDM_Filter_TypeDef* DFSDMx, uint32_t DFSDM_DMAConversionMode, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); assert_param(IS_DFSDM_CONVERSION_MODE(DFSDM_DMAConversionMode)); assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { /* Enable the JDMAEN or RDMAEN bit */ DFSDMx -> FLTCR1 |= (DFSDM_FLTCR1_JDMAEN << DFSDM_DMAConversionMode) ; } else { /* Disable the JDMAEN or RDMAEN bit */ DFSDMx -> FLTCR1 &= ~(DFSDM_FLTCR1_JDMAEN << DFSDM_DMAConversionMode); } } /** @defgroup DFSDM_Group3 Interrupts and flags management functions * @brief Interrupts and flags management functions * @verbatim =============================================================================== Interrupts and flags management functions =============================================================================== This section provides functions allowing to configure the DFSDM Interrupts, get the status and clear flags bits. The LPT provides 7 Flags and Interrupts sources (2 flags and Interrupt sources are available only on LPT peripherals equipped with encoder mode interface) Flags and Interrupts sources: ============================= 1. End of injected conversion. 2. End of regular conversion. 3. Injected data overrun. 4. Regular data overrun. 5. Analog watchdog. 6. Short circuit detector. 7. Channel clock absence - To enable a specific interrupt source, use "DFSDM_ITConfig", "DFSDM_ITClockAbsenceCmd" and "DFSDM_ITShortCircuitDetectorCmd" functions. - To check if an interrupt was occurred, call "DFSDM_GetITStatus","DFSDM_GetClockAbsenceITStatusfunction" and "DFSDM_GetGetShortCircuitITStatus" functions and read returned values. - To get a flag status, call the "DFSDM_GetFlagStatus" ,"DFSDM_GetClockAbsenceFlagStatus" ,"DFSDM_GetShortCircuitFlagStatus" and "DFSDM_GetWatchdogFlagStatus" functions and read the returned value. - To clear a flag or an interrupt, use DFSDM_ClearFlag,DFSDM_ClearClockAbsenceFlag, DFSDM_ClearShortCircuitFlag,DFSDM_ClearAnalogWatchdogFlag functions with the corresponding flag (interrupt). @endverbatim * @{ */ /** * @brief Enables or disables the specified DFSDMx interrupts. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param DFSDM_IT: specifies the DFSDM interrupts sources to be enabled or disabled. * This parameter can be any combination of the following values: * @arg DFSDM_IT_JEOC: End of injected conversion Interrupt source * @arg DFSDM_IT_REOC: End of regular conversion Interrupt source * @arg DFSDM_IT_JOVR: Injected data overrun Interrupt source * @arg DFSDM_IT_ROVR: Regular data overrun Interrupt source * @arg DFSDM_IT_AWD : Analog watchdog Interrupt source * @param NewState: new state of the DFSDM interrupts. * This parameter can be: ENABLE or DISABLE. * @retval None */ void DFSDM_ITConfig(DFSDM_Filter_TypeDef* DFSDMx, uint32_t DFSDM_IT, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); assert_param(IS_DFSDM_IT(DFSDM_IT)); assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { /* Enable the Interrupt sources */ DFSDMx->FLTCR2 |= DFSDM_IT; } else { /* Disable the Interrupt sources */ DFSDMx->FLTCR2 &= ~(DFSDM_IT); } } #if defined(STM32F412xG) /** * @brief Enables or disables the Clock Absence Interrupt. * @param NewState: new state of the interrupt. * This parameter can be: ENABLE or DISABLE. * @retval None */ void DFSDM_ITClockAbsenceCmd(FunctionalState NewState) { /* Check the parameters */ assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { /* Enable the Interrupt source */ DFSDM1_0->FLTCR2 |= DFSDM_IT_CKAB; } else { /* Disable the Interrupt source */ DFSDM1_0->FLTCR2 &= ~(DFSDM_IT_CKAB); } } /** * @brief Enables or disables the Short Circuit Detector Interrupt. * @param NewState: new state of the interrupt. * This parameter can be: ENABLE or DISABLE. * @retval None */ void DFSDM_ITShortCircuitDetectorCmd(FunctionalState NewState) { /* Check the parameters */ assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { /* Enable the Interrupt source */ DFSDM1_0->FLTCR2 |= DFSDM_IT_SCD; } else { /* Disable the Interrupt source */ DFSDM1_0->FLTCR2 &= ~(DFSDM_IT_SCD); } } #endif /* STM32F412xG */ #if defined(STM32F413_423xx) /** * @brief Enables or disables the Clock Absence Interrupt. * @param Instance: select the instance of DFSDM * This parameter can be: 1 or 2. * @param NewState: new state of the interrupt. * This parameter can be: ENABLE or DISABLE. * @retval None */ void DFSDM_ITClockAbsenceCmd(uint32_t Instance, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_FUNCTIONAL_STATE(NewState)); if(Instance == 1) { if (NewState != DISABLE) { /* Enable the Interrupt source */ DFSDM1_0->FLTCR2 |= DFSDM_IT_CKAB; } else { /* Disable the Interrupt source */ DFSDM1_0->FLTCR2 &= ~(DFSDM_IT_CKAB); } } else /* DFSDM2 */ { if (NewState != DISABLE) { /* Enable the Interrupt source */ DFSDM2_0->FLTCR2 |= DFSDM_IT_CKAB; } else { /* Disable the Interrupt source */ DFSDM2_0->FLTCR2 &= ~(DFSDM_IT_CKAB); } } } /** * @brief Enables or disables the Short Circuit Detector Interrupt. * @param Instance: select the instance of DFSDM * This parameter can be: 1 or 2. * @param NewState: new state of the interrupt. * This parameter can be: ENABLE or DISABLE. * @retval None */ void DFSDM_ITShortCircuitDetectorCmd(uint32_t Instance, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_FUNCTIONAL_STATE(NewState)); if(Instance == 1) { if (NewState != DISABLE) { /* Enable the Interrupt source */ DFSDM1_0->FLTCR2 |= DFSDM_IT_SCD; } else { /* Disable the Interrupt source */ DFSDM1_0->FLTCR2 &= ~(DFSDM_IT_SCD); } } else /* DFSDM2 */ { if (NewState != DISABLE) { /* Enable the Interrupt source */ DFSDM2_0->FLTCR2 |= DFSDM_IT_SCD; } else { /* Disable the Interrupt source */ DFSDM2_0->FLTCR2 &= ~(DFSDM_IT_SCD); } } } #endif /* STM32F413_423xx */ /** * @brief Checks whether the specified DFSDM flag is set or not. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param LPT_FLAG: specifies the flag to check. * This parameter can be any combination of the following values: * @arg DFSDM_FLAG_JEOC: End of injected conversion Flag * @arg DFSDM_FLAG_REOC: End of regular conversion Flag * @arg DFSDM_FLAG_JOVR: Injected data overrun Flag * @arg DFSDM_FLAG_ROVR: Regular data overrun Flag * @arg DFSDM_FLAG_AWD: Analog watchdog Flag * @arg DFSDM_FLAG_JCIP: Injected conversion in progress status * @arg DFSDM_FLAG_RCIP: Regular conversion in progress status * @retval None */ FlagStatus DFSDM_GetFlagStatus(DFSDM_Filter_TypeDef* DFSDMx, uint32_t DFSDM_FLAG) { ITStatus bitstatus = RESET; /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); assert_param(IS_DFSDM_FLAG(DFSDM_FLAG)); if ((DFSDMx->FLTISR & DFSDM_FLAG) != RESET ) { bitstatus = SET; } else { bitstatus = RESET; } return bitstatus; } #if defined(STM32F412xG) /** * @brief Checks whether the specified Clock Absence Channel flag is set or not. * @param DFSDM_FLAG_CLKAbsence: specifies the flag to check. * This parameter can be a value of @ref DFSDM_Clock_Absence_Flag_Definition * @retval None */ FlagStatus DFSDM_GetClockAbsenceFlagStatus(uint32_t DFSDM_FLAG_CLKAbsence) { ITStatus bitstatus = RESET; /* Check the parameters */ assert_param(IS_DFSDM_CLK_ABS_FLAG(DFSDM_FLAG_CLKAbsence)); if((DFSDM1_0->FLTISR & DFSDM_FLAG_CLKAbsence) != RESET) { bitstatus = SET; } else { bitstatus = RESET; } return bitstatus; } /** * @brief Checks whether the specified Short Circuit Channel Detector flag is set or not. * @param DFSDM_FLAG_SCD: specifies the flag to check. * This parameter can be a value of @ref DFSDM_SCD_Flag_Definition * @retval None */ FlagStatus DFSDM_GetShortCircuitFlagStatus(uint32_t DFSDM_FLAG_SCD) { ITStatus bitstatus = RESET; /* Check the parameters */ assert_param(IS_DFSDM_SCD_FLAG(DFSDM_FLAG_SCD)); if ((DFSDM1_0->FLTISR & DFSDM_FLAG_SCD) != RESET) { bitstatus = SET; } else { bitstatus = RESET; } return bitstatus; } #endif /* STM32F412xG */ #if defined(STM32F413_423xx) /** * @brief Checks whether the specified Clock Absence Channel flag is set or not. * @param Instance: select the instance of DFSDM * This parameter can be: 1 or 2. * @param DFSDM_FLAG_CLKAbsence: specifies the flag to check. * This parameter can be a value of @ref DFSDM_Clock_Absence_Flag_Definition * @retval None */ FlagStatus DFSDM_GetClockAbsenceFlagStatus(uint32_t Instance, uint32_t DFSDM_FLAG_CLKAbsence) { ITStatus bitstatus = RESET; /* Check the parameters */ assert_param(IS_DFSDM_CLK_ABS_FLAG(DFSDM_FLAG_CLKAbsence)); if(Instance == 1) { if((DFSDM1_0->FLTISR & DFSDM_FLAG_CLKAbsence) != RESET) { bitstatus = SET; } else { bitstatus = RESET; } } else /* DFSDM2 */ { /* Check the parameters */ assert_param(IS_DFSDM_CLK_ABS_FLAG(DFSDM_FLAG_CLKAbsence)); if((DFSDM2_0->FLTISR & DFSDM_FLAG_CLKAbsence) != RESET) { bitstatus = SET; } else { bitstatus = RESET; } } return bitstatus; } /** * @brief Checks whether the specified Short Circuit Channel Detector flag is set or not. * @param Instance: select the instance of DFSDM * This parameter can be: 1 or 2. * @param DFSDM_FLAG_SCD: specifies the flag to check. * This parameter can be a value of @ref DFSDM_SCD_Flag_Definition * @retval None */ FlagStatus DFSDM_GetShortCircuitFlagStatus(uint32_t Instance, uint32_t DFSDM_FLAG_SCD) { ITStatus bitstatus = RESET; /* Check the parameters */ assert_param(IS_DFSDM_SCD_FLAG(DFSDM_FLAG_SCD)); if(Instance == 1) { if ((DFSDM1_0->FLTISR & DFSDM_FLAG_SCD) != RESET) { bitstatus = SET; } else { bitstatus = RESET; } } else /* DFSDM2 */ { if ((DFSDM2_0->FLTISR & DFSDM_FLAG_SCD) != RESET) { bitstatus = SET; } else { bitstatus = RESET; } } return bitstatus; } #endif /* STM32F413_423xx */ /** * @brief Checks whether the specified Watchdog threshold flag is set or not. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param DFSDM_AWDChannelx: where x can be a value from 0 to 7 to select the DFSDM Channel. * @param DFSDM_Threshold: specifies the Threshold. * This parameter can be a value of @ref DFSDM_Threshold_Selection. * @retval None */ FlagStatus DFSDM_GetWatchdogFlagStatus(DFSDM_Filter_TypeDef* DFSDMx, uint32_t DFSDM_AWDChannelx, uint8_t DFSDM_Threshold) { ITStatus bitstatus = RESET; /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); assert_param(IS_DFSDM_Threshold(DFSDM_Threshold)); assert_param(IS_DFSDM_AWD_CHANNEL(DFSDM_AWDChannelx)); if ((DFSDMx->FLTAWSR & ((DFSDM_AWDChannelx >> 16) << DFSDM_Threshold) ) != RESET) { bitstatus = SET; } else { bitstatus = RESET; } return bitstatus; } /** * @brief Clears the DFSDMx's pending flag. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param DFSDM_CLEARF: specifies the pending bit to clear. * This parameter can be any combination of the following values: * @arg DFSDM_CLEARF_JOVR: Injected data overrun Clear Flag * @arg DFSDM_CLEARF_ROVR: Regular data overrun Clear Flag * @retval None */ void DFSDM_ClearFlag(DFSDM_Filter_TypeDef* DFSDMx, uint32_t DFSDM_CLEARF) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); assert_param(IS_DFSDM_CLEAR_FLAG(DFSDM_CLEARF)); /* Clear the pending Flag Bit */ DFSDMx->FLTICR |= DFSDM_CLEARF; } #if defined(STM32F412xG) /** * @brief Clears the DFSDMx's pending Clock Absence Channel flag. * @param DFSDM_CLEARF_CLKAbsence: specifies the pending bit to clear. * This parameter can be any combination of @ref DFSDM_Clear_ClockAbs_Flag_Definition * @retval None */ void DFSDM_ClearClockAbsenceFlag(uint32_t DFSDM_CLEARF_CLKAbsence) { /* Check the parameters */ assert_param(IS_DFSDM_CLK_ABS_CLEARF(DFSDM_CLEARF_CLKAbsence)); /* Clear the IT pending Flag Bit */ DFSDM1_0->FLTICR |= DFSDM_CLEARF_CLKAbsence; } /** * @brief Clears the DFSDMx's pending Short circuit Channel flag. * @param DFSDM_CLEARF_SCD: specifies the pending bit to clear. * This parameter can be any combination of @ref DFSDM_Clear_Short_Circuit_Flag_Definition * @retval None */ void DFSDM_ClearShortCircuitFlag(uint32_t DFSDM_CLEARF_SCD) { /* Check the parameters */ assert_param(IS_DFSDM_SCD_CHANNEL_FLAG(DFSDM_CLEARF_SCD)); /* Clear the pending Flag Bit */ DFSDM1_0->FLTICR |= DFSDM_CLEARF_SCD; } #endif /* STM32F412xG */ #if defined(STM32F413_423xx) /** * @brief Clears the DFSDMx's pending Clock Absence Channel flag. * @param Instance: select the instance of DFSDM * This parameter can be: 1 or 2. * @param DFSDM_CLEARF_CLKAbsence: specifies the pending bit to clear. * This parameter can be any combination of @ref DFSDM_Clear_ClockAbs_Flag_Definition * @retval None */ void DFSDM_ClearClockAbsenceFlag(uint32_t Instance, uint32_t DFSDM_CLEARF_CLKAbsence) { /* Check the parameters */ assert_param(IS_DFSDM_CLK_ABS_CLEARF(DFSDM_CLEARF_CLKAbsence)); if(Instance == 1) { /* Clear the IT pending Flag Bit */ DFSDM1_0->FLTICR |= DFSDM_CLEARF_CLKAbsence; } else /* DFSDM2 */ { /* Clear the IT pending Flag Bit */ DFSDM2_0->FLTICR |= DFSDM_CLEARF_CLKAbsence; } } /** * @brief Clears the DFSDMx's pending Short circuit Channel flag. * @param Instance: select the instance of DFSDM * This parameter can be: 1 or 2. * @param DFSDM_CLEARF_SCD: specifies the pending bit to clear. * This parameter can be any combination of @ref DFSDM_Clear_Short_Circuit_Flag_Definition * @retval None */ void DFSDM_ClearShortCircuitFlag(uint32_t Instance, uint32_t DFSDM_CLEARF_SCD) { /* Check the parameters */ assert_param(IS_DFSDM_SCD_CHANNEL_FLAG(DFSDM_CLEARF_SCD)); if(Instance == 1) { /* Clear the pending Flag Bit */ DFSDM1_0->FLTICR |= DFSDM_CLEARF_SCD; } else { /* Clear the pending Flag Bit */ DFSDM2_0->FLTICR |= DFSDM_CLEARF_SCD; } } #endif /* STM32F413_423xx */ /** * @brief Clears the DFSDMx's pending Analog watchdog Channel flag. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param DFSDM_AWDChannelx: where x can be a value from 0 to 7 to select the DFSDM Channel. * @param DFSDM_Threshold: specifies the Threshold. * This parameter can be a value of @ref DFSDM_Threshold_Selection. * @retval None */ void DFSDM_ClearAnalogWatchdogFlag(DFSDM_Filter_TypeDef* DFSDMx, uint32_t DFSDM_AWDChannelx, uint8_t DFSDM_Threshold) { /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); assert_param(IS_DFSDM_Threshold(DFSDM_Threshold)); assert_param(IS_DFSDM_AWD_CHANNEL(DFSDM_AWDChannelx)); if ((DFSDMx->FLTAWSR & ((DFSDM_AWDChannelx >> 16) << DFSDM_Threshold) ) != RESET) { /* Clear the pending Flag Bit */ DFSDMx->FLTAWCFR |= (DFSDM_AWDChannelx >> 16) << DFSDM_Threshold; } } /** * @brief Check whether the specified DFSDM interrupt has occurred or not. * @param DFSDMx: specifies the filter to be selected : * This parameter can be one of the following values : * @arg DFSDM1_0 : DFSDM 1 Filter 0 * @arg DFSDM1_1 : DFSDM 1 Filter 1 * @arg DFSDM2_0 : DFSDM 2 Filter 0 (available only for STM32F413_423xx devices) * @arg DFSDM2_1 : DFSDM 2 Filter 1 (available only for STM32F413_423xx devices) * @arg DFSDM2_2 : DFSDM 2 Filter 2 (available only for STM32F413_423xx devices) * @arg DFSDM2_3 : DFSDM 2 Filter 3 (available only for STM32F413_423xx devices) * @param DFSDM_IT: specifies the DFSDM interrupt source to check. * @arg DFSDM_IT_JEOC: End of injected conversion Interrupt source * @arg DFSDM_IT_REOC: End of regular conversion Interrupt source * @arg DFSDM_IT_JOVR: Injected data overrun Interrupt source * @arg DFSDM_IT_ROVR: Regular data overrun Interrupt source * @arg DFSDM_IT_AWD : Analog watchdog Interrupt source * @retval The new state of DFSDM_IT (SET or RESET). */ ITStatus DFSDM_GetITStatus(DFSDM_Filter_TypeDef* DFSDMx, uint32_t DFSDM_IT) { ITStatus bitstatus = RESET; uint32_t itstatus = 0x0, itenable = 0x0; /* Check the parameters */ assert_param(IS_DFSDM_ALL_FILTER(DFSDMx)); assert_param(IS_DFSDM_IT(DFSDM_IT)); /* Get the Interrupt Status bit value */ itstatus = DFSDMx->FLTISR & DFSDM_IT; /* Check if the Interrupt is enabled */ itenable = DFSDMx->FLTCR2 & DFSDM_IT; if ((itstatus != RESET) && (itenable != RESET)) { bitstatus = SET; } else { bitstatus = RESET; } return bitstatus; } #if defined(STM32F412xG) /** * @brief Check whether the specified Clock Absence channel interrupt has occurred or not. * @param DFSDM_IT_CLKAbsence: specifies on which channel check the interrupt source. * This parameter can be a value of @ref DFSDM_Clock_Absence_Interrupt_Definition. * @retval The new state of DFSDM_IT (SET or RESET). * @note Clock absence interrupt is handled only by DFSDM0. */ ITStatus DFSDM_GetClockAbsenceITStatus(uint32_t DFSDM_IT_CLKAbsence) { ITStatus bitstatus = RESET; uint32_t itstatus = 0x0, itenable = 0x0; /* Check the parameters */ assert_param(IS_DFSDM_CLK_ABS_IT(DFSDM_IT_CLKAbsence)); /* Get the Interrupt Status bit value */ itstatus = DFSDM0->FLTISR & DFSDM_IT_CLKAbsence; /* Check if the Interrupt is enabled */ itenable = DFSDM0->FLTCR2 & DFSDM_IT_CKAB; if ((itstatus != RESET) && (itenable != RESET)) { bitstatus = SET; } else { bitstatus = RESET; } return bitstatus; } /** * @brief Check whether the specified Short Circuit channel interrupt has occurred or not. * @param DFSDM_IT_SCR: specifies on which channel check the interrupt source. * This parameter can be a value of @ref DFSDM_SCD_Interrupt_Definition. * @retval The new state of DFSDM_IT (SET or RESET). * @note Short circuit interrupt is handled only by DFSDM0. */ ITStatus DFSDM_GetShortCircuitITStatus(uint32_t DFSDM_IT_SCR) { ITStatus bitstatus = RESET; uint32_t itstatus = 0x0, itenable = 0x0; /* Check the parameters */ assert_param(IS_DFSDM_SCD_IT(DFSDM_IT_SCR)); /* Get the Interrupt Status bit value */ itstatus = DFSDM0->FLTISR & DFSDM_IT_SCR; /* Check if the Interrupt is enabled */ itenable = DFSDM0->FLTCR2 & DFSDM_IT_SCD; if ((itstatus != RESET) && (itenable != RESET)) { bitstatus = SET; } else { bitstatus = RESET; } return bitstatus; } #endif /* STM32F412xG */ #if defined(STM32F413_423xx) /** * @brief Check whether the specified Clock Absence channel interrupt has occurred or not. * @param Instance: select the instance of DFSDM * This parameter can be: 1 or 2. * @param DFSDM_IT_CLKAbsence: specifies on which channel check the interrupt source. * This parameter can be a value of @ref DFSDM_Clock_Absence_Interrupt_Definition. * @retval The new state of DFSDM_IT (SET or RESET). * @note Clock absence interrupt is handled only by DFSDM0. */ ITStatus DFSDM_GetClockAbsenceITStatus(uint32_t Instance, uint32_t DFSDM_IT_CLKAbsence) { ITStatus bitstatus = RESET; uint32_t itstatus = 0x0, itenable = 0x0; /* Check the parameters */ assert_param(IS_DFSDM_CLK_ABS_IT(DFSDM_IT_CLKAbsence)); if(Instance == 1) { /* Get the Interrupt Status bit value */ itstatus = DFSDM1_0->FLTISR & DFSDM_IT_CLKAbsence; /* Check if the Interrupt is enabled */ itenable = DFSDM1_0->FLTCR2 & DFSDM_IT_CKAB; } else { /* Get the Interrupt Status bit value */ itstatus = DFSDM2_0->FLTISR & DFSDM_IT_CLKAbsence; /* Check if the Interrupt is enabled */ itenable = DFSDM1_0->FLTCR2 & DFSDM_IT_CKAB; } if ((itstatus != RESET) && (itenable != RESET)) { bitstatus = SET; } else { bitstatus = RESET; } return bitstatus; } /** * @brief Check whether the specified Short Circuit channel interrupt has occurred or not. * @param Instance: select the instance of DFSDM * This parameter can be: 1 or 2. * @param DFSDM_IT_SCR: specifies on which channel check the interrupt source. * This parameter can be a value of @ref DFSDM_SCD_Interrupt_Definition. * @retval The new state of DFSDM_IT (SET or RESET). * @note Short circuit interrupt is handled only by Filter 0. */ ITStatus DFSDM_GetShortCircuitITStatus(uint32_t Instance, uint32_t DFSDM_IT_SCR) { ITStatus bitstatus = RESET; uint32_t itstatus = 0x0, itenable = 0x0; /* Check the parameters */ assert_param(IS_DFSDM_SCD_IT(DFSDM_IT_SCR)); if(Instance == 1) { /* Get the Interrupt Status bit value */ itstatus = DFSDM1_0->FLTISR & DFSDM_IT_SCR; /* Check if the Interrupt is enabled */ itenable = DFSDM1_0->FLTCR2 & DFSDM_IT_SCD; } else /* DFSDM2 */ { /* Get the Interrupt Status bit value */ itstatus = DFSDM2_0->FLTISR & DFSDM_IT_SCR; /* Check if the Interrupt is enabled */ itenable = DFSDM2_0->FLTCR2 & DFSDM_IT_SCD; } if ((itstatus != RESET) && (itenable != RESET)) { bitstatus = SET; } else { bitstatus = RESET; } return bitstatus; } #endif /* STM32F413_423xx */ /** * @} */ /** * @} */ #endif /* STM32F412xG || STM32F413_423xx */ /** * @} */ /** * @} */