STM32驱动BH1750模块

2023-11-12

模块描述

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 on
    iic_start();
    iic_send_byte(BH_DEVICE_ADDR);
    iic_wait_ack();
    iic_send_byte(POWER_ON);
    iic_wait_ack();
    iic_stop();

    //Continuously H-Resolution Mode
    iic_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.2
    temp = (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  0x10

uint8_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) {

	//初始化USART1
	USART_Config();
	SysTick_Init();

	if (bh_CheckOk() == 0) {
		printf("检测到bh1750设备\n");
	} else {
		printf("设备不存在,已退出\n");
		return 0;
	}
    //初始化bh1750
	bh1570_Init();
	while (1) {
		printf("%0.3f\n",read_result());
		//200ms读取一次
		SysTick_Delay_Ms(200);
	}

}

实现现象

在这里插入图片描述

完美,收工

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32驱动BH1750模块 的相关文章

  • LeetCode - 旋转数组类总结(二分法)

    搜索旋转排序数组 假设按照升序排序的数组在预先未知的某个点上进行了旋转 例如 数组 0 1 2 4 5 6 7 可能变为 4 5 6 7 0 1 2 搜索一个给定的目标值 如果数组中存在这个目标值 则返回它的索引 否则返回 1 你可以假设数
  • linux下解压命令大全

    tar 解包 tar xvf FileName tar打包 tar cvf FileName tar DirName 注 tar是打包 不是压缩 gz解压1 gunzip FileName gz解压2 gzip d FileName gz压
  • 前端中DOM是什么,怎样理解dom

    前端中DOM是什么 怎样理解 首先我们来说一下DOM是什么 文档对象模型 Document Object Model 简称DOM 我个人认为他就是将 通过浏览器的一些规则解析后 在渲染成我们能够看得见的页面 这整个过程就是DOM 它的过程分
  • vue2引入Element UI组件去创建新页面的详细步骤--项目阶段2

    目录 一 Element UI介绍 Element UI的特点 二 下载配置Element UI 零 创建vue项目 一 下载Element UI依赖 二 全局文件main js中引入Element UI 三 删除多余的东西 一 删除App
  • ctf.show

    web21 自定义迭代器 先抓个包 发现authorization 授权 后面的basic认证很奇怪 用base64解码看看就是输入的用户名和密码 返回包里出现乱码 但可以看到admin 猜测用户名就叫admin 知道了爆破登录的形式是xx
  • spring与mybatis集成

    Spring 集成 MyBatis 将 MyBatis与 Spring 进行整合 主要解决的问题就是将 SqlSessionFactory 对象交由 Spring来管理 所以 该整合 只需要将 SqlSessionFactory 的对象生成
  • Nodejs+Express中页面控制器及脚本自动加载设计

    Express自身带强大的路由功能 这让我们可以详细拆分项目的需求 设计出优美的restful风格对外API 为了方便实现上述功能 我加入了页面控制器及脚本自动加载设计 比如针对会员模块 我们在app js中指定了模块的路由文件 app u
  • 【Java】你还在使用单线程处理大量数据么?

    Java 结合实际业务场景 使用多线程异步处理大量数据 业务场景 优化方案 多线程的实现 线程池 为什么要使用线程池 线程池的创建 1 Spring配置类 2 手动创建 提交任务 1 execute 2 submit 案例伪代码 后续优化

随机推荐

  • 【Python】OpenCV常用操作函数大全!

    目录 cv2常用类 1 图片加载 显示和保存 2 图像显示窗口创建与销毁 3 图片的常用属性的获取 4 生成指定大小的矩形区域 ROI 5 图片颜色通道的分离与合并 6 两张图片相加 改变对比度和亮度 7 像素运算 1 加减乘除 8 像素运
  • 【Windows】Windows下wget的安装与环境变量配置

    1 wget安装 GNU Wget常用于使用命令行下载网络资源 包括但不限于文件 网页等 GNU Wget官网 GNU Wget GNU Wget for Windows GNU Wget for Windows 安装时首先下载主安装包 C
  • 老王的24天,

    数组元素的反转 数组元素的反转 本来的样子 1 2 3 4 之后的样子 4 3 2 1 要求不能使用新数组 就用原来的一个数组 public class Demo07ArrayReverse public static void main
  • nRF52832 — 多通道ADC接口的使用

    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX 作 者 文化人 XX 联系方式 XX 版权声明 原创文章 欢迎评论和转载 转载时能告诉我一声就最好了 XX 要说的
  • Golang基础(项目结构)

    一 标准的项目结构 在实际开发中不可能只有一个main包 更不可能就只有一个 go文件 不同级别大小的项目中包和文件数量都不同 Go语言中组织单元最大的为项目 项目下包含包 一个包可以有多个文件 包在物理层面上就是文件夹 同一个文件夹中多个
  • iOS App的上架和版本更新流程

    一 前言 作为一名iOSDeveloper 把开发出来的App上传到App Store是必要的 下面就来详细讲解一下具体流程步骤 二 准备 一个已付费的开发者账号 账号类型分为个人 Individual 公司 Company 企业 Ente
  • curl使用总结

    curl使用官网 https curl haxx se docs manpage html 1 查看curl的安装版本以及支持的协议 curl V 2 CURL分析HTTPS请求耗时时间 HTTPS耗时 TCP握手 SSL握手 因为涉及到一
  • 短视频矩阵系统源代码开发搭建分享--代码开源SaaS

    一 什么是短视频矩阵系统 短视频矩阵系统是专门为企业号商家 普通号商家提供帐号运营从流量 到转化成交的一站式服务方案 具体包含 点赞关注评论主动私信 评论区回复 自动潜客户挖掘 矩阵号营销 自动化营销 粉丝 管理等功能 可以帮助企业或商家快
  • stl排序之sort函数

    STL容器的排序 支持随机访问的容器vector deque string没有sort成员 可调用std sort排序 list排序调用自带的list sort 下面是std sort函数 有两个版本 template
  • LED点阵书写显示屏

    LED点阵书写显示屏 题目的大概要求是做一个32 32的点阵书写屏 LED 点阵模块显示屏工作在人眼不易觉察的扫描微亮和人眼可见的 显示点亮模式下 当光笔触及 LED 点阵模块表面时 先由光笔检测触及位置处 LED 点 的扫描微亮以获取其行
  • springboot no tests were found

    springboot单元测试报错 no tests were found 如图所示 原因分析 1 进行单元测试的方法不能有返回值 2 方法不能私有化 以上两个问题都会报 no tests were found 错误 正确写法
  • 华为od机试 Java 【url拼接】

    题目 给定一个URL的前缀和后缀 我们需要将其合并成一个完整的URL 在合并时 请注意以下几点 如果前缀的结尾没有斜线 而后缀的开头也没有斜线 那么在两者之间需要添加一个斜线 如果前缀的结尾和后缀的开头都有斜线 那么需要保留其中的一个 删除
  • Vue-生命周期函数

    Vue 生命周期函数 一 生命周期和生命周期函数 生命周期 Life Cycle 是指一个组件从创建 gt 运行 gt 销毁的整个阶段 强调的是一个时间段 生命周期函数 是由vue 框架提供的内置函数 会伴随着组件的生命周期 自动按次序执行
  • 【js】从数组中随机选一个数,从数组中随机选几个数

    每组中随机选一个 每组中随机选一个 randomFun arr let ri Math floor Math random arr length return arr ri 使用 let arr 1 2 3 4 5 6 7 console
  • Android QQ 登录接入详细介绍

    今日科技快讯 近日 百度地图发布2022春节出行大数据 迁徙大数据显示 2022年春运迁徙规模较去年农历同期有明显上升 春节期间全国人口迁徙规模日均值为去年农历同期的近两倍 春节前的迁徙规模峰值出现在1月29日 腊月廿七 春节后于2月6日达
  • Python写简单的拼图小游戏(附源码、资源)

    郑重声明 嘿嘿 代码与图片已上传资源 需要者自取 资源地址 https download csdn net download qq 44651842 20009562 Python小白一只 正在成长 程序自己设计 很多不足 算法很多地方能优
  • Java语言与面向对象的程序设计

    这几天很迷茫 听老师介绍了一款软件 中国大学MOOC 刚好我是软件专业的学生 索性听了北京大学老师的一节关于Java的讲课 果断被震撼到了 他们的讲课给人一种很深刻 深入 的感觉 我今天就把老师讲到的东西记了下来 以便于有兴趣的朋友阅读 J
  • Qt快速入门学习笔记(画图篇)

    1 Qt中提供了强大的2D绘图系统 可以使用相同的API在屏幕和绘图设备上进行绘制 它主要基于QPainter QPaintDevice和QPaintEngine这三个类 其中QPainter用来执行绘图操作 QPaintDevice提供绘
  • java开发利用jacob将word转pdf

    jacob 缺点 需要 window 环境 而且速度是最慢的需要安装 msofficeWord 以及 SaveAsPDFandXPS exe word 的一个插件 用来把 word 转化为 pdf 开发流程 SaveAsPDFandXPS
  • STM32驱动BH1750模块

    模块描述 BH1750FVI是一款用于I2C总线接口的数字环境光传感器IC 该集成电路最适合获取环境光数据 用于调整手机的 LCD和键盘背光功率 可以在高分辨率下检测宽范围 1 65535 lx 引脚说明 VCC 5V GND GND SC