STM32使用HAL库BH1750光照度传感器
开发环境
单片机:STM32F103C8T6
光照度传感器:BH1750
IDE:KEIL+STM32CUBEMX
单片机配置
1、STM32CUBEMX

BH1750代码
1、头文件
/*
*************************************************
BH1750光照数据计算(LUX)
LUX = 读取数据/1.2
例如:
读取值为0x56,0x78
LUX = 0X5678 / 1.2 = 22136/1.2 = 18447*************************************************
*/#ifndef __BH1750_H
#define __BH1750_H#include "main.h"#define BH1750_PORT hi2c2 /*使用端口*/#define BH1750_ADDRESS 0x46 /*ADDRESS引脚接地时地址为0x46,接电源时地址为0xB8*/#define BH1750_POW_OFF 0X00
#define BH1750_POW_ON 0X01
#define BH1750_POW_RST 0X07
#define BH1750_CONT_HI_RSLT_1 0X10 /*连续测量,1lx精度开始测量,周期120ms*/
#define BH1750_CONT_HI_RSLT_2 0X11 /*连续测量,0.5lx精度开始测量,周期120ms*/
#define BH1750_CONT_LOW_RSLT 0X13 /*连续测量,4lx精度开始测量,周期16ms*/
#define BH1750_ONE_HI_RSLT_1 0X20 /*一次测量,1lx精度开始测量,周期120ms,测量完后自动进入POWER DOWN*/
#define BH1750_ONE_HI_RSLT_2 0X21 /*一次测量,0.5lx精度开始测量,周期120ms,测量完后自动进入POWER DOWN*/
#define BH1750_ONE_LOW_RSLT 0X23 /*一次测量,4lx精度开始测量,周期16ms,测量完后自动进入POWER DOWN*/HAL_StatusTypeDef BH1750_Init(void);HAL_StatusTypeDef BH1750_WriteOpecode(uint8_t* pData, uint16_t size);
HAL_StatusTypeDef BH1750_ReadData(uint8_t* pData, uint16_t size);#endif
2、C文件
#include "bh1750.h"
#include "i2c.h"HAL_StatusTypeDef BH1750_Init(void)
{uint8_t opecode = 0x01;return (BH1750_WriteOpecode(&opecode, 1));
}/*
*************************************************
功能:写BH1750操作码到芯片,控制模式
*************************************************
*/
HAL_StatusTypeDef BH1750_WriteOpecode(uint8_t* pData, uint16_t size)
{HAL_StatusTypeDef status = HAL_OK;status = HAL_I2C_Master_Transmit(&BH1750_PORT, BH1750_ADDRESS,pData, size, 1);return status;
}
/*
*************************************************
功能:读取BH1750的数据,存放到pData中
*************************************************
*/HAL_StatusTypeDef BH1750_ReadData(uint8_t* pData, uint16_t size)
{HAL_StatusTypeDef status = HAL_OK;status = HAL_I2C_Master_Receive(&BH1750_PORT, BH1750_ADDRESS+1,pData, size, 1);return status;
}
3、主函数操作BH1750
/* USER CODE BEGIN 2 */BH1750_Init(); /*初始化BH1750,上电*/opeCode= BH1750_CONT_HI_RSLT_1; /*配置工作模式为连续高分辨率转换,1lx精度,120ms转换周期*/BH1750_WriteOpecode(&opeCode,1);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_Delay(200);BH1750_ReadData(g_ucaDataBuff,2);/*获取照度数据*/ftmp = (g_ucaDataBuff[0]<<8 | g_ucaDataBuff[1]) / 1.2f + 0.5f;/*转换照度数据*/g_usLux = (uint16_t)ftmp;HAL_Delay(500);}/* USER CODE END 3 */
结果

相关文章:
STM32使用HAL库BH1750光照度传感器
开发环境 单片机:STM32F103C8T6 光照度传感器:BH1750 IDE:KEILSTM32CUBEMX 单片机配置 1、STM32CUBEMX BH1750代码 1、头文件 /* ************************************************* BH1750光照数据计算(LUX) …...
qt代码练习
计时器练习 namespace Ui { class third; }class third : public QWidget {Q_OBJECTpublic:explicit third(QWidget *parent nullptr);~third();QLabel *labth1 new QLabel(this);QTextEdit *txtth1 new QTextEdit("闹钟",this);QLineEdit *leth1 new QLineEdit(t…...
PoseiSwap:首个基于模块化设施构建的订单簿 DEX
在前不久,PoseiSwap 曾以1000万美元的估值,获得了来自于ZebecLabs基金会的150万美元的融资。此后 PoseiSwap 又以2500万美元的估值,从GateLabs、EmurgoVentures、Republic以及CipholioVentures等行业顶级投资机构中,获得了新一轮未…...
Linux NameSpace 虚拟化 资源隔离
NameSpace NameSpace介绍 在操作系统中命名空间命名空间提供的是系统资源的隔离,其中系统资源包括了:进程、网络、文件系统等等 实际上linux系统实现命名空间主要目的之一就是为了实现轻量级虚拟化服务,也就是我们说的容器,在同…...
【Android Framework系列】第9章 AMS之Hook实现登录页跳转
1 前言 前面章节我们学习了【Android Framework系列】第5章 AMS启动流程和【Android Framework系列】第6章 AMS原理之Launcher启动流程,大概了解了AMS的原理及启动流程,这一章节我们通过反射和动态代理对不同Android版本下的AMS进行Hook,实现…...
哪些行业需要连接云专线?
在诸多行业之中,有一些行业对数据安全性要求高、业务需要实时性、业务需求复杂,往往需要建立起私密、高速、安全的传输通道,云专线是他们经常采用的方案。具体来讲,都有哪些行业需要连接云专线呢?请见下方。 1、金融行…...
【Mysql】group语句删除重复数据只保留一条
【Mysql】group语句删除重复数据只保留一条 【一】案例分析 假如在数据初始化的时候,insert脚本执行了两次,导致表里的数据都是重复的(没有设置唯一键)。这个时候再加上mybatis-plus的selectOne方法,就会出现报错。因…...
Git详解和命令大全
目录 一、Git 的基本概念二、Git 的安装和使用三、Git 的版本分支管理四、Git 的命令大全1. 常用命令2. 命令大全 五、版本分支管理的最佳实践六、Git 实践七、高级特性八、Git 的未来发展 Git 是一款开源的分布式版本控制系统,可以有效地处理从小到非常大的项目版本…...
北漂Java程序员入职五个月的收获总结
👨💻博主主页:小尘要自信 👨💻本文专栏:Java程序员的成长 👨💻上一篇文章:告别过去,拥抱未来:一个Java开发者的成长之路 👨&a…...
Android系统的进程管理(创建->优先级->回收)
一、进程的创建 1、概述 Android系统以Linux内核为基础,所以对于进程的管理自然离不开Linux本身提供的机制。例如: 通过fork来创建进行通过信号量来管理进程通过proc文件系统来查询和调整进程状态 等 对于Android来说,进程管理的主要内容…...
C#界面美化小技巧
1.窗体设置为无边框 FormBorderStyle的属性设置为none 2.窗体无边框,可以拖拽 private Point mPoint new Point(); private void Download_MouseDown(object sender, MouseEventArgs e) { mPoint.X e.X; mPoint.Y e.Y; …...
‘vite‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
1.切换到工程目录下 2.执行npm install(最关键的一步了!!) 3. 最后直接运行:npm run dev 4.浏览器直接打开就行了!...
Linux下查阅帮助文档必学命令 man
Linux操作系统的使用中,我们经常会遇到很多问题,这个时候查询文档的能力至关重要,黄老师来推荐大家使用man,这时我们必须掌握的查阅能力: 最常用的命令: man 名称 man 数字(1~9) 名称 这里的数字分别代表:...
uniapp scroll-view显示滚动条
在style中添加样式: ::v-deep ::-webkit-scrollbar {/* 滚动条整体样式 */display: block;width: 10rpx !important;height: 10rpx !important;-webkit-appearance: auto !important;background: transparent;overflow: auto !important;}::v-deep ::-webkit-scroll…...
15、PHP神奇的数组索引替代
1、有数字索引指定的数组元素时,以数字索引的为准。 <?php $aarray(a,b,1>c,5>"d","e"); print_r($a); ?> 输出结果:b的位置直接被c替代了,e 的值为最大的整数索引1。 PHP不这么搞,怎么可能成…...
同为科技(TOWE)带热插拔功能机柜PDU插座的应用
所谓热插拔(hot-plugging或Hot Swap),即带电插拔,指的是在不关闭系统电源的情况下,将模块、板卡插入或拔出系统而不影响系统的正常工作,从而提高了系统的可靠性、快速维修性、冗余性和对灾难的及时恢复能力…...
GR5526 128BIT UUID改16BIT UUID
以下两个宏定义是我添加的。其中USING_128BIT_UUID的条件编译部分是SDK原生部分,USING_16BIT_UUID条件编译部分则是由我修改,通过这样的修改,128BIT UUID就变更为16BIT UUID了。如果你的广播、扫描响应有涉及UUID,不要忘记更改它。…...
【Android】使用 CameraX 实现基础拍照功能
目录 目录 1. 基础开发环境 2. 添加相关依赖 3. APP 布局 4. 主流程逻辑 5. 调试或安装 APK 1. 基础开发环境 JDK:JDK17 Android Studio:Android Studio Giraffe | 2022.3.1 Android SDK:Android API 34 Gradle: gradle-7.2-bin.zip Ca…...
刷题笔记 day2
力扣 1089 复写零 思路:双指针 第一步:利用指针 cur 去记录最后一位要复写的数 , 利用指针 dest 指向最后一位数所要复写的位置; 实现过程:最开始 cur 指向0,dest 指向 -1 , 当arr[cur] ! …...
回归预测 | MATLAB实现SO-CNN-LSTM蛇群算法优化卷积长短期记忆神经网络多输入单输出回归预测
回归预测 | MATLAB实现SO-CNN-LSTM蛇群算法优化卷积长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现SO-CNN-LSTM蛇群算法优化卷积长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现SO-CNN-LS…...
京东抢购自动化全攻略:从入门到精通的技术实践指南
京东抢购自动化全攻略:从入门到精通的技术实践指南 【免费下载链接】JDspyder 京东预约&抢购脚本,可以自定义商品链接 项目地址: https://gitcode.com/gh_mirrors/jd/JDspyder 30秒快速评估:你是否需要JDspyder? 在决…...
抖音无水印下载完全指南:5分钟掌握批量下载核心技巧
抖音无水印下载完全指南:5分钟掌握批量下载核心技巧 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...
别再手动调格式了!用C#和FastReport.Net搞定标签批量打印与90度旋转(附完整源码)
C#与FastReport.Net实战:打造高可用的标签批量打印与旋转解决方案 在仓储管理、物流配送和零售价签打印等场景中,开发人员经常需要处理各种规格的标签打印需求。传统的手动调整方式不仅效率低下,而且难以应对频繁变化的业务需求。本文将分享如…...
3步诊断与优化:使用NVIDIA Profile Inspector解决显卡性能瓶颈
3步诊断与优化:使用NVIDIA Profile Inspector解决显卡性能瓶颈 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector作为一款专业的显卡驱动级配置工具,能够…...
Buck电路设计避坑指南:为什么你的小信号模型仿真总是不收敛?
Buck电路小信号模型仿真收敛问题实战解析 在电力电子系统设计中,Buck变换器的小信号模型仿真对于理解系统动态特性至关重要。然而,许多工程师在从理论转向实践时,常常遇到仿真不收敛、波形异常等问题。本文将深入剖析这些问题的根源ÿ…...
Qwen3.5-2B效果展示:对含中英混排、公式符号的PDF截图进行精准语义还原
Qwen3.5-2B效果展示:对含中英混排、公式符号的PDF截图进行精准语义还原 1. 模型概览 Qwen3.5-2B是通义千问团队推出的轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。这个模型主打低功耗、低门槛部署特性&#x…...
收藏!30岁转行AI大模型,来得及吗?小白程序员必看的真实转型干货
“30岁,人生好像走到了岔路口,转行还来得及吗?”这是很多职场人遭遇瓶颈时,都会反复纠结的问题。尤其是面对AI大模型这样的新兴领域,不少人既心动又胆怯——怕年龄太大、怕没有基础、怕跟不上节奏。但今天我想明确告诉…...
Qwen3-1.7B推理模式切换体验:思考模式与非思考模式效果对比
Qwen3-1.7B推理模式切换体验:思考模式与非思考模式效果对比 1. 引言:双模式推理的创新价值 在边缘计算和轻量化AI模型快速发展的今天,Qwen3-1.7B通过独特的动态双模式架构,为用户提供了灵活的推理选择。这款17亿参数的轻量级大语…...
Java整型溢出:越界运算后结果如何
Java整形溢出详细说明:越界操作后的结果和类型在Java程序中,理解数据类型的值范围非常重要。本文将深入探讨越界操作后int类型的行为,并解释int类型的值范围和越界操作结果。Javaint类型的值范围为-2、147、483、648至2、147、483、647。当计算结果超出此…...
Mergo入门指南:10分钟学会Go结构体与映射合并技巧
Mergo入门指南:10分钟学会Go结构体与映射合并技巧 【免费下载链接】mergo Mergo: merging Go structs and maps since 2013 项目地址: https://gitcode.com/gh_mirrors/me/mergo Mergo是一个强大的Go语言库,专门用于合并结构体(struct…...
