包括“stm32f1xx_hal.h”
包括“stm32f1xx_hal_i2c.h”
包括“ds3231.h”
定义SD3078_Address 0x64
/ ********************************************** /
定义Chg_enable 0x82
定义Chg_disable 0
/ **********电池注册********** /
定义Chg_MG 0x18 //³äμç¹ÜÀí¼Ä'æÆ÷μØÖ·
定义Bat_H8 0x1A //μçÁ¿×î¸ßμ¼'æÆ÷μØÖ·
定义Bat_L8 0x1B //μçÁ¿μÍ°Ëλ¼Ä'æÆ÷μØÖ·
/ ************* ID注册************ /
define ID_Address 0x72 //IDºÅÆðʼμØÖ·
extern uint8_t Date [6];
extern I2C_HandleTypeDef hi2c1;
extern void SD3078_WriteDate(uint8_t * date_w);
extern void SD3078_ReadDate(void);
------------------------------------
include “sd3078.h”
void SD3078_WriteDate(uint8_t *date_w)
{
uint8_t i[8];
uint8_t j;
i[0]=0x10; //дSD3078ʹÄÜ
i[1]=0x80;
HAL_I2C_Master_Transmit(&hi2c1, 0x64, i, 2, 100);
i[0]=0x0f;
i[1]=0xff;
HAL_I2C_Master_Transmit(&hi2c1, 0x64, i, 2, 100);
i[0]=0;//ÆðʼµØÖ·
i[1]=Hex2BCD(date_w[5]);//Ãë
i[2]=Hex2BCD(date_w[4]);//·Ö
j=Hex2BCD(date_w[3]);//ʱ
j^=0x80;//ͳһΪ24СʱÖÆ
i[3]=j;
i[4]=0x01;//ÐÇÆÚ£¬ºúÂÒŪһ¸öÀñ°ÝÒ»
i[5]=Hex2BCD(date_w[2]);//ÈÕ
i[6]=Hex2BCD(date_w[1]);//ÔÂ
i[7]=Hex2BCD(date_w[0]);//Äê
HAL_I2C_Master_Transmit(&hi2c1, 0x64, i, 8, 100);
i[0]=0x0f; //дSD3078½ûÖ¹
i[1]=0x7b;
HAL_I2C_Master_Transmit(&hi2c1, 0x64, i, 2, 100);
i[0]=0x10;
i[1]=0;
HAL_I2C_Master_Transmit(&hi2c1, 0x64, i, 2, 100);
}
void SD3078_ReadDate(void)
{
uint8_t i[7];
HAL_I2C_Master_Receive(&hi2c1, 0x64, i, 7, 100);
Date[0]=BCD2Hex(i[6]); //Ãë
Date[1]=BCD2Hex(i[5]); //·Ö
i[2]&=0x1f;
Date[2]=BCD2Hex(i[4]); //ʱ
Date[3]=BCD2Hex(i[2]); //ÈÕ
Date[4]=BCD2Hex(i[1]); //ÔÂ
Date[5]=BCD2Hex(i[0]); //Äê
}
void SD3078_ChgManage(void) //¼ì²éµç³ØµçÁ¿²¢¾ö¶¨ÊÇ·ñ³äµç£¬¿ª»úʱִÐÐ
{
uint16_t VBAT_VAL;
uint8_t i[0x20];
HAL_I2C_Master_Receive(&hi2c1, 0x64, i, 0x1c, 100);
VBAT_VAL=(i[0x1a]>>7)*256;
VBAT_VAL+=i[0x1b];
if(VBAT_VAL<=400)//СÓÚÕâ¸öÖµ£¬¾Í³äµç
{
i[0]=0x18;
i[1]=Chg_enable;
HAL_I2C_Master_Transmit(&hi2c1, 0x64, i, 2, 100);
}
}