STM32 Cube I2C 获取BH1750光照值

用AT89C51 要使用单片机的IO口来模拟上升沿和下降沿,没接触Cube HAL库,自己做模拟太麻烦了!现在我们来学习一种更简单的方式!

一。介绍

1. 先让我们看如下2段I2C的写入操作

(1) BH1750

我们用STM32 cube 库, 这里ADDR接地!

(2) E2PROM 24C02

我们观察 BH1750写命令和 24C02的数据写入,我们发现在24C02 比 BH1750 少 一个数据 + ACK

比较:

看上边这2个写入指令,分别是HAL库里的 2个I2C的方法!

1. HAL_I2C_Master_Transmit

2. HAL_I2C_Mem_Write

其实下边这2条是等效的,你有没有明白点什么?

// 我们只需要用这个函数,就可以模拟 : ST,从设备地址,ACK,发送指令,ACK,SP 整个过程
HAL_I2C_Master_Transmit(&hi2c1, BH1750_ADDR, (uint8_t *)&BH1750_HL, 1, 1000);

// 这里我们也可用使用 这个是等效的
HAL_I2C_Mem_Write(&hi2c1, BH1750_ADDR, (uint8_t *)&BH1750_HL, I2C_MEMADD_SIZE_8BIT, (void *)0, 1, 1000);

2. 既然有了写入,那当然也有读取,让我们再看下读取

(1) BH1750

看BH1750是怎么读的呢?

就从 从设备地址上读取,1次读取呢回来2个数据位

//那我们就这样读呗,从地址,读2个数据,超时时间1秒
HAL_I2C_Master_Receive(&hi2c1, BH1750_ADDR, (uint8_t *)data, 2, 1000);

(2) 24C02

//这是24C02的读取,从设备,从设备的地址,什么样格式,数据,长度,超时
HAL_I2C_Mem_Read(hi2c, DevAddress, MemAddress, MemAddSize, pData, Size, Timeout)

 啰啰嗦嗦说了一大堆!就是想说既然有了HAL库,那读取就太简单了!

二。源码

/** I2C光照读取 **/
void BH1750_Value()
{
	char data[2];
	//先重置
	HAL_I2C_Master_Transmit(&hi2c1, BH1750_ADDR, (uint8_t *)&BH1750_TD, 1, 1000);
	//发送我要开始读啦
	HAL_I2C_Master_Transmit(&hi2c1, BH1750_ADDR, (uint8_t *)&BH1750_HL, 1, 1000);
	//等180ms
	HAL_Delay(180);
	//读数据到数组中
	HAL_I2C_Master_Receive(&hi2c1, BH1750_ADDR, (uint8_t *)data, 2, 1000);
	//发送到485
	send485((uint8_t *)data, 2);
	//下一次 延迟下
	HAL_Delay(500);
}

三。预览效果

先进入黑暗,然后再加强光,看变化  -_ - 

感谢您的支持,写的文章如对您有所帮助,开源不易,请您打赏,谢谢啦~

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值