关于STM32 F103的光强检测例程分享
BH1750是一款数字式传感器,并采用I2C接口进行信息的交换,该例程是由STM32 F103来驱动的,并由串口来输出检测值,其整体构成如图所示。 整体构成图BH1750与STM32 F103的连接关系是:SDA--- PB8SCL--- 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;
dis_data=(dis_data<<8)+BUF;
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);
}
} 编译下载后,运行的效果如图所示。 光强检测输出图 工程文件:
页:
[1]