纬图虚拟仪器论坛

 找回密码
 立即注册
搜索
查看: 36802|回复: 20

BH1750光强传感器STM32测试程序

[复制链接]
发表于 2012-11-22 11:17:25 | 显示全部楼层 |阅读模式
本帖最后由 wdluo 于 2012-11-22 12:19 编辑

程序功能说明:
1、通过STM32的硬件I2C读写控制BH1750光照度传感器模块测量环境光照强度。
2、程序通过串口打印输出光照强度值。
3、程序将光照强度值在LCD屏上显示。

程序注意事项:
1、根据BH1750传感器手册可知,在One Time H-Resolution Mode2测量模式下测量光照强度大于会要120ms以上的测量时间,所以程序在发送测量命令以后应该尽量延时120ms以上,否则测量出来的数据不准确。
2、在两次测量之间最好加个延时,也就是在第一次测量结束和下次测量命令发出之间加个100ms左右的延时,否则也会出现测量错误的问题。
3、在使用FSMC驱动LCD时不能用I2C1,只能用I2C2,或者将I2C1的时钟和引脚重映射。
4、测量结果保存在两个字节中的,所以需要作移位处理,具体处理方式可以产考手册和程序。

程序主函数:
  1. /**
  2.   * @brief  串口打印输出光照强度值
  3.   * @param  None
  4.   * @retval None
  5.   */
  6. int main(void)
  7. {
  8.         uint8_t I2C_Data[10],ret;
  9.         NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000); //重新映射中断向量表,默认情况下可以不要
  10.         SystemInit();//系统时钟初始化
  11.         USART_Configuration(115200);//串口1初始化
  12.         printf("\x0c\0");printf("\x0c\0");//超级终端清屏
  13.         printf("\033[1;40;32m");//设置超级终端背景为黑色,字符为绿色
  14.         printf("\r\n*******************************************************************************");
  15.         printf("\r\n************************ Copyright 2009-2012, ViewTool ************************");
  16.         printf("\r\n************************* http://www.viewtool.com/bbs *************************");
  17.         printf("\r\n***************************** All Rights Reserved *****************************");
  18.         printf("\r\n*******************************************************************************");
  19.         printf("\r\n");
  20.         //根据BH1750FVI传感器设置I2C初始化数据
  21.         I2C_Info.controlMode = 1;//硬件控制
  22.         I2C_Info.speed=100000;//100K
  23.         I2C_Info.subAddrMode=2;//无子地址模式
  24.         I2C_Info.subAddrWidth=0;//子地址为0字节宽度
  25.         I2C_Info.slaveAddr=0x46;//BH1750FVI传感器I2C地址
  26.         I2C_Info.channel=1;//使用I2C2
  27.         VT_I2C_HardInit(&I2C_Info);
  28.         I2C_Data[0]=0x01;
  29.         VT_I2C_HardWriteNByte(I2C2,0,I2C_Data,1);//传感器芯片上电命令
  30.         while(1)
  31.         {
  32.                 I2C_Data[0]=0x11;
  33.                 ret = VT_I2C_HardWriteNByte(I2C2,0,I2C_Data,1);//发送测量命令
  34.                 if(ret){
  35.                         printf("I2C写数据错误 %d\n\r",ret);
  36.                 }
  37.                 Delay(3000000);//等待大于120ms,必须加这个延时,否则传感器没准备好数据会出现读数据错误
  38.                 ret = VT_I2C_HardReadNByte(I2C2,0,I2C_Data,2);//读取光照强度值
  39.                 if(ret){
  40.                         printf("I2C读数据错误 %d\n\r",ret);
  41.                 }else{
  42.                         printf("光强度:%f lx\n\r",((I2C_Data[0]<<8)+I2C_Data[1])/(1.2*2));
  43.                 }
  44.                 Delay(1000000);
  45.         }
  46. }
复制代码
程序运行效果:
程序运行效果图.jpg

程序源码下载:
BH1750_LCD.rar (642.35 KB, 下载次数: 1027)
回复

使用道具 举报

 楼主| 发表于 2012-11-22 20:30:46 | 显示全部楼层
wkxwkx101 发表于 2012-11-22 19:10
光强 温湿度  大气压 CO2 ......期待楼主更多的作品哈

呵呵,传感器不够用了
回复 支持 反对

使用道具 举报

发表于 2013-2-25 16:33:34 | 显示全部楼层
请问下~如果用51单片机来控制~用LABVIEW可以仿真吗?会不会简单一些....谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-2-25 16:35:42 | 显示全部楼层
守护折 发表于 2013-2-25 16:33
请问下~如果用51单片机来控制~用LABVIEW可以仿真吗?会不会简单一些....谢谢

用串口通信没问题
回复 支持 反对

使用道具 举报

发表于 2013-2-25 16:46:50 | 显示全部楼层
wdluo 发表于 2013-2-25 16:35
用串口通信没问题

我之前用Protues进行仿真,但是找不到BH1750这种芯片~就不知道如何仿真~~现在是不是LABVIEW的库里面有这个芯片呢?额,我之前只是简单接触过LABVIEW,有什么教程是涉及到这方面的吗?感激不尽~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-2-25 18:21:13 | 显示全部楼层
守护折 发表于 2013-2-25 16:46
我之前用Protues进行仿真,但是找不到BH1750这种芯片~就不知道如何仿真~~现在是不是LABVIEW的库里面有这个 ...

这个不是仿真的,是实际硬件电路接上后测的,LABVIEW里面是没有这种传感器库的
回复 支持 反对

使用道具 举报

发表于 2013-3-4 17:19:44 | 显示全部楼层
不管你信不信,反正我是信了。
回复 支持 反对

使用道具 举报

发表于 2013-3-21 11:07:33 | 显示全部楼层
硬件电路是怎么连接的呢?ADD是拉高还是拉低?SCL和SDA上拉电阻了吗,多大的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-21 12:45:11 | 显示全部楼层
huo113616455 发表于 2013-3-21 11:07
硬件电路是怎么连接的呢?ADD是拉高还是拉低?SCL和SDA上拉电阻了吗,多大的?

SCL和SDA一般4.7K上拉电阻即可,ADD是什么?
回复 支持 反对

使用道具 举报

发表于 2013-3-21 20:45:45 | 显示全部楼层
wdluo 发表于 2013-3-21 12:45
SCL和SDA一般4.7K上拉电阻即可,ADD是什么?

是选择地址的引脚,能详细看下你的电路图吗。。多谢了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-22 11:56:09 | 显示全部楼层
huo113616455 发表于 2013-3-21 20:45
是选择地址的引脚,能详细看下你的电路图吗。。多谢了

我是买的现成模块,地址是固定死了的
回复 支持 反对

使用道具 举报

发表于 2013-4-18 21:21:07 | 显示全部楼层
下载实验过   不错!!!
回复 支持 反对

使用道具 举报

发表于 2013-4-20 16:44:24 | 显示全部楼层
非常感谢~毕设急需
回复 支持 反对

使用道具 举报

发表于 2013-7-15 21:49:15 | 显示全部楼层
wdluo 发表于 2013-3-22 11:56
我是买的现成模块,地址是固定死了的

ADD脚接高或接低  地址就变了啊~
回复 支持 反对

使用道具 举报

发表于 2014-5-23 17:44:38 | 显示全部楼层
从串口输出的话 也得跟lcd一样必须使用I2C2吗??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-28 15:40:19 | 显示全部楼层
鱼儿19900712 发表于 2014-5-23 17:44
从串口输出的话 也得跟lcd一样必须使用I2C2吗??

这个不一定的,可以根据实际情况修改
回复 支持 反对

使用道具 举报

发表于 2014-8-5 15:37:09 | 显示全部楼层
你好,楼主,能不能把这个程序的代码给我参考一下啊?
回复 支持 反对

使用道具 举报

发表于 2014-8-5 15:39:37 | 显示全部楼层
我的邮箱是[email protected]
回复 支持 反对

使用道具 举报

发表于 2015-1-12 20:09:50 | 显示全部楼层
楼主,您能把LABVIEW的子VI也发布出来?非常感谢。。。
回复 支持 反对

使用道具 举报

发表于 2015-1-13 10:00:53 | 显示全部楼层
楼主,方便把labview子VI发给我下(QQ:[email protected])?毕业设计正需要呢?
回复 支持 反对

使用道具 举报

发表于 2015-9-22 17:49:16 | 显示全部楼层
程序编译完 到下载是  出现了  No Cortex-M SW Device Found    的对话框  应该怎么解决  希望能有人帮助  谢谢……………………
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|纬图虚拟仪器

GMT+8, 2024-12-12 05:30 , Processed in 0.416749 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表