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

关于STM32 F103的光强检测例程分享

[复制链接]
jennyzhaojie 发布时间:2020-8-22 15:21
BH1750是一款数字式传感器,并采用I2C接口进行信息的交换,该例程是由STM32 F103来驱动的,并由串口来输出检测值,其整体构成如图所示。
                              
2.jpg
整体构成图

! k8 [4 i7 c- C% J: O
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)     
    - Q/ \: l/ i3 N' J# a
  2. {. s2 `8 s2 y8 P5 {$ T& t; i
  3.   GPIO_InitTypeDef GPIO_InitStructure;+ m) H( p& D+ Y) s
  4.   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
    $ E# ^; f' _$ g- U6 L( y
  5.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8;  ' ~* E9 G. |; G/ A( R  V
  6.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      7 F8 v8 L* k3 D
  7.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    6 f+ [! ~& {4 k! \, r
  8.   GPIO_Init(GPIOB, &GPIO_InitStructure);- Q, Z' E& J  e
  9. }4 q' Y# D! ]+ v6 Q# `' S
  10. + i$ T& V8 z, i  p  W1 u, W
  11. 切换SDA引脚输入输出功能的函数是:5 Y/ q/ |* ]; c
  12. void IIC_INPUT_MODE_SET(void)
    ' I! B7 W" N+ P3 m5 Z% T' Y1 ]
  13. {( y9 y7 o4 n; q# `4 t
  14.   GPIO_InitTypeDef GPIO_InitStructure;
    6 @6 F# u# f2 {8 V6 [6 H
  15.   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);  @6 W! M2 `3 R# ], q: u1 \2 z
  16.   GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8;    ' w) |2 D- j$ A) I4 w% H; f
  17.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;) d0 T& Q, M( m  D
  18.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      
    3 }7 V- I# m7 n) Q* W. p( ~
  19.   GPIO_Init(GPIOB, &GPIO_InitStructure);
    , _7 N# \. H) O9 u5 v+ f5 `5 w
  20. }
    % A3 l4 t8 V* @: [  ~% }

  21. 4 Y7 S& o' X' K, O- ~3 @: s
  22. void IIC_INPUT_MODE_SET(void)
    " u  R1 S* u) H7 f6 \( g4 }
  23. {
    $ e0 V0 v( ]* j
  24.   GPIO_InitTypeDef GPIO_InitStructure;5 O$ S9 g' ^1 e: \8 P. s
  25.   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);& ^, |7 e* f2 `# Z% C; x; T
  26.   GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8;    3 W: X- s; N# @) Z5 Q* I# _. @3 T
  27.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;5 U3 ^* K0 F6 n
  28.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      6 B, c5 q9 j. E7 c
  29.   GPIO_Init(GPIOB, &GPIO_InitStructure);
      A6 q/ {4 H% [
  30. }
复制代码

" Z5 j4 C7 P* N' V9 t
读取光强数据的函数是:
  1. void Get_Sunlight_Value()
    4 O4 Q5 k. U2 f
  2. {, I0 A  i6 W3 {: B7 D- m- X7 ~
  3.        int dis_data=0;
    ! i! T$ Q" n# D
  4.        float temp;! ^$ z$ f/ q# ]! m: C# c
  5.        unsigned int sd;
    5 y. Z$ |8 m/ i# ]
  6.        Single_Write_BH1750(0x01);  // power on- |. K1 K% w& L
  7.        Single_Write_BH1750(0x10);  // H- resolution mode
    / w6 g1 X' d2 A+ A
  8.        Delay_us(180000);
      ~$ _$ p4 k3 T
  9.        Multiple_Read_BH1750();2 o2 k2 f# \! m* O% w1 y2 ~7 B
  10.        dis_data=BUF[0];! `, ?* i) z' z. G$ `3 [
  11.        dis_data=(dis_data<<8)+BUF[1];  T. l2 F6 t7 a' K* V
  12.        temp=(float)dis_data/1.2;! ~8 a; i- H: O0 J6 [9 d  T
  13.        sd=temp;
    . O/ M; V$ F, M' q
  14.        UART1SendByte((u8)(sd/1000)+'0');9 r3 H) _' o, j
  15.        UART1SendByte((u8)(sd%1000/100)+'0');, g& Q0 V6 X$ m4 ~% s
  16.        UART1SendByte((u8)(sd%100/10)+'0');
    % W8 Z7 g. o2 j( [: P4 g
  17.        UART1SendByte((u8)(sd%10)+'0');6 i* d6 n' ?" |4 B; \/ y7 L
  18.        UART1SendByte(' ');& H0 m' ^' K) a" r6 H
  19.        UART1SendByte('l');
    $ X! V# }, ]+ p* S5 w# \
  20.        UART1SendByte('x');
      X3 h. A: R+ V

  21. / Z8 ~, c- ~- a9 W) v- M8 y2 J
  22.        UART1SendByte(0x0d);
    ' t$ W: O% V/ S  N; X
  23.        UART1SendByte(0x0a);
    1 O8 ]* v; ~8 p5 f4 J9 r2 \' h2 J/ q, z
  24. }
复制代码
显示光强检测的主程序是:
  1. int main(void)
    , E/ a- H- Z( T- m" i
  2. {
    / G/ P! r5 w% f% [
  3.         SystemInit();" b- Y1 t1 `. A& A5 U& T
  4.      SysTick_Init();
      z7 M' D% W% P$ g
  5.         USART1_Config();
    7 t8 I' r/ j* P6 |+ P
  6.      UART1SendByte('B');7 W) Y1 P5 B- X; D
  7.         UART1SendByte('H');
    ) e6 q' ?, C1 |  r
  8.         UART1SendByte('0');
    / P/ R0 D1 ]) c( x& M
  9.         UART1SendByte('1');/ [8 ]7 N, C& N3 J4 i. Q
  10.         UART1SendByte('7');
    3 _; k+ t1 k% x+ h
  11.         UART1SendByte('5');
    3 D6 \! n8 i, a9 n+ F( a% t
  12.         UART1SendByte(' ');
    % m$ S& b& c4 @7 ~) y
  13.         UART1SendByte('T');
    - L7 c3 f/ |( n+ F* h* {
  14.         UART1SendByte('E');9 L: h! h( @" C4 L: I- I
  15.         UART1SendByte('S');  n$ x( q7 B9 q  V# T5 `
  16.         UART1SendByte('T');
    8 ~, a) G0 j% Y. s5 M
  17.         UART1SendByte(0x0d);
    . o. Q; x9 f+ `+ Q7 z
  18.         UART1SendByte(0x0a);  B; ^: \8 `& z" C
  19.         BH1750_GPIO_Config();  
    & _! p& M7 _  t8 I5 |) y1 e, A: J" i
  20.        while(1)
    6 ]# D9 ^. ]. B6 f
  21.        {/ r- x4 v: X! E5 @
  22.              Get_Sunlight_Value();6 K! R* f3 p" d) i' R* f6 c, G  |
  23.              Delay_us(1000000);      " y, h6 U8 ^4 h8 p7 c( F+ o
  24.      }
    ; b- d" P) Q+ a& {3 E4 r
  25. }
复制代码
编译下载后,运行的效果如图所示。
1.jpg
光强检测输出图
工程文件:8 `* X) A6 \: Y2 {4 ?4 f4 T

BH0175.rar

下载

1.03 MB, 下载次数: 8

赞 收藏 1 评论0 发布时间:2020-8-22 15:21

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版