GY-30光照传感器软件I2C方式驱动代码,基于STM32Cube
GY-30光照传感器的具体资料可以去淘宝搜索然后问卖家要,网上也有,所以这里我就不多嘴了。
VCC连接3到5伏电压,根据文件开头的描述在STM32CubeMX中配置好外设。
STM32Cube开发方式就是4个字“简单直接”,直接上代码。
gy30.h
#ifndef __GY30_H__
#define __GY30_H__#include "main.h"//main函数里需要使用的就这一个输入亮度变量的地址,返回读取状态
uint8_t getGY30_Lux(uint16_t *nowLum);void Z_I2C_Start(void);
void Z_I2C_End(void);
void Z_I2C_SendByte(uint8_t byte);
uint8_t Z_I2C_ReveiceByte();
void Z_I2C_SendACK(uint8_t ack);
uint8_t Z_I2C_ReveiceACK();#endif
gy30.c
/********************************************************************************* 作 者:洛宇航(SiriusIoT)* 名 称:* 备 注:* CubeMX配置方法:* 1.软件I2C* 选择两个GPIO引脚作为软件I2C引脚。* 建议命名为softI2C1_SCL,softI2C1_SDA* 默认输出高电平、开漏输出、上拉、速度设置为Hign* 2.毫秒级延时* 选择定时器,配置为每毫秒技术一次,无需开中断(默认为TIM6)********************************************************************************/#include "gy30.h"
#include "tim.h"//外设配置宏定义start
#define DHT_HTIM htim6//微秒级延时,使用了定时器6//定义I2C总线连接的GPIO端口, 只需要修改下面5段行代码即可任意改变SCL和SDA的引脚
#define GPIO_PORT_GY30 GPIOE //GY30 GPIO端口//软件I2C外设配置
#define GY30_SCL_PORT softI2C1_SCL_GPIO_Port
#define GY30_SCL_PIN softI2C1_SCL_Pin#define GY30_SDA_PORT softI2C1_SDA_GPIO_Port
#define GY30_SDA_PIN softI2C1_SDA_Pin
//外设配置宏定义end//定义读写SCL和SDA的宏
//SCL = 1
#define GY30_SCL_1 HAL_GPIO_WritePin(GY30_SCL_PORT, GY30_SCL_PIN, GPIO_PIN_SET)
//SCL = 0
#define GY30_SCL_0 HAL_GPIO_WritePin(GY30_SCL_PORT, GY30_SCL_PIN, GPIO_PIN_RESET)
//读SCL口线状态
#define GY30_SCL_READ HAL_GPIO_ReadPin(GY30_SCL_PORT, GY30_SCL_PIN)//SDA = 1
#define GY30_SDA_1 HAL_GPIO_WritePin(GY30_SDA_PORT, GY30_SDA_PIN, GPIO_PIN_SET)
//SDA = 0
#define GY30_SDA_0 HAL_GPIO_WritePin(GY30_SDA_PORT, GY30_SDA_PIN, GPIO_PIN_RESET)
//读SDA口线状态
#define GY30_SDA_READ HAL_GPIO_ReadPin(GY30_SDA_PORT, GY30_SDA_PIN)#define SCL_Pin GPIO_Pin_0
#define SDA_Pin GPIO_Pin_1//利用定时器微秒级延时
void GY30_Delay_us(uint16_t us)
{uint16_t differ = 0xffff-us-5;__HAL_TIM_SET_COUNTER(&DHT_HTIM,differ);HAL_TIM_Base_Start(&DHT_HTIM);while(differ < 0xffff-5){differ = __HAL_TIM_GET_COUNTER(&DHT_HTIM);}HAL_TIM_Base_Stop(&DHT_HTIM);
}void I2C_SetSCL(uint8_t signal){if(signal==1) GY30_SCL_1;else GY30_SCL_0;GY30_Delay_us(5); //防止电平翻转过快,因此加上延时
}void I2C_SetSDA(uint8_t signal){if(signal==1) GY30_SDA_1;else GY30_SDA_0;GY30_Delay_us(5);
}void I2C_Start(void){I2C_SetSDA(1);I2C_SetSCL(1);I2C_SetSDA(0);I2C_SetSCL(0);
}void I2C_End(){I2C_SetSDA(0);I2C_SetSCL(1);I2C_SetSDA(1);
}void I2C_SendByte(uint8_t byte){I2C_SetSCL(0);for(int i=0;i<8;++i){if((byte&0x80)==0)I2C_SetSDA(0);elseI2C_SetSDA(1);byte<<=1;I2C_SetSCL(1);I2C_SetSCL(0);}
}uint8_t I2C_ReveiceByte()
{uint8_t data=0x00;I2C_SetSDA(1);for(int i=0;i<8;++i){I2C_SetSCL(1);if(GY30_SDA_READ==1)data|=(0x80>>i);I2C_SetSCL(0);}return data;
}void I2C_SendACK(uint8_t ack)
{if(ack==0)I2C_SetSDA(0);elseI2C_SetSDA(1);I2C_SetSCL(1);I2C_SetSCL(0);
}uint8_t I2C_ReveiceACK()
{I2C_SetSDA(1);I2C_SetSCL(1);uint8_t ack=GY30_SDA_READ;I2C_SetSCL(0);return ack;
}uint8_t getGY30_Lux(uint16_t* nowLum)
{I2C_Start();I2C_SendByte(0x46);if(I2C_ReveiceACK()!=0) return 0;I2C_SendByte(0x01);if(I2C_ReveiceACK()!=0) return 0;I2C_End();I2C_Start();I2C_SendByte(0x46);if(I2C_ReveiceACK()!=0)return 0;I2C_SendByte(0x10);if(I2C_ReveiceACK()!=0)return 0;I2C_End();HAL_Delay(200);uint16_t Light=0;I2C_Start();I2C_SendByte(0x47);if(I2C_ReveiceACK()!=0) return 0;Light|=I2C_ReveiceByte();Light<<=8;I2C_SendACK(0);Light|=I2C_ReveiceByte();I2C_SendACK(1);I2C_End();*nowLum = Light;return 1;
}
相关文章:
GY-30光照传感器软件I2C方式驱动代码,基于STM32Cube
GY-30光照传感器的具体资料可以去淘宝搜索然后问卖家要,网上也有,所以这里我就不多嘴了。 VCC连接3到5伏电压,根据文件开头的描述在STM32CubeMX中配置好外设。 STM32Cube开发方式就是4个字“简单直接”,直接上代码。 gy30.h #…...
双相元编程:一种新语言设计方法
本文讨论了编程语言的一种趋势,即允许相同的语法表达 在两个不同阶段或环境(上下文)中执行的计算同时保持跨阶段(上下文)的一致行为。这些阶段通常在时间上(运行时间)或空间上(运行…...
基于SpringBoot校园外卖配送系统设计和实现(源码+LW+调试文档+讲解等)
💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…...
茗鹤APS高级计划排程系统,在集团多工厂协同生产下的应用
随着业务规模的扩大和市场的全球化,越来越多的企业选择“总部多工厂基地”的模式,此种模式大幅提升企业的产能与产量,有效分散风险。然后,与之而来的是对企业的管理提出更高的管理要求。多个生产基地不仅面临集团下发的周期性计划…...
分享六款免费u盘数据恢复工具,U盘恢复工具集合【工具篇】
U盘里面的数据丢失了怎么找回?随着数字化时代的深入发展,U盘已成为我们日常生活中不可或缺的数据存储工具。然而,由于各种原因,如误删除、格式化、病毒攻击等,U盘中的数据可能会丢失,给用户带来极大的困扰。…...
Linux 的启动流程
第一步、加载内核 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。 以我的电脑为例,/boot 目录下面大概是这样一些文件: $ ls /bootconfig-3.2.0-3-amd64config-3.2.0-4-amd64grubinitrd.img-3.2.0-3-amd64initrd.img-3.2.0-4-amd6…...
思维导图插件--jsMind的使用
vue引入jsmind(右键菜单)_jsmind.menu.js-CSDN博客 第一版 vue-JsMind思维导图实现(包含鼠标右键自定义菜单)_jsmind 右键菜单-CSDN博客 // 新增节点addNode() {console.log(this.get_selected_nodeid());this.get_selected_…...
mac上使用finder时候,显示隐藏的文件或者文件夹
默认在finder中是不显示隐藏的文件和文件夹的,但是想创建.gitignore文件,并向里面写入内容,即便是打开xcode也是不显示这几个隐藏文件的,那有什么办法呢? 使用快捷键: 使用finder打开包含隐藏文件的文件夹…...
泰雷茲具有首个通过FIPS 140-3 三级认证的HSMs
泰雷兹LunaHsm是业界首款通过FIPS140-33级认证的解决方案,安策引进泰雷兹HSM产品可以帮助您满足您的数据安全合规性需求,阻力企业提高竞争力。 安策提供泰雷茲ThalesLunaHSMs成为首个通过FIPS140-3三级认证的硬件安全模块图 我们很高兴地宣布,…...
美术馆预约小程序的设计
管理员账户功能包括:系统首页,个人中心,展品信息管理,管理员管理,用户管理,美术馆管理,基础数据管理,论坛管理 微信端账号功能包括:系统首页,美术馆ÿ…...
序列化Serializable
一、传输对象的方式 将对象从内存传输到磁盘进行保存,或者进行网络传输,有两种方式: 实现Serializable接口,直接传输对象转成json字符串后,进行字符串传输 二、直接传输对象 implements Serializable Data Equal…...
编写静态库
一、静态库 1.制作完成整体目录结构 2.首先创建mymath.c和mymath.h 3.编写Makefile 4.创建测试的main函数 test文件夹 先把lib移到test文件夹里面 4.编译链接 gcc main.c -I ./lib/include/ -L ./lib/mymathlib/ -l mymath 5.形成可执行程序a.out 要是不想执行第四步那么麻烦…...
hive的表操作
常用的hive命令 切换数据库use test;查询表的建表信息show create table 数据库名称.表名;查看表的类型信息desc formatted 数据库名称.表名; 删除内部表 drop table 数据库名称.表名; 先启动hdfs ,mysql , hiveservice2,beeline CREATE [EX…...
基于多视点编码光场的全景三维重建方法
欢迎关注GZH《光场视觉》 摘要:在基于光场的一系列应用中,目标的三维重建是基础且关键的任务。普通光场只能重建单一视角而无法重建全景,并且在纹理特征匮乏的区域也无法生成准确的三维信息。针对以上问题,提出一种基于多视点编码…...
Spring Boot中的分布式文件系统
Spring Boot中的分布式文件系统 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将探讨如何在Spring Boot中实现分布式文件系统的搭建和应用…...
three.js地理坐标系有哪些,和屏幕坐标系的转换。
坐标系很好理解,就是点线面体的位置,一个点是一个坐标,一条线段2个坐标,一个矩形四个坐标,一个立方体8个坐标,three.js面对的是三维空间,屏幕则是二维的,这就面临着转换问题…...
聊聊C++20的三向比较运算符 `<=>`
C20标准引入了许多新特性,其中之一是三向比较运算符 <>,也被称为太空船运算符。这个新运算符为C程序员提供了一种全新的比较对象的方式,它能有效简化比较逻辑,避免编写多个比较运算符重载的情况。 为什么需要三向比较运算符…...
CVE-2024-0603 漏洞复现
CVE-2024-0603 源码:https://gitee.com/dazensun/zhicms 开题: CVE-2024-0603描述:ZhiCms up to 4.0版本的文件app/plug/controller/giftcontroller.php中存在一处未知漏洞。攻击者可以通过篡改参数mylike触发反序列化,从而远程…...
西部智慧健身小程序+华为运动健康服务
1、 应用介绍 西部智慧健身小程序为用户提供一站式全流程科学健身综合服务。用户通过登录微信小程序,可享用健康筛查、运动风险评估、体质检测评估、运动处方推送、个人运动数据监控与评估等公益服务。 2、 体验介绍西部智慧健身小程序华为运动健康服务核心体验如…...
Spring Boot中如何处理异步任务
Spring Boot中如何处理异步任务 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨在Spring Boot应用中如何处理异步任务,以提升系统的性…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...
FOPLP vs CoWoS
以下是 FOPLP(Fan-out panel-level packaging 扇出型面板级封装)与 CoWoS(Chip on Wafer on Substrate)两种先进封装技术的详细对比分析,涵盖技术原理、性能、成本、应用场景及市场趋势等维度: 一、技术原…...
基于Java项目的Karate API测试
Karate 实现了可以只编写Feature 文件进行测试,但是对于熟悉Java语言的开发或是测试人员,可以通过编程方式集成 Karate 丰富的自动化和数据断言功能。 本篇快速介绍在Java Maven项目中编写和运行测试的示例。 创建Maven项目 最简单的创建项目的方式就是创建一个目录,里面…...
Spring Boot 与 Kafka 的深度集成实践(二)
3. 生产者实现 3.1 生产者配置 在 Spring Boot 项目中,配置 Kafka 生产者主要是配置生产者工厂(ProducerFactory)和 KafkaTemplate 。生产者工厂负责创建 Kafka 生产者实例,而 KafkaTemplate 则是用于发送消息的核心组件&#x…...
Ubuntu 安装 Mysql 数据库
首先更新apt-get工具,执行命令如下: apt-get upgrade安装Mysql,执行如下命令: apt-get install mysql-server 开启Mysql 服务,执行命令如下: service mysql start并确认是否成功开启mysql,执行命令如下&am…...
