
uint16_t ComparatorInitial(void) { uint32_t u32_StsCheckimeOut; GPIOPinInitial(LOOP_POSITIVE_ISOLLATED_MONITOR_PORT, LOOP_POSITIVE_ISOLLATED_MONITOR_PIN_NUMBER, GPIO_MOD_ANALOG_FUNCTION, GPIO_NOPUPD); /* Enable the VREFINT by setting EN_VREFINT bit in the CFGR3 register */ RCC->APB2ENR |= (RCC_APB2ENR_SYSCFGEN); SYSCFG->CFGR3 |= SYSCFG_CFGR3_EN_BGAP; /* Enable the Buffer for the COMP by setting EN_VREFINT bit and the ENBUFLP_VREFINT_COMP in the CFGR3 register */ SYSCFG->CFGR3 |= (SYSCFG_CFGR3_ENBUFLP_BGAP_COMP | SYSCFG_CFGR3_EN_BGAP); // CLEAR CSR COMP2->CSR = 0; COMP2->CSR |= (COMP_CSR_COMP2INPSEL_PA3); #if ((LOOP_POSITIVE_ISOLLATED_MONITOR_PORT == GPIO_A) && (LOOP_POSITIVE_ISOLLATED_MONITOR_PIN_NUMBER == 3)) COMP2->CSR |= (COMP_CSR_COMP2INPSEL_PA3 | COMP_CSR_COMP2INNSEL_VREFINT_3_DIV_4); #elif ((LOOP_POSITIVE_ISOLLATED_MONITOR_PORT == GPIO_B) && (LOOP_POSITIVE_ISOLLATED_MONITOR_PIN_NUMBER == 4)) COMP2->CSR |= (COMP_CSR_COMP2INPSEL_PB4 | COMP_CSR_COMP2INNSEL_VREFINT_DIV4); #else COMP2->CSR |= (COMP_CSR_COMP2INPSEL_PA3 | COMP_CSR_COMP2INNSEL_VREFINT_3_DIV_4); #endif COMP2->CSR |= COMP_CSR_COMP2SPEED; COMP2->CSR &= (~COMP_CSR_COMPxEN); EXTI->FTSR |= COMP_EXTI_LINE_COMP2_EVENT; EXTI->RTSR |= COMP_EXTI_LINE_COMP2_EVENT; EXTI->IMR |= COMP_EXTI_LINE_COMP2_EVENT; EXTI->PR |= COMP_EXTI_LINE_COMP2_EVENT; // VREFINT Check /* VREFINT reference for ADC enable bit*/ SYSCFG->CFGR3 |= (SYSCFG_CFGR3_ENBUF_BGAP_ADC); u32_StsCheckimeOut = GET_SYSTEM_TICK_VALUE(); while (RESET == (SYSCFG->CFGR3 &= (~SYSCFG_VREFINT_ADC_RDYF))) { if (GET_SYSTEM_TICK_ECLIPSE(u32_StsCheckimeOut) > CHECK_STATUS_TIMEROUT_TICK) { return ERROR; } } while (RESET == (SYSCFG->CFGR3 &= (~SYSCFG_CFGR3_VREFINT_COMP_RDYF))) { if (GET_SYSTEM_TICK_ECLIPSE(u32_StsCheckimeOut) > CHECK_STATUS_TIMEROUT_TICK) { return ERROR; } } /*Configure the NVIC for COMP2 */ NVIC_SetPriority(ADC1_COMP_IRQn, INTERRUPT_PRIORITY_COMPARATOR); NVIC_EnableIRQ(ADC1_COMP_IRQn); return SUCCESS; } void ComparatorConfig(FlagStatus enum_SetReset) { if (enum_SetReset == RESET) { COMP2->CSR &= (~COMP_CSR_COMPxEN); } else { COMP2->CSR |= COMP_CSR_COMPxEN; } } |
。。。