BH1750 STM32 驱动程序

news/2024/11/27 20:30:34/

简介:

BH1750FIV是一个采用标准IIC总线接口的环境光强传感器,此传感器适用于获得像键盘LCD和手机背光灯等光强。买的淘宝上贴好的模块,gy30

指令码:

/*************************************************************/#define BHAddWrite     0x46      //从机地址+最后写方向位
#define BHAddRead      0x47      //从机地址+最后读方向位
#define BHPowDown      0x00      //关闭模块
#define BHPowOn        0x01      //打开模块等待测量指令
#define BHReset        0x07      //重置数据寄存器值在PowerOn模式下有效
#define BHModeH1       0x10      //高分辨率 单位1lx 测量时间120ms
#define BHModeH2       0x11      //高分辨率模式2 单位0.5lx 测量时间120ms
#define BHModeL        0x13      //低分辨率 单位4lx 测量时间16ms
#define BHSigModeH     0x20      //一次高分辨率 测量 测量后模块转到 PowerDown模式
#define BHSigModeH2    0x21      //同上类似
#define BHSigModeL     0x23      // 上类似
/*************************************************************/

BH1750FIV工六种模式分为连续型和一次型,连续型又分为高精度12和低精度模式,单次型同样分为高精度12和低精度模式。单次型与连续型的区别在于单次型读完一次数据就会自动转为PowerDown模式。

各模式测量所需时间

时序图

Bh1750采用标准的IIC总线结构,驱动程序也简单,从图可以看出设置高精度连续读模式先发送IIC起始信号再发送7位器件地址+1位写标志位也就是0X46,然后从机应答之后在发送模式指令等待ack应答后发送IIC停止信号这样一条模式就设置完毕。代码如下:

void bh_data_send(u8 command)
{do{iic_start();                      //iic起始信号iic_byte_write(BHAddWrite);       //发送器件地址}while(iic_wait_ack());           //等待从机应答iic_byte_write(command);          //发送指令iic_wait_ack();                   //等待从机应答iic_stop();                       //iic停止信号
} 

读取数据参照时序图也比较简单,先发送IIC起始信号,在发送7位器件地址+一位读写标志位,等待从机ACK应答,这时主机开始读取IIC数据,再主机读取完8位数据,主机要向从机发送ack应答信号告诉从机接收数据完毕,然后再读取低八位数据,主机发送非应答信号然后结束IIC通信。代码如下:

u16 bh_data_read(void)
{u16 buf;iic_start();                       //iic起始信号iic_byte_write(BHAddRead);         //发送器件地址+读标志位iic_wait_ack();                     //等待从机应答buf=iic_byte_read(1);              //读取数据buf=buf<<8;                        //读取并保存高八位数据buf+=0x00ff&iic_byte_read(0);      //读取并保存第八位数据iic_stop();                        //发送停止信号 return buf; 
}


     这样基本驱动就写完整了下面写一下综合测试代码:

int main(void)
{float datalx;                 USART1_Config();delay_init();iic_init();bh_data_send(BHPowOn);    //发送启动命令bh_data_send(BHReset);    //清除寄存器内容bh_data_send(BHModeH2);   //设置高精度为模式2delay_ms(180);            //设置完成后要有一段延迟,手册上说最大180ms就可以了while(1){datalx =bh_data_read()/1.2; //根据手册读取的数据除以1.2就得到单位位lx的光强度检测值。printf ("%f",datalx);delay_ms(500);}
}

    串口输出结果:不同光强如图所示。

     工程下载:点击打开链接



http://www.ppmy.cn/news/907662.html

相关文章

shineblink BH1750光照强度传感器

BH1750光照强度传感器 一、本例程实现功能二、基本概念三、 传感器参数配置概述四、接线图六、代码运行结果 一、本例程实现功能 通过BH1750光照强度传感器模块测量周围灯光或太阳光等光照强度&#xff0c;并通过print()函数在电脑串口调试终端打印输出。 二、基本概念 光照强…

BH1750 传感器实战教学 —— 驱动移植篇

前言 上一篇 BH1750 的实战教学我们说明的实际应用中传感器的硬件设计 &#xff1a; BH1750 传感器实战教学 —— 硬件设计篇 我们提到过在本次使用的芯片为 51 内核&#xff0c;I2C 通讯驱动实现与 STM32 上还是有很大区别的。 对于我们来说&#xff0c;已经掌握了 STM32 …

光照传感器BH1750实验

光照传感器BH1750实验 1 实验目的 通过光照传感器 BH1750 检测光照数据实验熟悉 IIC 通信协议&#xff0c;在详细了解该协议的基 础上编程模拟 IIC 实现光照数据的采集。 2 BH1750 模块简介 BH1750 是一种用于两线式串行总线接口的数字型光强度传感器集成电路。这种集成电 路可…

RT-Thread Studio 使用笔记(六)| 获取光传感器数据(I2C设备驱动+BH1750手写驱动代码分享)

1. 介绍 2. 添加I2C设备 2.1. 打开I2C设备驱动框架 双击左侧 RT-Thread Setting 文件,即可打开RT-Thread图形化配置工具,软件模拟I2C这一项是灰色的,表示没有打开,单击一下即可打开软件 I2C 的驱动框架,图标变为彩色表示打开: 右击该选项可以打开更多配置,比如查看该…

BH1750( GY-302 )光照传感器

文章目录 一、产品简介二、IIC通信三、BH1750的使用四、程序源码 这里我先简单的介绍一下BH1750光照传感器模块的基本信息(不多废话)&#xff0c;我将着重讲解它的使用部分&#xff0c;相信对于屏幕前的你也是更关心它是怎么使用的&#xff0c;OK&#xff0c;gogogo&#xff01…

esp8266 BH1750光照强度传感器

BH1750FVI 是一种用于两线式串行总线接口的数字型光强度传感器集成电路。这种集成电路可以根据收集的光线强度数据来调整液晶或者键盘背景灯的亮度。利用它的高分辨率可以探测较大范围的光强度变化&#xff08; 1lx-65535lx&#xff09;。这个模块可以接入3.3~5v的电压。 发送…

spin_lock_bh使用

spin_lock_bh作用&#xff1a; 1.保护临界区 2.禁止抢占 3.禁止软中断 在软中执行函数_do_softirq()中已经使用__local_bh_disable_ip(_RET_IP_, SOFTIRQ_OFFSET)来禁止软中断了&#xff0c;所以CPU上执行软中断是串行执行的。 软中断的执行&#xff1a; 1.irq_exit()退出时…

STM32驱动BH1750模块

模块描述 BH1750FVI是一款用于I2C总线接口的数字环境光传感器IC。该集成电路最适合获取环境光数据&#xff0c;用于调整手机的 LCD和键盘背光功率。可以在高分辨率下检测宽范围&#xff08;1-65535 lx&#xff09; 引脚说明 VCC5VGNDGNDSCLPB6SDAPB7ADDRVCC/GND ADDR引脚等…