#ifndef __BQ25756_H #define __BQ25756_H #include "stm32f10x.h" #include "bq25756_regs.h" /*=========================================================================== * BQ25756 Driver — STM32 Standard Peripheral Library * I2C: PB6(SCL), PB7(SDA), 400kHz * INT: configurable EXTI * CE: configurable GPIO output * Reference: TI SLUSEN5 BQ25756 Datasheet (Aug 2023) * * 工业级功能覆盖:安全定时器、看门狗管理、NTC/JEITA、 * INT中断输入、PG监测、CE独立控制、状态汇总 *===========================================================================*/ /*=========================================================================== * 返回值 *===========================================================================*/ typedef enum { BQ25756_OK = 0, BQ25756_ERR_I2C = -1, BQ25756_ERR_BUSY = -2, BQ25756_ERR_NACK = -3, BQ25756_ERR_TIMEOUT = -4, } BQ25756_Status; /*=========================================================================== * 内部状态 *===========================================================================*/ typedef struct { uint8_t charger_status; /* 上次 REG0x21 */ uint8_t fault_status; /* 上次 REG0x24 */ uint8_t flags1; /* 上次 REG0x25 */ uint8_t flags2; /* 上次 REG0x26 */ uint16_t vbat_mv; /* 电池电压 */ int16_t ibat_ma; /* 充电电流 +正/-放 */ } BQ25756_State; /*=========================================================================== * 状态汇总结构体 — 单次读取全部关键状态 *===========================================================================*/ typedef struct { uint8_t charge_state; /* 充电阶段: NO/TRICKLE/PRE/CC/CV/DONE */ uint8_t fault; /* 故障位掩码 (FAULT_VAC_UV 等) */ uint8_t flags; /* 未处理的中断标志 */ uint8_t pg_good; /* 输入电源是否就绪 */ uint8_t ts_status; /* NTC温度状态: NORMAL/WARM/COOL/COLD/HOT */ uint8_t wd_expired; /* 看门狗是否超时 */ uint8_t mppt_status; /* MPPT状态 */ uint16_t vbat_mv; /* 电池电压 mV */ int16_t ibat_ma; /* 充电电流 mA */ uint16_t vin_mv; /* 输入电压 mV */ uint16_t vfb_mv; /* FB反馈电压 mV */ } BQ25756_StatusSummary; /*=========================================================================== * 初始化 *===========================================================================*/ void BQ25756_InitI2C(void); BQ25756_Status BQ25756_CheckPresence(void); /*=========================================================================== * I2C 底层 *===========================================================================*/ BQ25756_Status BQ25756_WriteReg(uint8_t reg, uint8_t data); BQ25756_Status BQ25756_ReadReg(uint8_t reg, uint8_t *pdata); BQ25756_Status BQ25756_WriteReg16(uint8_t reg, uint16_t data); BQ25756_Status BQ25756_ReadReg16(uint8_t reg, uint16_t *pdata); /*=========================================================================== * 充电控制 *===========================================================================*/ BQ25756_Status BQ25756_ConfigChargeParams(uint32_t charge_current_ma, uint32_t input_current_ma, uint32_t input_voltage_mv); BQ25756_Status BQ25756_EnableCharging(void); BQ25756_Status BQ25756_DisableCharging(void); BQ25756_Status BQ25756_SetCePin(uint8_t level); BQ25756_Status BQ25756_DisableWatchdog(void); BQ25756_Status BQ25756_ResetWatchdog(void); /*=========================================================================== * 预充/终止 *===========================================================================*/ BQ25756_Status BQ25756_SetPrechargeCurrent(uint32_t ma); BQ25756_Status BQ25756_SetTerminationCurrent(uint32_t ma); BQ25756_Status BQ25756_ConfigPrechargeTerm(uint8_t en_term, uint8_t vbat_lowv, uint8_t en_prechg); /*=========================================================================== * 定时器配置 *===========================================================================*/ BQ25756_Status BQ25756_ConfigTimers(uint8_t watchdog, /* 0=关, 1=40s,2=80s,3=160s */ uint8_t chg_tmr, /* 0=5hr,1=8hr,2=12hr,3=24hr */ uint8_t cv_tmr, /* 0=关, 1~15=1~15hr */ uint8_t topoff); /* 0=关,1=15m,2=30m,3=45m */ /*=========================================================================== * NTC / JEITA *===========================================================================*/ BQ25756_Status BQ25756_DisableNtc(void); BQ25756_Status BQ25756_EnableNtc(void); BQ25756_Status BQ25756_ConfigJeita(uint8_t en_jeita, uint8_t vset, /* 0=暂停,1=94.3%,2=97.6%,3=100% */ uint8_t iseth, /* 0=40%,1=100% */ uint8_t isetc); /* 0=暂停,1=20%,2=40%,3=100% */ BQ25756_Status BQ25756_ConfigNtcThresholds(uint8_t t1, /* 0=-10C,1=-5C,2=0C,3=5C */ uint8_t t2, /* 0=5C,1=10C,2=15C,3=20C */ uint8_t t3, /* 0=40C,1=45C,2=50C,3=55C */ uint8_t t5); /* 0=50C,1=55C,2=60C,3=65C */ /*=========================================================================== * 状态监测 *===========================================================================*/ BQ25756_Status BQ25756_GetChargeState(uint8_t *pstate); BQ25756_Status BQ25756_GetFaultStatus(uint8_t *pfault); BQ25756_Status BQ25756_ReadPowerGood(uint8_t *ppg); BQ25756_Status BQ25756_ReadFlags1(uint8_t *pflags); BQ25756_Status BQ25756_ReadFlags2(uint8_t *pflags); BQ25756_Status BQ25756_ReadFaultFlags(uint8_t *pflags); BQ25756_Status BQ25756_ConfigMasks(uint8_t mask1, uint8_t mask2, uint8_t fault_mask); BQ25756_Status BQ25756_GetStatusSummary(BQ25756_StatusSummary *ps); /*=========================================================================== * 引脚/通道配置 *===========================================================================*/ BQ25756_Status BQ25756_ConfigPins(uint8_t en_ichg, uint8_t en_ilim, uint8_t dis_pg, uint8_t dis_stat); BQ25756_Status BQ25756_ConfigAdcChannels(uint8_t disable_mask); /*=========================================================================== * ADC *===========================================================================*/ BQ25756_Status BQ25756_AdcOneshot(void); BQ25756_Status BQ25756_AdcStartContinuous(void); BQ25756_Status BQ25756_AdcStop(void); BQ25756_Status BQ25756_ReadVbat(uint32_t *pvoltage_mv); BQ25756_Status BQ25756_ReadIbat(int32_t *pcurrent_ma); BQ25756_Status BQ25756_ReadVac(uint32_t *pvoltage_mv); BQ25756_Status BQ25756_ReadVfb(uint32_t *pvoltage_mv); BQ25756_Status BQ25756_ReadAllAdc(BQ25756_State *pstate); /*=========================================================================== * MPPT(太阳能) *===========================================================================*/ BQ25756_Status BQ25756_EnableMppt(void); BQ25756_Status BQ25756_DisableMppt(void); BQ25756_Status BQ25756_MpptForceSweep(void); /*=========================================================================== * 中断 *===========================================================================*/ void BQ25756_InitInterrupt(void); void BQ25756_IRQHandler(void); /*=========================================================================== * 完整初始化 — 按实测顺序 *===========================================================================*/ BQ25756_Status BQ25756_InitForCharging(uint32_t charge_ma, uint32_t input_ma, uint32_t input_mv); /*=========================================================================== * 内部状态 *===========================================================================*/ extern BQ25756_State g_state; #endif /* __BQ25756_H */