深圳市航顺芯片技术研发有限公司
直播中

他在笑

9年用户 723经验值
擅长:可编程逻辑 电源/新能源 制造/封装
私信 关注
[问答]

STM32f1单片机是怎样通过IIC去驱动BH1750芯片的

STM32f1单片机是怎样通过IIC去驱动BH1750芯片的?
写BH1750驱动程序的时候需要注意哪些问题?

回帖(1)

赵丽

2021-8-2 17:59:19
  STM32f1系列单片机使用IIC驱动BH1750
  首先说明下**GY302模块上面其实就是一个BH1750芯片**,然后加了一小丢丢的外部驱动电路,实际上本质来说没什么区别,用起来一样。
  简单的来说下BH1750这款光照强度传感器吧,输入电压VCC在3.0v-3.6v之间,我们一般都是使用3.3v供电啦,通讯采用标准的IIC协议,自身的IIC地址可以有两种选择,怎么选择请看后面。它具有接近视觉的光谱效应,说白了就是你眼睛能感受到的光波范围,它也刚好是这个范围,所以这个模块用在什么光强感应的那些面向消费者的产品上最好了;它的输入光的范围是1-65535lx
  刚开始的时候使用STM32的硬件IIC写过这个的程序,但是发现不管怎么整都是返回的0x80,而且STM32的硬件IIC确实是有点问题,后来硬是没弄出来就改用软件IIC了,下面的程序也是用的软件IIC写的,有用硬件IIC成功的朋友可以分享下哈,我把我写的硬件IIC的代码也丢在下面了,希望有热心的伙伴一起研究硬件IIC为什么不成功哈,写硬件IIC的时候一定要注意两点,其一,IIC从机的地址是7位地址往前移动一位,第八位是读写位,其二,STM32读和写的时序中的EV6事件虽然名字相同都叫EV6但是代码却不同,分别是I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED和I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED一定要注意!
  下面讲下写BH1750的驱动程序的时候需要注意问题:
  芯片IIC地址的选择:通过改变ADDR引脚的电平
  接低电平的时候是“0100011”
  接高电平的时候是“1011100”
  注意这个地址是7位!7位!7位!!!所以如果你使用硬件IIC的话记得把地址往前面移动1位,然后读地址最低为为1 写地址最低为为0 例如:当ADDR接低的时候,IIC地址为0x46 读地址为0x46+1 写地址为0x46
  光强的计算方式:光照强度(单位lx)=(High Byte + Low Byte)/ 1.2 * 测量精度
  芯片有6种工作模式,需要注意的是,精度越高,测量的时间越长,最长的有120ms,所以你测玩一次就得延时下,然后注意连续测量和单独一次测量的区别,连续测量你发送完上电,配置了测量模式之后,就不断读就行了;单独测量一次,需要你每次测量都先发送上电-测量模式-再去读测量结果
  
  其他的都很简单的,如果你懂IIC的话,不懂的话那就在网上找找资料好好学学把
  接下来放代码了
  主函数很简单,首先检测模块在不在,然后初始化BH1750模块,其实就是发送上电命令,发送测量模式,然后就不断地去读数据就行了
  
  接下来就是它的驱动函数了,先看头文件把,里面存放了很多的的定义
  
  
  C文件如下:只要你懂IIC,懂C那就能看懂在干嘛
  
  
  
  是不是很简单,但是我也不知道为什么使用硬件IIC就是不行,或许真的被我撞上STM32硬件IIC的毛病了,网上说它的毛病是接收应答信号的时间太短了,错过就GG了,有硬件IIC成功的朋友可以来分享下,我写的硬件IIC的代码我也贴出来把,如下:
  这是硬件IIC写的头文件
  
  
  
  这是硬件IIC写的C文件
  
  
  
  
  
  
  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分