求:BH1750光照传感器 STM32的开发例子,谢谢 我这里的驱动不了:
高手帮助看看,问题出在哪里了?只读出来一个255
void BH_start() //开始信号
{
BHWriteState1();
BH1DATA_H;//SDA=1;
delay_us(5);
BH1SCK_H;//SCL=1;
delay_us(5);
BH1DATA_L;//SDA=0;
delay_us(5);
}
void BH_stop() //停止信号
{
BHWriteState1();
BH1DATA_L;//SDA=0;
delay_us(5);
BH1SCK_H;//SCL=1;
delay_us(5);
BH1DATA_H;//SDA=1;
delay_us(5);
}
void BH_respons() //应答
{
u8 i;
BH1SCK_H;//SCL=1;
delay_us(5);
BHReadState1();
while((BHDATA1()==1)&&(i<250))i++;
BH1SCK_L;//SCL=0;
delay_us(5);
}
void init_BH() //初始化bh1710
{
BHWriteState1();
BH1DATA_H;//SDA=1;
delay_us(5);
BH1SCK_H;//SCL=1;
delay_us(5);
}
void BH_write_byte(u8 date)
{
u8 i,temp;
/*for(i=0;i<8;i++)
{
temp=date&0x80;
BH1SCK_L;//SCL=0;
delay_us(5);
SDA=temp;
delay_us(5);
BH1SCK_H;//SCL=1;
delay_us(5);
date=date<<1;
}
*/
BHWriteState1();
for (i=0x80;i>0;i/=2) //shift bit for masking
{
temp=date&i;
BH1SCK_L;//SCL=0;
delay_us(5);
if (temp) BH1DATA_H; //masking value with i , write to SENSI-BUS
else BH1DATA_L;
delay_us(5);
BH1SCK_H; //clk for SENSI-BUS
delay_us(5);
}
BH1SCK_L;//SCL=0;
delay_us(5);
BH1DATA_H;//SDA=1;
delay_us(5);
}
u8 BH_read_byte()
{
u8 i,k;
BHWriteState1();
BH1SCK_L;//SCL=0;
delay_us(5);
BH1DATA_H;//SDA=1;
delay_us(5);
BHReadState1();
for(i=0;i<8;i++)
{
BH1SCK_H;//SCL=1;
delay_us(5);
k=(k<<1)|BHDATA1();
BH1SCK_L;//SCL=0;
delay_us(5);
}
return k;
}
void write_reg(u8 address,u8 shuju) //给指定地址中写入数据
{
BH_start();
BH_write_byte(address);
BH_respons();
BH_write_byte(shuju);
BH_respons();
BH_stop();
}
u16 read_reg(u8 address) //从指定地址中读出数据
{
u8 date2;
u8 date1;
u16 date;
BH_start();
BH_write_byte(address);
BH_respons();
date1=BH_read_byte();
BH1SCK_L;//SCL=0; //写应答信号1
//BHWriteState1();
delay_us(5);
BH1DATA_L;//SDA=0;
delay_us(5);
BH1SCK_H;//SCL=1;
delay_us(5);
date2=BH_read_byte();
BH1SCK_L;//SCL=0;
//BHWriteState1();
delay_us(5); //写应答信号0
BH1DATA_L;//SDA=0;
delay_us(5);
BH1SCK_H;//SCL=1;
delay_us(5);
BH_stop();
date=date1*256+date2;
return date;
}
//1710测光强主函数
u16 bh1710_read()
{
static u16 bh=0;
write_reg(write_1710,power_on);
write_reg(write_1710,0x52); //测量时间设置100%
write_reg(write_1710,0x78);
write_reg(write_1710,h_resolution_mod);
delay_ms(120);
delay_ms(120);
bh=read_reg(read_1710);
write_reg(write_1710,reset);
write_reg(write_1710,power_down);
return bh;
}
|