BH1750是一款数字式传感器,并采用I2C接口进行信息的交换,该例程是由STM32 F103来驱动的,并由串口来输出检测值,其整体构成如图所示。 整体构成图
BH1750与STM32 F103的连接关系是: SDA--- PB8 SCL--- PB7 使2个引脚输出高低电平的语句是: #define SCL_Set() GPIO_SetBits(GPIOB,GPIO_Pin_7); // PB7 #define SCL_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_7); #define SDA_Set() GPIO_SetBits(GPIOB,GPIO_Pin_8); // PB8 #define SDA_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_8); BH1750引脚功能的配置函数是: - void BH1750_GPIO_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- }
复制代码 切换SDA引脚输入输出功能的函数是: - void IIC_INPUT_MODE_SET(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
- GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- }
复制代码 - void IIC_INPUT_MODE_SET(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
- GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- }
复制代码 读取光强数据的函数是: - void Get_Sunlight_Value()
- {
- int dis_data=0;
- float temp;
- unsigned int sd;
- Single_Write_BH1750(0x01); // power on
- Single_Write_BH1750(0x10); // H- resolution mode
- Delay_us(180000);
- Multiple_Read_BH1750();
- dis_data=BUF[0];
- dis_data=(dis_data<<8)+BUF[1];
- temp=(float)dis_data/1.2;
- sd=temp;
- UART1SendByte((u8)(sd/1000)+'0');
- UART1SendByte((u8)(sd%1000/100)+'0');
- UART1SendByte((u8)(sd%100/10)+'0');
- UART1SendByte((u8)(sd%10)+'0');
- UART1SendByte(' ');
- UART1SendByte('l');
- UART1SendByte('x');
-
- UART1SendByte(0x0d);
- UART1SendByte(0x0a);
- }
复制代码 显示光强检测的主程序是: - int main(void)
- {
- SystemInit();
- SysTick_Init();
- USART1_Config();
- UART1SendByte('B');
- UART1SendByte('H');
- UART1SendByte('0');
- UART1SendByte('1');
- UART1SendByte('7');
- UART1SendByte('5');
- UART1SendByte(' ');
- UART1SendByte('T');
- UART1SendByte('E');
- UART1SendByte('S');
- UART1SendByte('T');
- UART1SendByte(0x0d);
- UART1SendByte(0x0a);
- BH1750_GPIO_Config();
- while(1)
- {
- Get_Sunlight_Value();
- Delay_us(1000000);
- }
- }
复制代码 编译下载后,运行的效果如图所示。 光强检测输出图 工程文件:
|