/** * @brief Initializes the COMP2 peripheral according to the specified parameters * in the COMP_InitStruct: * - COMP_InvertingInput specify the inverting input of COMP2 * - COMP_OutputSelect connect the output of COMP2 to selected timer * input (Input capture / Output Compare Reference Clear) * - COMP_Speed configures COMP2 speed for optimum speed/consumption ratio * @note This function configures only COMP2. * @note COMP2 comparator is enabled as soon as the INSEL[2:0] bits are * different from "000". * @param COMP_InitStruct: pointer to an COMP_InitTypeDef structure that contains * the configuration information for the specified COMP peripheral. * @retval None */ void COMP_Init(COMP_InitTypeDef* COMP_InitStruct) { uint32_t tmpreg = 0; /* Check the parameters */ assert_param(IS_COMP_INVERTING_INPUT(COMP_InitStruct->COMP_InvertingInput)); assert_param(IS_COMP_OUTPUT(COMP_InitStruct->COMP_OutputSelect)); assert_param(IS_COMP_SPEED(COMP_InitStruct->COMP_Speed)); /*!< Get the COMP CSR value */ tmpreg = COMP->CSR; /*!< Clear the INSEL[2:0], OUTSEL[1:0] and SPEED bits */ tmpreg &= (uint32_t) (~(uint32_t) (COMP_CSR_OUTSEL | COMP_CSR_INSEL | COMP_CSR_SPEED)); /*!< Configure COMP: speed, inversion input selection and output redirection */ /*!< Set SPEED bit according to COMP_InitStruct->COMP_Speed value */ /*!< Set INSEL bits according to COMP_InitStruct->COMP_InvertingInput value */ /*!< Set OUTSEL bits according to COMP_InitStruct->COMP_OutputSelect value */ tmpreg |= (uint32_t)((COMP_InitStruct->COMP_Speed | COMP_InitStruct->COMP_InvertingInput | COMP_InitStruct->COMP_OutputSelect)); /*!< The COMP2 comparator is enabled as soon as the INSEL[2:0] bits value are different from "000" */ /*!< Write to COMP_CSR register */ COMP->CSR = tmpreg; }
/** * @brief Initializes the COMP peripheral according to the specified parameters * in COMP_InitStruct * @note If the selected comparator is locked, initialization can't be performed. * To unlock the configuration, perform a system reset. * @note By default, PA1 is selected as COMP1 non inverting input. * To use PA4 as COMP1 non inverting input call COMP_SwitchCmd() after COMP_Init() * @param COMP_Selection: the selected comparator. * This parameter can be one of the following values: * @arg COMP_Selection_COMP1: COMP1 selected * @arg COMP_Selection_COMP2: COMP2 selected * @param COMP_InitStruct: pointer to an COMP_InitTypeDef structure that contains * the configuration information for the specified COMP peripheral. * @retval None */ void COMP_Init(uint32_t COMP_Selection, COMP_InitTypeDef* COMP_InitStruct) { uint32_t tmpreg = 0; /* Check the parameters */ assert_param(IS_COMP_ALL_PERIPH(COMP_Selection)); assert_param(IS_COMP_INVERTING_INPUT(COMP_InitStruct->COMP_InvertingInput)); assert_param(IS_COMP_OUTPUT(COMP_InitStruct->COMP_Output)); assert_param(IS_COMP_OUTPUT_POL(COMP_InitStruct->COMP_OutputPol)); assert_param(IS_COMP_HYSTERESIS(COMP_InitStruct->COMP_Hysteresis)); assert_param(IS_COMP_MODE(COMP_InitStruct->COMP_Mode)); /*!< Get the COMP_CSR register value */ tmpreg = COMP->CSR; /*!< Clear the COMP1SW1, COMPx_IN_SEL, COMPx_OUT_TIM_SEL, COMPx_POL, COMPx_HYST and COMPx_PWR_MODE bits */ tmpreg &= (uint32_t) ~(COMP_CSR_CLEAR_MASK<<COMP_Selection); /*!< Configure COMP: inverting input, output redirection, hysteresis value and power mode */ /*!< Set COMPxINSEL bits according to COMP_InitStruct->COMP_InvertingInput value */ /*!< Set COMPxOUTSEL bits according to COMP_InitStruct->COMP_Output value */ /*!< Set COMPxPOL bit according to COMP_InitStruct->COMP_OutputPol value */ /*!< Set COMPxHYST bits according to COMP_InitStruct->COMP_Hysteresis value */ /*!< Set COMPxMODE bits according to COMP_InitStruct->COMP_Mode value */ tmpreg |= (uint32_t)((COMP_InitStruct->COMP_InvertingInput | COMP_InitStruct->COMP_Output | COMP_InitStruct->COMP_OutputPol | COMP_InitStruct->COMP_Hysteresis | COMP_InitStruct->COMP_Mode)<<COMP_Selection); /*!< Write to COMP_CSR register */ COMP->CSR = tmpreg; }
/** * @brief Initializes the COMP peripheral according to the specified parameters * in COMP_InitStruct * @note If the selected comparator is locked, initialization can't be performed. * To unlock the configuration, perform a system reset. * @note By default, PA1 is selected as COMP1 non inverting input. * To use PA4 as COMP1 non inverting input call COMP_SwitchCmd() after COMP_Init() * @param COMP_Selection: the selected comparator. * This parameter can be COMP_Selection_COMPx where x can be 1 to 7 * to select the COMP peripheral. * @param COMP_InitStruct: pointer to an COMP_InitTypeDef structure that contains * the configuration information for the specified COMP peripheral. * - COMP_InvertingInput specifies the inverting input of COMP * - COMP_NonInvertingInput specifies the non inverting input of COMP * - COMP_Output connect COMP output to selected timer * input (Input capture / Output Compare Reference Clear / Break Input) * - COMP_BlankingSrce specifies the blanking source of COMP * - COMP_OutputPol select output polarity * - COMP_Hysteresis configures COMP hysteresis value * - COMP_Mode configures COMP power mode * @note COMP_Hysteresis must be configured only for STM32F303xC. Otherwise, COMP_Hysteresis * must be kept at reset value(COMP_Hysteresis_No). * @note COMP_Mode field is only applicable for STM32F303xC devices. * @retval None */ void COMP_Init(uint32_t COMP_Selection, COMP_InitTypeDef* COMP_InitStruct) { uint32_t tmpreg = 0; /* Check the parameters */ assert_param(IS_COMP_ALL_PERIPH(COMP_Selection)); assert_param(IS_COMP_INVERTING_INPUT(COMP_InitStruct->COMP_InvertingInput)); assert_param(IS_COMP_NONINVERTING_INPUT(COMP_InitStruct->COMP_NonInvertingInput)); assert_param(IS_COMP_OUTPUT(COMP_InitStruct->COMP_Output)); assert_param(IS_COMP_BLANKING_SOURCE(COMP_InitStruct->COMP_BlankingSrce)); assert_param(IS_COMP_OUTPUT_POL(COMP_InitStruct->COMP_OutputPol)); assert_param(IS_COMP_HYSTERESIS(COMP_InitStruct->COMP_Hysteresis)); assert_param(IS_COMP_MODE(COMP_InitStruct->COMP_Mode)); /*!< Get the COMPx_CSR register value */ tmpreg = *(__IO uint32_t *) (COMP_BASE + COMP_Selection); /*!< Clear the COMP1SW1, COMPxINSEL, COMPxOUTSEL, COMPxPOL, COMPxHYST and COMPxMODE bits */ tmpreg &= (uint32_t) (COMP_CSR_CLEAR_MASK); /*!< Configure COMP: inverting input, output redirection, hysteresis value and power mode */ /*!< Set COMPxINSEL bits according to COMP_InitStruct->COMP_InvertingInput value */ /*!< Set COMPxNONINSEL bits according to COMP_InitStruct->COMP_NonInvertingInput value */ /*!< Set COMPxBLANKING bits according to COMP_InitStruct->COMP_BlankingSrce value */ /*!< Set COMPxOUTSEL bits according to COMP_InitStruct->COMP_Output value */ /*!< Set COMPxPOL bit according to COMP_InitStruct->COMP_OutputPol value */ /*!< Set COMPxHYST bits according to COMP_InitStruct->COMP_Hysteresis value */ /*!< Set COMPxMODE bits according to COMP_InitStruct->COMP_Mode value */ tmpreg |= (uint32_t)(COMP_InitStruct->COMP_InvertingInput | COMP_InitStruct->COMP_NonInvertingInput | COMP_InitStruct->COMP_Output | COMP_InitStruct->COMP_OutputPol | COMP_InitStruct->COMP_BlankingSrce | COMP_InitStruct->COMP_Hysteresis | COMP_InitStruct->COMP_Mode); /*!< Write to COMPx_CSR register */ *(__IO uint32_t *) (COMP_BASE + COMP_Selection) = tmpreg; }
/** * @brief Initializes the comparator inverting input, output and speed. * @note This function configures only COMP2. * @param COMP_InvertingInput : selects the comparator inverting input. * This parameter can be one of the following values: * @arg COMP_InvertingInput_IO: Input/Output on comparator inverting input enable * @arg COMP_InvertingInput_VREFINT: VREFINT on comparator inverting input enable * @arg COMP_InvertingInput_3_4VREFINT: 3/4 VREFINT on comparator inverting input enable * @arg COMP_InvertingInput_1_2VREFINT: 1/2 VREFINT on comparator inverting input enable * @arg COMP_InvertingInput_1_4VREFINT: 1/4 VREFINT on comparator inverting input enable * @arg COMP_InvertingInput_DAC1: DAC1 output on comparator inverting input enable * @arg COMP_InvertingInput_DAC2: DAC2 output on comparator inverting input enable * @param COMP_OutputSelect : selects the comparator output * This parameter can be one of the following values: * @arg COMP_OutputSelect_TIM2IC2: COMP2 output connected to TIM2 Input Capture 2 * @arg COMP_OutputSelect_TIM3IC2: COMP2 output connected to TIM3 Input Capture 2 * @arg COMP_OutputSelect_TIM1BRK: COMP2 output connected to TIM1 Break Input * @arg COMP_OutputSelect_TIM1OCREFCLR: COMP2 output connected to TIM1 OCREF Clear * @param COMP_Speed selects the comparator speed * This parameter can be one of the following values: * @arg COMP_Speed_Slow: Comparator speed: slow * @arg COMP_Speed_Fast: Comparator speed: fast * @retval None. */ void COMP_Init(COMP_InvertingInput_Typedef COMP_InvertingInput, COMP_OutputSelect_Typedef COMP_OutputSelect, COMP_Speed_TypeDef COMP_Speed) { /* Check the parameters */ assert_param(IS_COMP_INVERTING_INPUT(COMP_InvertingInput)); assert_param(IS_COMP_OUTPUT(COMP_OutputSelect)); assert_param(IS_COMP_SPEED(COMP_Speed)); /* Reset the INSEL[2:0] bits in CSR3 register */ COMP->CSR3 &= (uint8_t) (~COMP_CSR3_INSEL); /* Select the comparator inverting input */ COMP->CSR3 |= (uint8_t) COMP_InvertingInput; /* Reset the OUTSEL[1:0] bits in CSR3 register */ COMP->CSR3 &= (uint8_t) (~COMP_CSR3_OUTSEL); /* Redirect the comparator output */ COMP->CSR3 |= (uint8_t) COMP_OutputSelect; /* Reset the comparator speed bit */ COMP->CSR2 &= (uint8_t) (~COMP_CSR2_SPEED); /* Select the comparator speed */ COMP->CSR2 |= (uint8_t) COMP_Speed; }