jennyzhaojie 发表于 2020-8-22 15:14:46

关于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]
查看完整版本: 关于STM32 F103的光强检测例程分享