標(biāo)題:
ti的電量計(jì)bq27750芯片.C .H與程序文件
[打印本頁(yè)]
作者:
libinhb
時(shí)間:
2020-6-25 00:45
標(biāo)題:
ti的電量計(jì)bq27750芯片.C .H與程序文件
bq27750 電量計(jì)芯片,適用于手持儀器的電量管理,本次上傳的為本人初步使用,供學(xué)習(xí)參考,包括有TI的說(shuō)明書(shū);以壓縮文件:BQ2750.RAR
單片機(jī)源程序如下:
/* Includes ------------------------------------------------------------------*/
//#include "bq27200.h"
#include "bq27750/bq27750.h"
#include "globalmvf.h"
// control register params
#define BQ27200_SOFT_FRSET 0x42 //全復(fù)位
#define BQ27200_SOFT_PRSET 0x48 //部分復(fù)位
#define BQ27750_RS 20 // Resistor sense mOhm
// Register
#define BQ27750_REG_CTRL_L 0X00 //控制寄存器
#define BQ27750_REG_CTRL_H 0X01
#define BQ27750_REG_TEMP_L 0x06 //溫度寄存器
#define BQ27750_REG_TEMP_H 0x07
#define BQ27750_REG_VOLT_L 0x08 //電壓寄存器
#define BQ27750_REG_VOLT_H 0x09
#define BQ27750_REG_FLAGS_L 0x0A //電池狀態(tài)寄存器
#define BQ27750_REG_FLAGS_H 0x0B
#define BATTERY_FLAGS_CHARGING 0X00 //正充電
#define BATTERY_FLAGS_DISCHARGING 0X40 //正放電
#define BQ27750_REG_INSTCURR_L 0x0C //SENSOR電阻上瞬時(shí)電流 1秒刷新一次
#define BQ27750_REG_INSTCURR_H 0x0D
#define BQ27750_REG_AI_L 0x14 //平均電流寄存器
#define BQ27750_REG_AI_H 0x15
#define BQ27750_REG_RM_L 0x10 //預(yù)測(cè)的剩余容量
#define BQ27750_REG_RM_H 0x11
#define BQ27750_REG_FCC_L 0x12 //預(yù)設(shè)的滿充容量
#define BQ27750_REG_FCC_H 0x13
#define BQ27750_REG_INT_TEMP_L 0x28 //內(nèi)部溫度 0.1K為單位
#define BQ27750_REG_INT_TEMP_H 0x29
#define BQ27750_REG_CCOUNT_L 0x2A //放電次數(shù)
#define BQ27750_REG_CCOUNT_H 0x2B
#define BQ27750_REG_SOC_L 0x2C //充電百分比
#define BQ27750_REG_SOC_H 0x2D
#define BQ27750_REG_SOH_L 0x2E //設(shè)計(jì)容量的百分比作為電池健康狀況
#define BQ27750_REG_SOH_H 0x2F
#define BQ27750_REG_CV_L 0x30 //將充電電壓
#define BQ27750_REG_CV_H 0x31
#define BQ27750_REG_CC_L 0x32 //將充電電流
#define BQ27750_REG_CC_H 0x33
#define BQ27750_REG_DC_L 0x3C //設(shè)計(jì)容量
#define BQ27750_REG_DC_H 0x3D
#define BQ27750_REG_MAC_L 0x3E //制造商數(shù)據(jù)訪問(wèn)指令
#define BQ27750_REG_MAC_H 0x3F
#define BQ27750_REG_MAC_DATA_L 0x40 //制造商數(shù)據(jù)
#define BQ27750_REG_MAC_DATA_H 0x5F
#define BQ27750_REG_MAC_DATA_SUM_L 0x60 //制造商數(shù)據(jù)校驗(yàn)和
#define BQ27750_REG_MAC_DATA_LEN_H 0x61 //制造商數(shù)據(jù)長(zhǎng)度
//====設(shè)置設(shè)計(jì)參數(shù) FLASH數(shù)據(jù)--------------------------------------------------------------------------------
#define DA_CONFIG_VALUE 0X10 //1串電池 睡眠使 默認(rèn)值 0X11 2串電池 睡眠使
#define DESIGN_CAPACITY_MAH_VALUE 2000 //MAH 設(shè)計(jì)容量MAH 默認(rèn)值 5300MAH
#define DESIGN_CAPACITY_CWH_VALUE 770 //CWH 設(shè)計(jì)容量CWH 默認(rèn)值 2040CWH
#define DESIGN_VOLTAGE_VALUE 4100 //MV 設(shè)計(jì)電壓MV 默認(rèn)值 3850MV
//#define DEVICE_CHEMISTRY //按默認(rèn)的鋰電 LION 默認(rèn)值 鋰電 LION
#define COV_VALUE 4300 //過(guò)高電壓值 默認(rèn)值 4300MA
#define CUV_VALUE 2500 //過(guò)低電壓值 默認(rèn)值 2500MA
#define SHUTDOWN_VALUE 2300 //關(guān)斷電壓值 默認(rèn)值 2300MA
#define OCC_VALUE 2000 //最大流電電流值 默認(rèn)值 5000MA
#define OCD_VALUE 1500 //最大放電流值 默認(rèn)值 5000MA
#define ASCC_VALUE 0X77 //100MA 5秒 //瞬時(shí)短路充電電流值 默認(rèn)值 0X77 //100MA 5秒
#define ASCD_VALUE 0X77 //100MA 5秒 //瞬時(shí)短路放電電流值 默認(rèn)值 0X77 //100MA 5秒
#define SOV_VALUE 4500 // 電池永久損壞值 默認(rèn)值 4500MA
#define TEMP_SENSOR_SELECT 0X01 //內(nèi)外溫度傳感器選擇 選擇內(nèi)部的 默認(rèn)值 0x03 內(nèi)外兩個(gè)
#define UTC_VALUE 0 //充電溫度值 0度 默認(rèn)值 0
#define UTD_VALUE 0 //放電溫度值 0度 默認(rèn)值 0
//#define BCAST //沒(méi)有找到
//====設(shè)置設(shè)計(jì)參數(shù) FLASH地址--------------------------------------------------------------------------------
#define ADDR_DA_CONFIG_VALUE 0X45E2 // 默認(rèn)值 0X45E2=0X18
#define ADDR_DESIGN_CAPACITY_MAH_VALUE 0X4563 // 默認(rèn)值 0X4563 =5300MAH 現(xiàn)設(shè)計(jì)為2000MAH
#define ADDR_DESIGN_CAPACITY_CWH_VALUE 0X4565 // 默認(rèn)值 0X4565 =2040CWH 現(xiàn)設(shè)計(jì)為770CWH
#define ADDR_DESIGN_VOLTAGE_VALUE 0X4567 // 默認(rèn)值 0X4567 =3850MV 現(xiàn)設(shè)計(jì)為4100MV
#define ADDR_DEVICE_CHEMISTRY 0X4095 //默認(rèn)值 鋰電 LION
#define ADDR_COV_VALUE 0X4602 //默認(rèn)值 4300MA 現(xiàn)設(shè)計(jì)為4300MV //過(guò)高電壓值
#define ADDR_CUV_VALUE 0X45FB //默認(rèn)值 2500MA 現(xiàn)設(shè)計(jì)為2500MV //過(guò)低電壓值
#define ADDR_SHUTDOWN_VALUE 0X4547 //默認(rèn)值 2300MA 現(xiàn)設(shè)計(jì)為2300MV //關(guān)斷電壓值
#define ADDR_OCC_VALUE 0X4611 //默認(rèn)值 9000MA 現(xiàn)設(shè)計(jì)為2000 //最大流電電流值
#define ADDR_OCD_VALUE 0X4617 //默認(rèn)值 6000MA 現(xiàn)設(shè)計(jì)為1500 //最大放電流值
#define ADDR_ASCC_VALUE 0X46E7 //默認(rèn)值 0X77 //100MA 0.4MS 現(xiàn)設(shè)計(jì)為 0X77 //100MA 0.4MS //瞬時(shí)短路充電電流值
#define ADDR_ASCD_VALUE 0X45E8 //0X77 //100MA 0.4MS //瞬時(shí)短路放電電流值 默認(rèn)值 0X77 //100MA 0.4MS
#define ADDR_SOV_VALUE 0X4648 //默認(rèn)值 4500MA 現(xiàn)設(shè)計(jì)為 4500 // 電池永久損壞值
#define ADDR_TEMP_SENSOR_SELECT 0X45E1 // 0X01 //內(nèi)外溫度傳感器選擇 選擇內(nèi)部的 默認(rèn)值 0x03 內(nèi)外兩個(gè)
#define ADDR_UTC_VALUE 0X462A // 默認(rèn)值 0 現(xiàn)設(shè)計(jì)為 0 //充電溫度值 0度
#define ADDR_UTD_VALUE 0X462F // 默認(rèn)值 0 放電溫度值 0度 現(xiàn)設(shè)計(jì)為 0
//#define BCAST //沒(méi)有找到
//#define SlaveAddress_read 0xAB //1 27200
//#define SlaveAddress_write 0xAA //0
#define SlaveAddress_write 0xAa // BIT0=1 27750
#define SlaveAddress_read 0xAb // BIT0=0
static void SDA_OUT(void); //PC2
static void SDA_IN(void); //PC3
static void BQ_I2C_DELAY_x100ns(u8 x100ns_data);
static void BQ_I2C_DELAY(void);
static u8 BQ_I2C_START(void);
static void BQ_I2C_STOP(void);
static void BQ_I2C_Ack(void);
static void BQ_I2C_NoAck(void);
static u8 BQ_I2C_WaitAck(void); //返回=1有ACK,=0無(wú)ACK
static void BQ_I2C_SendByte(u8 SendByte); //數(shù)據(jù)從高位到低位
//static u8 BQ_I2C_ReceiveByte(void); //數(shù)據(jù)從高位到低位
static u8 BQ_I2C_ReceiveByte(unsigned char ack);
//################################### IO口模擬法##############################################
extern void BQ27750_IO_I2C_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//PC3----SCL
//PC2----SDA
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//最高輸出速度50M
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_OD; //GPIO_Mode_Out_PP;////GPIO_Mode_Out_PP; //GPIO_Mode_AF_OD; // GPIO_Mode_Out_PP; //輸出 GPIO_Mode_IPU GPIO_Mode_Out_OD)
GPIO_Init(GPIOC, &GPIO_InitStructure);
BQ_SDA_H; //總線初始
BQ_SCL_H;
}
static void write_BQ_Delay(uint16_t X10MS)
{
TIM3_X10MS(X10MS); //主程序運(yùn)行前延時(shí)2秒
while(timer3_X10ms>0);
TIM_Cmd(TIM3, DISABLE);
}
//IO方向設(shè)置
static void SDA_IN(void) //PC2
{
//1.FUNCTION MODE:
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // GPIO_Mode_Out_OD; //開(kāi)漏 GPIO_Mode_IPU; //上拉輸入
GPIO_Init(GPIOC, &GPIO_InitStructure);
//2.REGISTER MODE:
//RCC->APB2ENR |= 0x00000010; //C口時(shí)鐘開(kāi)啟
// GPIOC->CRL&=0XFFFFF0FF; //取PC2 IN
// GPIOC->CRL|=0X00000800;
}
static void SDA_OUT(void) //PC2
{
//1.FUNCTION MODE:
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE);
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//最高輸出速度50M
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_OD; //開(kāi)漏 GPIO_Mode_Out_PP; //輸出
GPIO_Init(GPIOC, &GPIO_InitStructure);
//2.REGISTER MODE:
//RCC->APB2ENR |= 0x00000010; //C口時(shí)鐘開(kāi)啟
// GPIOC->CRL&=0XFFFFF0FF; //取PC2 OUT
// GPIOC->CRL|=0X00000300; // 3/7
}
//extern void BQ27200_Write_Design_Capacity(u16 capacity_xmah)
//{
//u8 set_CapPercent=1;
//u8 val_l=0,val_h=0;
//u16 val_76=0,set_capacity=0;
//float val=0;
//
//set_CapPercent=1; //100%
////高字節(jié)值:(Design_Capacity*R)/(256*3.57) : Design_Capacity=2000mah R=20毫歐 (2000*20)/(256*3.57)=43;
////低字節(jié)值:0X00
//
//set_capacity=capacity_xmah;
//val=set_capacity*BQ27200_RS;
//val=(val/256)/3.57;
//val=val*256;
//val_76=((int)val+0)*set_CapPercent;
//
//val_l=val_76/256; //高字節(jié)
//val_h=val_76%256; //低字節(jié)
//
//
//BQ_I2C_WriteByte(val_l, SlaveAddress_write, BQ27200_REG_AR_L);
//write_BQ_Delay(1); //10MS
//
//BQ_I2C_WriteByte(val_h, SlaveAddress_write, BQ27200_REG_AR_H);
//write_BQ_Delay(1); //10MS
//BQ_I2C_WriteByte(0X20, SlaveAddress_write, BQ27200_REG_MODE); //WRTNAC=1
//write_BQ_Delay(1); //10MS
//BQ_I2C_WriteByte(0Xa9, SlaveAddress_write, BQ27200_REG_CTRL); //
//write_BQ_Delay(1); //10MS
//BQ_I2C_WriteByte(0X40, SlaveAddress_write, BQ27200_REG_MODE); //WRTNAC=1
//write_BQ_Delay(1); //10MS
//}
extern void BQ27750_Write_SETTING_DESIGN_PARAMETERS(void)
{
//BQ_I2C_WriteByte(0x0012, 0XAA, 0X3E);
//BQ_I2C_WriteByte(0X00, 0XAA, 0X00); BQ_I2C_WriteByte(0X22, 0XAA, 0X01);
BQ_I2C_WriteByte_toflash(DA_CONFIG_VALUE , SlaveAddress_write, ADDR_DA_CONFIG_VALUE);
BQ_I2C_WriteByte_toflash(DESIGN_CAPACITY_MAH_VALUE , SlaveAddress_write, ADDR_DESIGN_CAPACITY_MAH_VALUE);
BQ_I2C_WriteByte_toflash(DESIGN_VOLTAGE_VALUE, SlaveAddress_write, ADDR_DESIGN_VOLTAGE_VALUE);
BQ_I2C_WriteByte_toflash(COV_VALUE , SlaveAddress_write, ADDR_COV_VALUE);
BQ_I2C_WriteByte_toflash(CUV_VALUE , SlaveAddress_write, ADDR_CUV_VALUE);
BQ_I2C_WriteByte_toflash(SHUTDOWN_VALUE , SlaveAddress_write, ADDR_SHUTDOWN_VALUE);
BQ_I2C_WriteByte_toflash(OCC_VALUE , SlaveAddress_write, ADDR_OCC_VALUE);
BQ_I2C_WriteByte_toflash(OCD_VALUE , SlaveAddress_write, ADDR_OCD_VALUE );
BQ_I2C_WriteByte_toflash(ASCC_VALUE , SlaveAddress_write, ADDR_ASCC_VALUE );
BQ_I2C_WriteByte_toflash(ASCD_VALUE , SlaveAddress_write, ADDR_ASCD_VALUE );
BQ_I2C_WriteByte_toflash(SOV_VALUE , SlaveAddress_write, ADDR_SOV_VALUE);
BQ_I2C_WriteByte_toflash(TEMP_SENSOR_SELECT, SlaveAddress_write, ADDR_TEMP_SENSOR_SELECT);
BQ_I2C_WriteByte_toflash(UTC_VALUE , SlaveAddress_write, ADDR_UTC_VALUE);
BQ_I2C_WriteByte_toflash(UTD_VALUE, SlaveAddress_write, ADDR_UTD_VALUE);
//
}
extern void BQ27200_Write_Design_Capacity(u16 capacity_xmah)
{
u8 set_CapPercent=1;
u8 val_l=0,val_h=0;
u16 val_76=0,set_capacity=0;
float val=0;
set_CapPercent=1; //100%
//高字節(jié)值:(Design_Capacity*R)/(256*3.57) : Design_Capacity=2000mah R=20毫歐 (2000*20)/(256*3.57)=43;
//低字節(jié)值:0X00
set_capacity=capacity_xmah;
val=set_capacity*BQ27750_RS;
val=(val/256)/3.57;
val=val*256;
val_76=((int)val+0)*set_CapPercent;
val_l=val_76/256; //高字節(jié)
val_h=val_76%256; //低字節(jié)
BQ_I2C_WriteByte(0x2b, SlaveAddress_write, 0X76); //ILMD: (2000*20)/(256*3.57)=43=0x2b
write_BQ_Delay(1); //10MS
BQ_I2C_WriteByte(0x77, SlaveAddress_write, 0X77); //SEVF: (3000/8)-256=119=0X77
write_BQ_Delay(1); //10MS
BQ_I2C_WriteByte(0xA2, SlaveAddress_write, 0X78); //SEV1: (3350/8)-256=162=0XA2
write_BQ_Delay(1); //10MS
BQ_I2C_WriteByte(0x0E, SlaveAddress_write, 0X79); //ISLC: (50*20)/7.14=14=0X0E
write_BQ_Delay(1); //10MS
BQ_I2C_WriteByte(0x58, SlaveAddress_write, 0X7A); //DMFSD:
write_BQ_Delay(1); //10MS
BQ_I2C_WriteByte(0x88, SlaveAddress_write, 0X7B); //TAPER: (100*20)/228 =8 ,BIT7=1
write_BQ_Delay(1); //10MS
BQ_I2C_WriteByte(0x70, SlaveAddress_write, 0X7C); //PKCXFG: GPIO禁止外用 4.112V -9.8UV 固定補(bǔ)償
write_BQ_Delay(1); //10MS
BQ_I2C_WriteByte(0X16, SlaveAddress_write, 0x7D); //IMLC: (500*20)/457=22=0x16
write_BQ_Delay(1); //10MS
BQ_I2C_WriteByte(0X42, SlaveAddress_write, 0x7e); //DCOMP:
write_BQ_Delay(1); //10MS
BQ_I2C_WriteByte(0X7C, SlaveAddress_write, 0x7F); //TCOMP:
write_BQ_Delay(1); //10MS
//BQ_I2C_WriteByte(0X20, SlaveAddress_write, BQ27200_REG_MODE); //WRTNAC=1
//write_BQ_Delay(1); //10MS
//BQ_I2C_WriteByte(0Xa9, SlaveAddress_write, BQ27200_REG_CTRL); //
//write_BQ_Delay(1); //10MS
//BQ_I2C_WriteByte(0X40, SlaveAddress_write, BQ27200_REG_MODE); //WRTNAC=1
//write_BQ_Delay(1); //10MS
}
extern void BQ27750_Write_Design_Capacity(u16 capacity_xmah)
{
u8 set_CapPercent=1;
u8 val_l=0,val_h=0;
u16 val_76=0,set_capacity=0;
float val=0;
set_CapPercent=1; //100%
//高字節(jié)值:(Design_Capacity*R)/(256*3.57) : Design_Capacity=2000mah R=20毫歐 (2000*20)/(256*3.57)=43;
//低字節(jié)值:0X00
set_capacity=capacity_xmah;
val=set_capacity*BQ27750_RS;
val=(val/256)/3.57;
val=val*256;
val_76=((int)val+0)*set_CapPercent;
val_l=val_76/256; //高字節(jié)
val_h=val_76%256; //低字節(jié)
}
static void BQ_I2C_DELAY_x100ns(u8 x100ns_data)
{
u16 i=1; // //實(shí)驗(yàn)調(diào)到0.2US左右
u8 h=0;
for(h=0;h<x100ns_data;h++)
{
for(;i>0;i--) ;
}
}
static void BQ_I2C_DELAY(void)
{
u16 i=800; //800--1 //實(shí)驗(yàn)調(diào)到5-6US左右
//u16 i=4;
while(i) i--;
}
static void BQ_I2C_DELAY1(void)
{
u16 i=400; //400--1 //實(shí)驗(yàn)調(diào)到5-6US左右
//u16 i=4;
while(i) i--;
}
static void BQ_I2C_DELAY2(void)
{
u16 i=200; //200--1 //實(shí)驗(yàn)調(diào)到5-6US左右
//u16 i=4;
while(i) i--;
}
static x_sft(u8 shift_cnt)
{
u8 kk=2;
for(;shift_cnt>0;shift_cnt--) {kk=kk<<1;}
}
static u8 BQ_I2C_START(void)
{
SDA_OUT(); //SDA輸出
BQ_SDA_H; //釋放SDA總線
BQ_I2C_DELAY();
BQ_SCL_H;
BQ_I2C_DELAY();
//if(!BQ_SDA_READ) return 0; //SDA線低電平則總線忙 退出
BQ_SDA_L; //開(kāi)始信號(hào)
BQ_I2C_DELAY();
//if(BQ_SDA_READ) return 0; //SDA線高電平則總線出錯(cuò) 退出
BQ_SCL_L;
BQ_I2C_DELAY();
return 1;
}
static void BQ_I2C_STOP(void)
{
SDA_OUT(); //SDA輸出
BQ_SDA_L;
BQ_I2C_DELAY();
BQ_SCL_H;
BQ_I2C_DELAY();
BQ_SDA_H; //停止信號(hào)
BQ_I2C_DELAY();
BQ_I2C_DELAY();
}
static void BQ_I2C_Ack(void)
{
SDA_OUT(); //SDA輸出
BQ_SCL_L;
BQ_I2C_DELAY();
BQ_SDA_L;
BQ_I2C_DELAY();
BQ_SCL_H;
BQ_I2C_DELAY();
BQ_SCL_L;
BQ_I2C_DELAY();
}
static void BQ_I2C_NoAck(void)
{
u8 ft=2;
//BQ_SCL_L; //應(yīng)答脈沖形成前置0
//x_sft(2);
//SDA_OUT(); //SDA輸出
BQ_SCL_L;
BQ_I2C_DELAY();
BQ_SDA_H;
BQ_I2C_DELAY();
BQ_SCL_H;
BQ_I2C_DELAY();
BQ_SCL_L;
BQ_I2C_DELAY();
}
static u8 BQ_I2C_WaitAck(void) //返回=1有ACK,=0無(wú)ACK
{
u8 ft=2;
u8 ucErrTime=0;
SDA_IN(); //SDA設(shè)置為輸入
BQ_SDA_H;
BQ_I2C_DELAY();
BQ_SCL_H;
BQ_I2C_DELAY();
while(BQ_SDA_READ) //檢測(cè)應(yīng)答的數(shù)據(jù)
{
ucErrTime++;
if(ucErrTime>250)
{
//BQ_I2C_STOP();
BQ_SCL_L;
return 0;
}
}
BQ_SCL_L;
return 1;
}
static void BQ_I2C_SendByte(u8 SendByte) //數(shù)據(jù)從高位到低位
{
u8 i=8,ft=1;
SDA_OUT(); //SDA輸出
while(i--)
{
BQ_SCL_L;
BQ_I2C_DELAY1();
if(SendByte&0x80) BQ_SDA_H;
else BQ_SDA_L;
SendByte<<=1;
BQ_I2C_DELAY2();
BQ_SCL_H;
BQ_I2C_DELAY2();
}
BQ_SCL_L;
}
/**************************************************************
* 功能描述:讀1字節(jié)
** 輸入?yún)?shù):ack,1--發(fā)送ACK
0--發(fā)送nACK
** 輸出參數(shù): 無(wú)
** 返 回:返回讀取的一字節(jié)數(shù)據(jù)
***************************************************************/
static u8 BQ_I2C_ReceiveByte(unsigned char ack) //數(shù)據(jù)從高位到低位
{
u8 i=8;
u8 ReceiveByte=0;
SDA_IN();//SDA設(shè)置為輸入
BQ_SDA_H;
while(i--)
{
ReceiveByte<<=1;
BQ_SCL_L;
BQ_I2C_DELAY1();
BQ_SCL_H;
BQ_I2C_DELAY1();
if( BQ_SDA_READ) ReceiveByte|=0x01;
}
BQ_SCL_L;
return ReceiveByte;
}
// 寫(xiě)入1字節(jié)數(shù)據(jù) 待寫(xiě)入數(shù)據(jù) 待寫(xiě)入地址 器件類型(BQ27200)
extern u8 BQ_I2C_WriteByte(u8 SendByte, u8 WriteAddress, u16 RrgAddress)
{
u32 j,ft=2;
BQ_I2C_START();
//if(!BQ_I2C_START()) return 0;
//BQ_I2C_SendByte( WriteAddress&0xFE);//寫(xiě)器件地址
BQ_I2C_SendByte( WriteAddress);//寫(xiě)器件地址 AB
BQ_I2C_WaitAck();
// if(!BQ_I2C_WaitAck()) //等應(yīng)答 為0時(shí)返回 即器件沒(méi)有應(yīng)答
// { BQ_I2C_STOP();
// return 0;
// }
BQ_I2C_SendByte((u8)((RrgAddress>>8)&0XFF)); //設(shè)置寄存器地址
BQ_I2C_WaitAck();
// if(!BQ_I2C_WaitAck()) //等應(yīng)答 為0時(shí)返回 即器件沒(méi)有應(yīng)答
// { BQ_I2C_STOP();
// return 0;
// }
BQ_I2C_SendByte((u8)(RrgAddress&0XFF)); //設(shè)置寄存器地址
BQ_I2C_WaitAck();
// if(!BQ_I2C_WaitAck()) //等應(yīng)答 為0時(shí)返回 即器件沒(méi)有應(yīng)答
// { BQ_I2C_STOP();
// return 0;
// }
BQ_I2C_SendByte(SendByte); //寫(xiě)數(shù)據(jù)
BQ_I2C_WaitAck();
// if(!BQ_I2C_WaitAck()) //等應(yīng)答 為0時(shí)返回 即器件沒(méi)有應(yīng)答
// { BQ_I2C_STOP();
// return 0;
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
bq27750.7z
(1.09 MB, 下載次數(shù): 43)
2020-6-28 02:54 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1