用 CubeIDE 和 LL 库配置了比较器的设置,以下是生成的代码片段:
COMP_InitStruct.PowerMode = LL_COMP_POWERMODE_HIGHSPEED;
COMP_InitStruct.InputPlus = LL_COMP_INPUT_PLUS_IO1;
COMP_InitStruct.InputMinus = LL_COMP_INPUT_MINUS_VREFINT;
COMP_InitStruct.InputHysteresis = LL_COMP_HYSTERESIS_HIGH;
COMP_InitStruct.OutputPolarity = LL_COMP_OUTPUTPOL_NONINVERTED;
COMP_InitStruct.OutputBlankingSource = LL_COMP_BLANKINGSRC_NONE;
LL_COMP_Init(COMP1, &COMP_InitStruct);
LL_COMP_SetCommonWindowMode(__LL_COMP_COMMON_INSTANCE(COMP1), LL_COMP_WINDOWMODE_DISABLE);
中断的代码:
LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_21);
LL_EXTI_EnableRisingTrig_0_31(LL_EXTI_LINE_21);
LL_EXTI_DisableFallingTrig_0_31(LL_EXTI_LINE_21);
LL_EXTI_DisableEvent_0_31(LL_EXTI_LINE_21);
LL_EXTI_EnableIT_0_31(LL_EXTI_LINE_21);
使用了三种 INP(正输入)的连接配置:
INP 未连接任何东西;
INP 连接到 GND;
INP 连接到 DAC 输出引脚,并设置为最大值(4095)。
在配置 1) 中,使能了比较器,并不断生成中断(一个接一个)(我在 IRQ 中清除了标志)。
在配置 2) 中,使能了比较器,并生成了一次中断。
在配置 3) 中,使能了比较器,再次不断生成中断。
也许我不理解比较器的工作原理,但在我看来,它应该只在 INP(+) > INP(-)(在我的情况下是 Vref)时生成一次中断,仅此而已。因此:
在配置 1) 中,不应该触发中断。
在配置 2) 中,不应该触发中断。
在配置 3) 中,可能会触发中断?但无论如何,不应该一直生成中断。
|
|