当前位置: 首页 > news >正文

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;
}

http://www.lryc.cn/news/389824.html

相关文章:

  • 双相元编程:一种新语言设计方法
  • 基于SpringBoot校园外卖配送系统设计和实现(源码+LW+调试文档+讲解等)
  • 茗鹤APS高级计划排程系统,在集团多工厂协同生产下的应用
  • 分享六款免费u盘数据恢复工具,U盘恢复工具集合【工具篇】
  • Linux 的启动流程
  • 思维导图插件--jsMind的使用
  • mac上使用finder时候,显示隐藏的文件或者文件夹
  • 泰雷茲具有首个通过FIPS 140-3 三级认证的HSMs
  • 美术馆预约小程序的设计
  • 序列化Serializable
  • 编写静态库
  • hive的表操作
  • 基于多视点编码光场的全景三维重建方法
  • Spring Boot中的分布式文件系统
  • three.js地理坐标系有哪些,和屏幕坐标系的转换。
  • 聊聊C++20的三向比较运算符 `<=>`
  • CVE-2024-0603 漏洞复现
  • 西部智慧健身小程序+华为运动健康服务
  • Spring Boot中如何处理异步任务
  • 数字化精益生产系统--RD研发管理系统
  • 鱼眼相机 去畸变
  • DC/AC电源模块:为智能家居设备提供恒定的电力供应
  • 小红书运营教程02
  • k8s自动清理节点服务
  • JS如何把年月日转为时间戳
  • 【YOLOv5进阶】——引入注意力机制-以SE为例
  • 【C++题解】1456. 淘淘捡西瓜
  • 用Python读取Word文件并提取标题
  • Windows编程上
  • BiTCN-Attention一键实现回归预测+8张图+特征可视化图!注意力全家桶再更新!