搜索
查看: 1355|回复: 0

[原创] 关于STM32 F103的光强检测例程分享

[复制链接]

该用户从未签到

4

主题

503

帖子

0

蝴蝶豆

金牌会员

最后登录
2021-3-22
发表于 2020-8-22 15:21:02 | 显示全部楼层 |阅读模式
BH1750是一款数字式传感器,并采用I2C接口进行信息的交换,该例程是由STM32 F103来驱动的,并由串口来输出检测值,其整体构成如图所示。
                              
2.jpg
整体构成图

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引脚功能的配置函数是:
  1. void BH1750_GPIO_Config(void)     
  2. {
  3.   GPIO_InitTypeDef GPIO_InitStructure;
  4.   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
  5.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8;  
  6.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      
  7.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  8.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  9. }

  10. 切换SDA引脚输入输出功能的函数是:
  11. void IIC_INPUT_MODE_SET(void)
  12. {
  13.   GPIO_InitTypeDef GPIO_InitStructure;
  14.   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
  15.   GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8;   
  16.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
  17.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      
  18.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  19. }

  20. void IIC_INPUT_MODE_SET(void)
  21. {
  22.   GPIO_InitTypeDef GPIO_InitStructure;
  23.   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
  24.   GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8;   
  25.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
  26.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      
  27.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  28. }
复制代码

读取光强数据的函数是:
  1. void Get_Sunlight_Value()
  2. {
  3.        int dis_data=0;
  4.        float temp;
  5.        unsigned int sd;
  6.        Single_Write_BH1750(0x01);  // power on
  7.        Single_Write_BH1750(0x10);  // H- resolution mode
  8.        Delay_us(180000);
  9.        Multiple_Read_BH1750();
  10.        dis_data=BUF[0];
  11.        dis_data=(dis_data<<8)+BUF[1];
  12.        temp=(float)dis_data/1.2;
  13.        sd=temp;
  14.        UART1SendByte((u8)(sd/1000)+'0');
  15.        UART1SendByte((u8)(sd%1000/100)+'0');
  16.        UART1SendByte((u8)(sd%100/10)+'0');
  17.        UART1SendByte((u8)(sd%10)+'0');
  18.        UART1SendByte(' ');
  19.        UART1SendByte('l');
  20.        UART1SendByte('x');

  21.        UART1SendByte(0x0d);
  22.        UART1SendByte(0x0a);
  23. }
复制代码
显示光强检测的主程序是:
  1. int main(void)
  2. {
  3.         SystemInit();
  4.      SysTick_Init();
  5.         USART1_Config();
  6.      UART1SendByte('B');
  7.         UART1SendByte('H');
  8.         UART1SendByte('0');
  9.         UART1SendByte('1');
  10.         UART1SendByte('7');
  11.         UART1SendByte('5');
  12.         UART1SendByte(' ');
  13.         UART1SendByte('T');
  14.         UART1SendByte('E');
  15.         UART1SendByte('S');
  16.         UART1SendByte('T');
  17.         UART1SendByte(0x0d);
  18.         UART1SendByte(0x0a);
  19.         BH1750_GPIO_Config();  
  20.        while(1)
  21.        {
  22.              Get_Sunlight_Value();
  23.              Delay_us(1000000);      
  24.      }
  25. }
复制代码
编译下载后,运行的效果如图所示。
1.jpg
光强检测输出图
工程文件:

BH0175.rar

1.03 MB, 下载次数: 7, 下载积分: ST金币 -1

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-29 09:30 , Processed in 1.143908 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表