最近用STM8L101做低功耗产品,用到电压检测功能,打算用COMP2比较器做个电压比较,我的使用方法如下:
COMP_REF:接1.2V电压,COMP2_CH2(PB3)是待比较的电压输入,电压范围为0.7到1.5V。
我准备只用比较功能,不用什么中断,只查询COMP2_OUT的值来确定是否大于参考电压,但最近做测试发现不能查询到比较的结果,不管我输入电压大于或小于COMP_REF,COMP2_OUT的值始终为0(手册上说COMP2_OUT是比较器输出的结果),不过CEF2的值有变化,在大于COMP_REF时候,CEF2为1;小于COMP_REF时,CEF2为0,不过这个CEF2的值不稳定,经常为0,不知道怎么使用这个比较器做简单电压比较,还请知道的给个提示,下面是我的代码:
void adcStart(void)
{
/* AD converter initialization */
/* Comparator configuration */
delay_soft_us(250);
COMP_DeInit();
/*Enable Comparator interface */
COMP_Cmd(ENABLE);
delay_soft_us(250);
COMP->CR |= 0x10; // pol bit
COMP->CR |= 0x08; // COMP_REF Bit
COMP->CCS |= 0x20; // channel select
COMP->CSR |= 0x40; // CLEAR
COMP->CR |= 0x04;
}
static void adcStop(void)
{
/*Disable Comparator interface */
COMP->CR &= ~0x01;
COMP->CR &= ~0x04;
}
BOOL check_power_low_volume(void)
{
u16 timeCount =3;
sysVccLowAlarmFlag = FALSE;
adcStart();
while(--timeCount)
{
delay_soft_us(70);
}
adcStop();
if(!(COMP->CSR & 0x40))
{
return TRUE; // 电压偏低
}else{
return FALSE; // 电压正常
}
} |