模块描述

BH1750FVI是一款用于I2C总线接口的数字环境光传感器IC。该集成电路最适合获取环境光数据,用于调整手机的

LCD和键盘背光功率。可以在高分辨率下检测宽范围(1-65535 lx)

引脚说明

VCC 5V
GND GND
SCL PB6
SDA PB7
ADDR VCC/GND

ADDR引脚等下再说接VCC还是GND

上述引脚可以自行更改

工作模式

BH1750FVI模块共有六种工作模式:连续H-分辨率模式、连续H-分辨率模式2、连续L-分辨率模式、一次H分辨率模式、一次H分辨率模式2、一次性L分辨率模式

哦吼,那么多的工作模式,我们该用哪种呢,第一眼看上去是不是很懵,不用慌不用急,在

手册中建议使用 连续H-分辨率模式,那我们就接受他的建议,使用连续H-分辨率模式。

意思大致为:我们建议使用H分辨率模式。H分辨率模式的测量时间(积分时间)太长,以至于某些噪声(包括50Hz/60Hz噪声)被拒绝。H分辨率模式是1Lx分辨率,因此它适用于黑暗(小于10Lx)。H分辨率模式2也适用于探测黑暗 —— (翻译来自百度翻译)

读取数据流程

每个芯片都有固有的读取数据流程,下面我们来看一下bh1750模块的读取流程,以连续H-分辨率模式为例

大致流程为:通电指令 -> 工作模式指令 -> 获取数据

ROM指令

连续H-分辨率模式

时序如下:

总上,读取数据全过程为:
第一步:通过I2C总线,主机给bh1750设备发送数据:0x01 ——> (Power on)
第二步:通过I2C总线,主机给bh1750设备发送数据:0x10 ——> (Continuously H-resolution mode)
第三步:通过I2C总线,主机读取设备bh1750采集到的数据

代码如下

BH1750.c

/*** @brief               bh1750.c* @Date:               2022.4.20* @Revision:           V1.0* @Writer:             点灯大师* @Affiliated unit:   黄河科技学院* @Email:              im_leihao@163.com          * @note:               参考BH1750数据手册,更多驱动:https://gitee.com/zleihao/st_stm32_drive.git*/
#include "bh1750.h"/*** @brief  bh_CheckOk* @param  无* @return 0: 检测到bh1750  1:没有检测到bh1750* @note   检测总线上是否有bh1750设备 */
uint8_t bh_CheckOk()
{if(iic_check_device(BH_DEVICE_ADDR) == 0){iic_stop();return 0;}else {iic_stop();return 1;}
}/*** @brief  bh1570_Init* @param  无* @return 无* @note   设置工作模式为:连续H分辨率模式*         设置步骤为:Power on -> Continuously H-Resolution Mode*/
void bh1570_Init(void) {//power oniic_start();iic_send_byte(BH_DEVICE_ADDR);iic_wait_ack();iic_send_byte(POWER_ON);iic_wait_ack();iic_stop();//Continuously H-Resolution Modeiic_start();iic_send_byte(BH_DEVICE_ADDR);iic_wait_ack();iic_send_byte(H_RESOLUTION_MODE);iic_wait_ack();iic_stop();   //Wait to complete 1st H-resolution mode measurement.( max. 180ms. )SysTick_Delay_Ms(200);
}/*** @brief  read_result* @param  无* @return 无* @note   读取到设备bh1750采集到值*/
float read_result(void) {uint8_t msb,lsb;uint16_t dat;  float temp;iic_start();//读iic_send_byte(BH_DEVICE_ADDR | IIC_RD);iic_wait_ack();//读取高8位数据msb = iic_read_byte();iic_ack();//读取低8位数据lsb = iic_read_byte();iic_no_ack();iic_stop();SysTick_Delay_Ms(5);//合并数据dat = msb;dat = (dat << 8) | lsb;//换算比 1.2temp = (float)dat/1.2; return temp;
}

BH750.h

#ifndef _BH1750_H
#define _BH1750_H#include "bsp_iic.h"
#include "bsp_SysTick.h"//ADDR 引脚接线是否接地
#define ADDR_TO_GND #ifdef ADDR_TO_GND#define BH_DEVICE_ADDR 0x46   //ADDR引脚接地
#else#define BH_DEVICE_ADDR 0xB8   //ADDR引脚接VCC
#endif//Rom指令
#define POWER_ON           0x01
#define H_RESOLUTION_MODE  0x10uint8_t bh_CheckOk();
float   read_result(void);
void    bh1570_Init(void);#endif

主函数

#include "bsp_debug_usart.h"
#include"bsp_iic.h"
#include "bh1750.h"int main(void) {//初始化USART1USART_Config();SysTick_Init();if (bh_CheckOk() == 0) {printf("检测到bh1750设备\n");} else {printf("设备不存在,已退出\n");return 0;}//初始化bh1750bh1570_Init();while (1) {printf("%0.3f\n",read_result());//200ms读取一次SysTick_Delay_Ms(200);}}

实现现象

完美,收工

STM32驱动BH1750模块相关推荐

  1. 【STM32训练—WiFi模块】第一篇、STM32驱动ESP8266WiFi模块获取网络时间

    目录 第一部分.写在前面 1.硬件准备 2.相关的AT指令 3.参考博客 第二部分.电脑串口助手调试ESP8266模块获取网络时间 1.ESP8266获取时间的流程 2.具体实现步骤 第三部分.STM ...

  2. 【CubeMX配置STM32驱动超声波模块(HC-SR04)】

    CubeMX配置STM32以驱动超声波模块(HC-SR04) 一.CubeMX配置STM32 1.选择定时器 选择输入捕获模式 预分频设置为71,向上计数,自动重装值65535 然后将名字改为ECHO ...

  3. STM32驱动RC522-RFID模块

    简介:STM32F103C8T6驱动RC522-RFID模块源码介绍. 开发平台:KEIL ARM MCU型号:STM32F103C8T6 传感器型号:RC522-RFID 特别提示:驱动内可能使用了 ...

  4. [网友问答1]STM32驱动PCF8591模块,实现AD/DA转换

    欢迎关注 程序员小哈带你玩转嵌入式,微信搜索:嵌入式从0到1,更多干货等着你. 想进小哈技术交流群,请加程序员小哈个人微信,带你嵌入式入门进阶. 问题原由 粉丝提问,STM32如何驱动PCF8591? ...

  5. STM32 驱动 ESP8266 WIFI 模块

    目录 1. 模块引脚 2. 测试模块是否正常 3. AT指令 ​4. ESP8266三种工作模式 5. 配置WIFI模块 6. STM32驱动WIFI模块 拿到一个野火的esp8266模块,驱一下试试 ...

  6. 基础篇010.2 STM32驱动RC522 RFID模块之二:STM32硬件SPI驱动RC522

    目录 1. 实验硬件及原理图 1.1 RFID硬件 1.2 硬件原理图 2. 单片机与RFID硬件模块分析 3. 利用STM32CubeMX创建MDK工程 3.1 STM32CubeMX工程创建 3. ...

  7. STM32驱动HC-SR04超声波模块

    STM32学习笔记--HC-SR04超声波测距模块 碰巧学校老师要求做个HC-SR04超声波的实验,笔者在完成实验报告的同时,也顺带完成一篇STM32驱动超声波模块记录. HC-SR04模块使用 ST ...

  8. STM32 驱动 GY-302 光照传感器 BH1750 模块(软件IIC与硬件IIC驱动)

    1.特别说明 ​ 要是不想看原理和过程,直接下拉找代码吧,都是测试过的,很稳定,有硬件I2C驱动的,也有软件模拟I2C驱动的,基于STM32F103系列和STM32F4系列实现,基于标准库实现,条理清 ...

  9. K_A08_004 基于 STM32等单片机驱动MX1919模块按键控制直流电机正反转加减速启停

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 1.MX1919模块驱动时序 2.对应程序: 3.PWM信号 四.部分代码说明 接线说明 1.STC89C52RC+MX1919 ...

最新文章

  1. 标记一下被自己遗忘的java基础
  2. java遍历集合list,JAVA基础(List集合遍历)
  3. 企业网站前端制作实战教程 JQuery CSS JS HTML 项目需求分析与准备工作
  4. 01-subgradients_notes
  5. Silverlight 4处理StartWith的BUG
  6. edgesForExtendedLayout ios7新特性
  7. java 国际象棋 中文版_卡尔波夫国际象棋豪华版
  8. 常用sql语句整理:mysql
  9. pic单片机tmr1计数c语言,PIC单片机C语言编程实例五.doc
  10. 数学建模相关知识梳理
  11. 【VUE】vue安装教程
  12. 网络直播卖货为什么能火
  13. 曾經的文字﹐曾經的歲月
  14. 安卓手机更新过程手机乱码_王者荣耀安卓更新更新时出现乱码解决办法
  15. 【USB笔记】USB 2.0 帧开始包Start-of-Frame Packets
  16. 全球与中国矿物加工工程市场深度研究分析报告
  17. 基于TI Sitara Cortex-A8 ARM AM335x评估板串口
  18. 玩股票的人都是接盘侠
  19. 【Designing ML Systems】第 10 章 :MLOps 的基础设施和工具
  20. “长宽高”不设限,中软国际带你在云上“乘风破浪”

热门文章

  1. 回炉再造Css Layout
  2. 【云原生】裸金属架构之服务器安装VMWare ESXI虚拟化平台详细流程
  3. ADAMS-Simulink联合仿真-零基础(一)
  4. flex 解析 html5,Flex布局详解
  5. 如何制作自己的网页字体图标
  6. Windows 7 SP1不能更新的问题
  7. 判断字符串是中文或者英文
  8. python爬表情包_【从零开始写爬虫一】批量下载表情包
  9. CNN可视化!从CVPR 2022出发,聊聊CAM是如何激活我们文章的热度!
  10. 【20190405】算法-输入一个字符串,按字典序打印出该字符串中字符的所有排列