你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 202|回复: 0

[其他] 关于STM32 F103的光强检测例程分享

[复制链接]

4

主题

420

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-12-8
发表于 2020-8-22 15:14:46 | 显示全部楼层 |阅读模式
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. }
复制代码
切换SDA引脚输入输出功能的函数是:
  1. void IIC_INPUT_MODE_SET(void)
  2. {
  3.   GPIO_InitTypeDef GPIO_InitStructure;
  4.   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
  5.   GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8;   
  6.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
  7.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      
  8.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  9. }
复制代码
  1. void IIC_INPUT_MODE_SET(void)
  2. {
  3.   GPIO_InitTypeDef GPIO_InitStructure;
  4.   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
  5.   GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8;   
  6.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
  7.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      
  8.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  9. }
复制代码
读取光强数据的函数是:
  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, 下载次数: 1, 下载积分: ST金币 -1

回复

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版