基于STM32物联网开发板(7)--环境光采集BH1750

1.概述     bh1750fvl 是一种用于 rc 总线接口的数字环境光传感器 lc。该芯片最适合于获取移动电话液晶显示器和按键背光功率的环境光数据。 采集范围在(1~65535 l×)之间。
    特征
iic 总线接口 光强数字转换器 16 位分辩率(1 ~65535) 直接数字输出, 省略复杂的计算, 省略标定 不区分环境光源, 接近于视觉灵敏度的分光特性     应用
手机、 液晶电视、 笔记本电脑; 便携式游戏机、 数码相机、 数码摄像机; 汽车导航、 pda、 液晶显示器;  
硬件接口:
引脚
说明
b_scl
pb10 i2c时钟线
b_sda
pb11 i2c数据线
2.软件设计 开发平台:stm32cubemx +keil5
主控mcu:stm32f103ret6
通讯方式:i2c
bh1750引脚初始化代码如下:
gpio_initstruct.pin = b_scl_pin|b_sda_pin;gpio_initstruct.mode = gpio_mode_output_pp;//输出模式gpio_initstruct.pull = gpio_pullup;//上拉gpio_initstruct.speed = gpio_speed_freq_high;hal_gpio_init(gpiob, &gpio_initstruct); 3.i2c通讯协议       i2c协议属于总线协议,半双工,串行通讯,通过设备地址来选中设备。在i2c通讯过程中,一次完整的数据传输需要有起始信号、数据费收发、应答信号、停止信号等几部分组成,下面是对该协议的实现程序示例:
起始信号和停止信号:
//发送起始信号static void iic2_start(void){ iic2_sdaout_mode();//输出模式 iic2_scl(1); iic2_sdaout(1); delay_us(2); iic2_sdaout(0); iic2_scl(0);//方便后续数据收发}//停止信号static void iic2_stop(void){ iic2_sdaout_mode();//输出模式 iic2_scl(0); iic2_sdaout(0); delay_us(2); iic2_scl(1); delay_us(2); iic2_sdaout(1);} 发送应答和获取应答:
/***********发送应答信号******************************形参:u8 ack -- 0应答,1非应答*****************************************************/static void iic2_sendack(u8 ack){ iic2_sdaout_mode();//输出模式 iic2_scl(0);//告诉从机,主机开始发送数据 if(ack&0x01) { iic2_sdaout(1); } else iic2_sdaout(0); delay_us(2); iic2_scl(1);//告诉从机,主机数据发送完成 //方便下一次数据收发 delay_us(2); iic2_scl(0);}//获取应答信号static u8 iic2_wait_ack(void){ u8 cnt=0; iic2_sdain_mode();//配置为输入模式 iic2_sdaout(1); iic2_scl(0);//告诉从机,主机需要获取数据 delay_us(2); iic2_scl(1);//从机数据发送完成,主机开始读取数据 while(iic2_sdain) { cnt++; delay_us(1); if(cnt >=100)return 1; } delay_us(2); iic2_scl(0);//方便下一次数据收发 return 0;} 读取数据和发送数据:
//发送一个字节数据static void iic2_send_byte(u8 data){ u8 i=0; iic2_sdaout_mode();//输出模式 for(i=0;i< 8;i++) { iic2_scl(0);//告诉从机,主机开始发送数据 if(data&0x80)iic2_sdaout(1); else iic2_sdaout(0); delay_us(2); iic2_scl(1);//主机数据发送完成 data< <=1; delay_us(2); } iic2_scl(0);//方便下一次数据收发}//读取一个字节数据static u8 iic2_read_byte(void){ u8 i=0; u8 data=0; iic2_sdain_mode();//配置为输入模式 for(i=0;i< 8;i++) { iic2_scl(0);//告诉从机,主机需要获取数据 delay_us(2); iic2_scl(1);//开始读取数据 data< ⑤延时 120ms 以上等待启动。
初始化示例如下:
void bh1750init(void){ iic2_init();//gpio初始化 bh_data_send(bhpowon); //发送启动信号 bh_data_send(bhreset); //清除寄存器 bh_data_send(bhmodeh1); //设置为模式2 delay_ms(180); //最高延时180ms}     2.读取光强数据:①发送起始信号--》 ②发送设备地址+读使能+获取应答--》 ③读取高 8 位数据+发送应答--》 ④读取低 8 位数据+发送应答--》 ⑤发送停止信号。
   读取数据示例代码如下:
u16 bh_data_read(void) { u16 buf; iic2_start(); //iic开始 iic2_send_byte(bhaddread); //发送读地址 iic2_wait_ack(); //等待响应 buf=iic2_read_byte(); //读取数据 iic2_sendack(0); buf=buf< <8; //读取并保存高八位数据 buf+=0x00ff&iic2_read_byte(); //读取并保存第八位数据 iic2_sendack(1); iic2_stop(); //发送停止信号 return buf; }
或受益于双十一和感恩节,富士康预期年底销售量仍然强劲
mp6是什么_爱国者mp6功能介绍
雷柏MT750S多模式激光鼠标评测 上能够为上班族带来全新的办公体验
MCU厂商盛群开启第二轮涨价
HyperXPulsefireSurgeRGB鼠标评测 值不值得买
基于STM32物联网开发板(7)--环境光采集BH1750
DisplayPort发展的重新考虑
如何解决变频器出现的噪声和震动问题
红外热像仪用于救援行动
希捷科技报告2022 财年财务业绩 施耐德助力雅安医院配电系统建设
RS485集线器如何实现星型布线
串口设备的类型
iphone8什么时候上市?iphone8最新消息:iPhone8手机屏5.8英寸,还嫌小果粉可配苹果专用投影仪
苹果13系统怎么样用分屏功能
暴风魔镜Matrix在CES展上发光 堪比PC头显
电子管功放有什么好处_500w电子管功放电路图
西门子PLC动态加密计时程序设计
KUKA机器人视觉抓取的工作原理及Ethernet KRL软件控制讲解
“数字哨兵”智能核验终端匹配无锡市防疫健康码测温通行解决方案
汽车防抱死制动系统(ABS)的工作原理