This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

BQ7694003的ALERT管脚的问题,急急急!谢谢!



你好,使用BQ7694003与STM8L151设计的电池管理系统,共14节电池,其中BQ7694003的ALERT管脚接STM8L151的PD0管脚,现在电池工作正常,程序里配置PD0为外部中断、浮空输入,并配置外部中断0,在中断程序里读取SYS_STAT寄存器,CC_READY为1,然后写相应的位1,清零该位,但是中断始终工作不正确,写1并没有清零相应的位,且只进入一次中断就不会再进入中断,PD0也是只有一个上升沿,不知该在中断程序里该如何配置,求助!谢谢! PD0配置和中断程序如下,附件是原理图,谢谢!

/***PD0**配置外部中断0 上升沿触发中断******/

void ALERT_IO_Init(void)
{
GPIO_Init(GPIOD, GPIO_Pin_0, GPIO_Mode_In_FL_IT);
EXTI_SetPinSensitivity(EXTI_Pin_0, EXTI_Trigger_Rising);

ITC_SetSoftwarePriority(EXTI0_IRQn, ITC_PriorityLevel_1);
enableInterrupts();
}

bool EXTI0_Status = false;
INTERRUPT_HANDLER(EXTI0_IRQHandler, 8)
{
unsigned int iTemp = 0;
unsigned long lTemp = 0;
unsigned char ctrl;
BitStatus result;
/* Check if 有一个高电平 */

#if 1
if(EXTI0_Status)
{
EXTI0_Status = false;
RED_ON;
}
else
{
EXTI0_Status = true;
RED_OFF;
}
#endif
#if 1
result |= BQ7694000_ReadData(SYS_STAT, &(Registers.SysStatus.StatusByte), 1);//读一个字节需要0.95ms
if(Registers.SysStatus.StatusBit.CC_READY == 1) //有一个有效的CC生成
{
result = 0;
Delay(2800);
result |= BQ7694000_WriteRegs(SYS_STAT, &(Registers.SysStatus.StatusByte),1); //写1清零为1的位,其他位写0无效
result |= BQ7694000_ReadData(SYS_STAT, &(Registers.SysStatus.StatusByte), 1);
if(Registers.SysStatus.StatusBit.CC_READY == 1) //有一个有效的CC生成
{
result = 0;
BLUE_ON;
}
else
{
result = 1;
BLUE_OFF;
}
}
else
{
result = 1;
}
#endif
/* Clear Interrupt pending bit */
EXTI_ClearITPendingBit(EXTI_IT_Pin0);
}
#endif