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

【年中粉丝节】+SHT20传感器

[复制链接]
liuxingkeji 发布时间:2021-6-7 23:09
【年中粉丝节】+SHT20传感器
今天收到年中粉丝节的活动,看了看,对不起了日天兄,我得水个好几篇文章了。既然是分享ST开发板与传感器的文章。今天先来个SHT20温湿度传感器。
先贴下参数图。
1.png
首先通信接口是IIC总线方式。
2.png
这张是性能参数。可以两个湿度传感器精度可以达到12bit分辨率,温度是14bit分辨率。
3.png
到这里我们需要看到其发送数据的时序,逻辑,同时知道需要知道寄存器的地址。
4.png
在程序中对应。虽然地址配置的是0x40,其实是在发数据的适合地址进行了左移一位的操作。
  1. float SHT2x_MeasureHM(unsigned char cmd, unsigned short *pMeasurand)
    ! ~+ X6 y! g/ _: Q, t
  2. ! ^8 s/ U: c1 q* C* m7 |3 R
  3. {# P$ ]  H" f6 s7 h+ f& Z+ A0 W
  4. 8 i8 S9 m$ E- ~& Y* I
  5.       
    6 a; ~7 G* i+ p9 i2 m
  6. + L( E# C8 n* S( T5 h0 f3 R" |
  7.     char  checksum = 0;  //checksum$ h/ J; O1 H* w
  8.   A6 p9 o2 T( U! @
  9.     char  data[2];    //data array for checksum verification
    " K7 l3 }, ?% F

  10. ; u* D6 w$ F6 }$ k/ J5 i; b
  11.        unsigned char addr = 0;' A. I) m+ i) K; V" y/ G
  12. % [) j7 H9 c% O6 j7 p7 i, j
  13.     unsigned short tmp = 0;
    4 z0 L9 i4 T- _. f6 F( [3 \' X

  14. % E" E0 r- k5 ^, F" U! J6 z
  15.     float t = 0;% ]- g9 t' ?# L; y3 i
  16. * D: j. ~  ~9 t+ m6 H
  17.       - S2 t! |: T+ R

  18. 9 y2 a$ V2 E/ r
  19.     addr = SHT20_ADDRESS << 1;
    . v+ A: G- r  y9 r# _

  20.   F- d( D+ @4 e3 P& n
  21.       ' ?0 o# Q7 q& y/ O3 y+ D: s; Q. c
  22. ) M& y; {" B4 X& a
  23.        IIC_Start();; B1 [9 S( M( E6 r
  24. + I9 m7 s+ W) s1 J0 P! T; F+ o
  25.       & G# H$ n6 Y2 o- |5 \/ }, }: j4 R

  26. - {  x0 g( t/ i. L2 [$ [
  27.        IIC_SendByte(addr);
    9 K" C8 M% e4 B* B

  28. ! U1 G5 g5 G& I! r# C0 W
  29.        if(IIC_WaitAck(50000)) //等待应答- m5 m2 D/ [5 J

  30. . W! T6 W& b2 _( V5 S
  31.               return 0.0;$ B; B( O; |( n: X0 R) b

  32. ! R2 U' C5 \( J) }  r9 I0 q
  33.       
    $ G/ i1 D' Y- ]3 [+ m# |7 i) ^

  34. 1 }+ `$ k% C4 V* t9 a
  35.        IIC_SendByte(cmd);9 g8 ?8 H- E9 Y% ?# {' m

  36. 2 S! N  ~: a2 u; M/ X, i. s5 ^! u
  37.        if(IIC_WaitAck(50000)) //等待应答. V5 _' S  j9 S* e& e; I9 c

  38. ) C( k1 P* Q3 D5 ?
  39.               return 0.0;
    7 Z7 W' I6 F( k1 ]+ o
  40. ) E" Q; E3 W" i) G
  41.       
      K. i1 _( Z. V* T5 u% p- F

  42. ' l/ k" c1 R8 X. X9 p+ U& @; T( Y
  43.        IIC_Start();
    . z4 B! A3 e! @
  44. 3 u& s2 ?  K: U: O% ~( x; k3 R
  45.       . h& U- H7 [' N8 @3 B, P

  46. % U. j( P9 ^9 K) \" H
  47.        IIC_SendByte(addr + 1);" Q9 L) ?) ]' F; g# g  U3 X

  48. # G% e! e4 h- ~$ Z. {
  49.        while(IIC_WaitAck(50000)) //等待应答
    ; W3 ?1 ?% j5 f$ S
  50. 9 Z. q/ B' m0 a" s1 W9 [; h: I8 d2 I
  51.        {: [) m* J6 H$ V; r

  52. 6 ?) R; v: U3 k+ q, E0 T& a1 q) N
  53.               IIC_Start();
    $ U+ w5 r( ^6 u) [

  54. 5 m( J5 k, E; D8 {/ i" R
  55.               IIC_SendByte(addr + 1);
    3 I5 Y& w6 X) x! w; t2 X
  56. - G' B8 T/ C) K1 s9 m4 ]. x
  57.        }
    4 r* O( C) @# s/ V, r( y
  58. - J8 @/ O9 ~" w* F
  59.       
    ' u* X. N& V: g8 V6 [: T% ^

  60. 8 Z3 ~+ y) D2 r2 a; \% U. N
  61.        DelayXms(70);& ?2 \' _  g' Y' _6 Q, Y: L
  62. 1 O2 I+ E! {6 d. |
  63.       
    / L8 j$ n3 n  q3 c  j  M

  64. 1 d5 D2 Y$ s3 c' @& g2 |
  65.        data[0] = IIC_RecvByte();
    7 j! w9 W3 _# r
  66. - T' `. F" K8 U
  67.        IIC_Ack();" j% o' q( C# U

  68. / k4 z3 d% Q- S% \  ~' W3 t
  69.        data[1] = IIC_RecvByte();
    2 K4 ?) P7 h/ ]$ z! a. p

  70. " [3 q8 x& m- c  ^% M
  71.        IIC_Ack();( K2 B! D" ~0 u4 P5 I! }
  72. ( G0 q  \5 P& [+ x( q
  73.       ( D% _. M. V% d/ L% u
  74. 7 M, m- E! K3 H9 `; c4 H" a: m
  75.        checksum = IIC_RecvByte();) B$ A+ q2 p% L% C5 B5 y9 _7 T4 C2 z

  76. + Y/ G6 L. i5 S
  77.        IIC_NAck();* f9 b) L; x* X: R2 k: B

  78. $ e5 M+ @6 o0 ?6 B! L9 N
  79.       + w/ `" P) T4 }' c9 x( |5 n  m8 I
  80. ! N# i4 q- w) z6 R9 W. O
  81.        IIC_Stop();
    / e* @4 Q' N( \6 N" C; D) _0 U% |
  82. 8 q3 \  w: j( K* `. l
  83.       
    ( n+ n( }% s( Y. ^
  84. 2 v6 e6 S! H+ u+ O; g
  85.        SHT2x_CheckCrc(data, 2, checksum);
    ! N+ o7 @8 R! ?: l! s

  86. $ u! @+ {* n3 s7 ?+ z* _' k) s; h6 B3 Q
  87.     tmp = (data[0] << 8) + data[1];
    * G$ ]' S5 y# U9 ?
  88. ' k# @& p1 k* N5 L
  89.     if(cmd == SHT20_Measurement_T_HM); g+ W6 q# Q7 c* G1 L' S! j+ O4 X; Q% @

  90. + J# M: R$ X4 Q9 `/ p% q
  91.     {1 T* e4 A; T- w& k, k% s

  92. 6 S. a0 _2 e3 ^8 V/ [( p; G
  93.         t = SHT2x_CalcTemperatureC(tmp);. e; Q, W) f+ V
  94. ) x: z9 U! Z3 q$ C" B1 d" E
  95.     }
    ; W1 x9 ^+ K+ n4 s  F
  96. $ s& Y1 g" d& H/ D0 ]+ i5 p2 ?  z
  97.     else
    6 ^7 |2 g9 y8 A4 e
  98. 4 u1 D/ n: ^4 d! a0 a
  99.     {
    ) Q1 T' q: s: X6 f1 p

  100. % e& ]  X1 C& O6 s9 z7 P
  101.         t = SHT2x_CalcRH(tmp);
    + n1 R# G7 W* j$ W* v1 ?2 T

  102. 4 ~: l' m% |" M
  103.     }
    ! X1 R0 g9 \3 t+ ~
  104. * c( K9 w7 X! L* H0 C- \1 u
  105.       ! v( v% G# ^$ |' G) ?+ f
  106. 1 y' L$ Z, w; Y
  107.     if(pMeasurand)
    1 t! u+ K$ i* |+ {9 M. G

  108. 3 R6 G3 H( o, R
  109.     {
    " r# q+ U1 x5 ~" \: v3 v

  110.   \- @: r# g8 v, \
  111.         *pMeasurand = (unsigned short)t;
    $ Z1 _) x7 t5 U2 U# v
  112. 7 Z$ i7 n& r7 a, G0 y: A2 e
  113.     }  r" `6 g5 _, F+ d
  114. ) I" k/ h! @- I% z5 [, ^' k3 w! ~
  115.       
    . }/ O& _0 A6 N* Q- d. p# V! {

  116. ; ?' A) B1 q1 |
  117.     return t;" c$ |1 v3 j4 t* M3 V! H. F; p' o

  118. $ d% W2 p1 G, _
  119.       
    % M( u+ J4 d  [, \: G. ]
  120. 5 e! l9 F, p9 c8 A. B
  121. }
复制代码
% q! K9 a- x: U. H
上面就是对应的读取温湿度寄存器里面的值。
5.png
最后读取出来的需要进行转换。
6.png
7.png
如上图。
8.png
最终串口输出数据。
9.png
单片机使用的是STM32F103VET6。板子上还有其他传感器明天接着水。
# a! [4 W# _7 [
收藏 评论2 发布时间:2021-6-7 23:09

举报

2个回答
STMCU-管管 回答时间:2021-6-8 09:28:26
响应快啊,给力
3 _& S4 e* \) D0 V
liuxingkeji 回答时间:2021-6-8 09:51:43
STMCU-管管 发表于 2021-6-8 09:287 I8 B1 A! P4 d
响应快啊,给力

$ B, r4 [+ O' T5 Y* g  j一晚给你水一篇
! k  G4 ~- O; \! x

所属标签

相似分享

官网相关资源

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