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

【年中粉丝节】+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)& D& q7 ~* e3 Z! V) e9 d2 h7 w0 t

  2. 1 c! C1 P& y$ C% _" M
  3. {* C$ h5 k! ~) r8 k9 n: r" r, t

  4. 6 C# \: l  h8 Z/ Z, b9 Q
  5.       8 h& k$ s$ y. O, Y

  6. 2 v; p* D3 ^; t1 y* c
  7.     char  checksum = 0;  //checksum
    * h  V, U" A7 l" h5 o; @6 F* k

  8. 7 S2 w2 q0 ]2 b" q, _
  9.     char  data[2];    //data array for checksum verification, C( _$ j- u+ k: q) }/ `3 t% X* U
  10. & S! D. t# k! |' N, u5 s
  11.        unsigned char addr = 0;  g$ d5 ?% t* T5 u. w

  12. ' X5 q8 H4 {2 k0 k0 I
  13.     unsigned short tmp = 0;
    # h3 g- i0 g" @3 D  O( d2 ~
  14. : x/ u9 b/ `. `) w7 e- M' A/ [' ~
  15.     float t = 0;
    $ u* m4 ^+ E+ d6 F! {: ~* V2 x+ ^
  16. 5 p2 o  ^. [) L
  17.       0 F3 l2 z9 S+ c# b- J5 Q

  18. 3 F3 _3 w+ q# _1 b2 b4 c
  19.     addr = SHT20_ADDRESS << 1;
    ; Q6 }: X" @5 y* F6 B$ s3 ~- p
  20. ; b  w9 r& S( J$ P  k
  21.       
    * a5 P' o# l+ u. H. h, ]5 K0 `$ t( w$ ~, `
  22. " u. z1 h8 ]" M& u6 I
  23.        IIC_Start();
    ) M% q* R. c3 b& s$ ^- ]8 {

  24. 9 V+ L2 M; y/ ^% n, ~
  25.       / F' G' l, C+ N6 v
  26. 2 Y$ I: X! v3 \/ W/ I& g1 K( T/ L+ w, q
  27.        IIC_SendByte(addr);
    + l! K% i& M6 P

  28. / ?' V: F0 @" H" F. ^6 j( t
  29.        if(IIC_WaitAck(50000)) //等待应答
    : V( P7 i- C, z& Q7 L; ^% |
  30. ; g& N* N, i& G
  31.               return 0.0;
    ' \4 x( ~8 p* a% d

  32. + [, A0 N( p& G8 Q, \) i" ^
  33.       . N7 w( R0 \1 H5 v5 E' e3 M
  34. ! ?7 R& k+ g; b/ }+ m5 o
  35.        IIC_SendByte(cmd);
    3 u* v4 ]; O4 F  l* r6 I, e

  36. / I/ A; _' A9 [# @
  37.        if(IIC_WaitAck(50000)) //等待应答
    - R* z. {+ Y( F4 F) v$ {9 l

  38. - l, H( A1 W, |; x: `
  39.               return 0.0;. U+ w) J1 X7 [7 _8 S

  40. 3 V: a! P( n7 ~0 c  m: a
  41.       
    8 G( O( f* v: ?
  42. $ z( W) N' w# R3 s: X
  43.        IIC_Start();
    1 h: D) z3 U% Y8 J1 p; I

  44. 4 J. q7 X  t# \# ?6 V3 B
  45.       
    ! g, ~+ E" B, w8 k. s
  46. 6 o0 a+ b  N" w2 @* }
  47.        IIC_SendByte(addr + 1);
    : @1 b8 r4 z& y$ F: l4 V3 W% b8 H3 e

  48. . z% H# y: N# a1 w
  49.        while(IIC_WaitAck(50000)) //等待应答
    & f" }- B0 w' o" G2 w3 E! M* \5 P
  50. ; S2 A; p1 [) S/ W
  51.        {
    1 B3 G- r9 D+ |% }0 h5 s
  52. 3 w; q8 a% d; m1 M6 o( X$ b
  53.               IIC_Start();
    , u0 a7 r% h5 @, r0 m# g  g
  54. 2 x- J. |6 R3 e0 O+ I
  55.               IIC_SendByte(addr + 1);
    7 U: ]  l2 A# l9 j) A" C" }# J
  56. 8 V% n5 U' h- |. o
  57.        }
    5 o$ f! R0 T9 i5 y4 y; z% U5 M% t/ r

  58. 4 F7 z3 d' g  V/ [! q
  59.       
    / g8 W9 [! m+ e" |. Q8 z" j# @

  60. 9 ?# z6 h& N4 r* a( N
  61.        DelayXms(70);
    6 @& v1 j1 y6 T% e8 t

  62. " ?- F$ ?) w4 s/ O% J6 G6 G6 G
  63.       
    8 Q: ^' e4 n6 P# c% k( S+ {: g
  64. ; \8 m3 s* H2 E7 `- l0 W
  65.        data[0] = IIC_RecvByte();8 v+ u, v- M- f
  66. , i; F' s* |5 N
  67.        IIC_Ack();
    " q$ H* g; E2 G& r( @

  68. ! k* R2 _" U+ s3 N2 D  V- K  c7 {
  69.        data[1] = IIC_RecvByte();3 V8 O$ \7 |0 x3 Y+ k9 t
  70. ; e" Y. ]& o& H" p+ G3 s; i
  71.        IIC_Ack();
    : W# G5 A' m! b4 U

  72. 2 K! x, W+ `4 \5 t9 h7 T: ^
  73.       3 S! q! o8 n/ j/ v

  74. 5 Z/ q# T/ A9 M6 g+ s- r
  75.        checksum = IIC_RecvByte();( {5 O9 @8 i) f2 b' G9 l6 [
  76.   m7 ^( q' E' @$ x) s
  77.        IIC_NAck();
    ! }, [7 ?/ G9 ], z: S. G6 h# t

  78. - _6 l! p' E9 X$ h7 ]+ x
  79.       " R, ?8 m3 \3 O( f, r6 n0 ]
  80. . E! y' R3 z- r) V
  81.        IIC_Stop();
    , l  {  u" \6 ?/ F# f- V9 x
  82. " O( N) Z( i" I# V5 g2 W# X" R
  83.       + S/ N" K: U1 j4 m9 ?( f
  84. : a+ b) f- e1 P) o- H. h4 H
  85.        SHT2x_CheckCrc(data, 2, checksum);* c( ^; E* v/ }5 T$ A3 }
  86. " _" N6 ~* m0 N% ~
  87.     tmp = (data[0] << 8) + data[1];& H2 ^8 A- `- Z: ]4 x4 o# x. c
  88. ' h! f0 e. ]* o
  89.     if(cmd == SHT20_Measurement_T_HM)4 B: ?" e- u) i# G

  90. 7 k- G5 o8 _% I
  91.     {  F4 V1 }; F' r
  92.   s$ G, }1 j9 E6 `
  93.         t = SHT2x_CalcTemperatureC(tmp);" h' F3 ~* J- Y

  94. 6 \) ?, U6 r& Q
  95.     }7 r" `* Z; o2 }7 y! X+ v

  96. / d9 N. H5 o1 |, Q$ {( @' b8 M
  97.     else& O/ q5 `0 |6 V2 T

  98. 1 z3 d  V3 ^+ }9 w
  99.     {2 W, D" C/ z4 Q
  100. 9 r0 Z6 v9 ]/ j" T# o
  101.         t = SHT2x_CalcRH(tmp);
    4 R! {$ C( L8 g

  102. 2 V* y' @+ j- F3 a6 o( E! s! P
  103.     }  N, B7 @- w0 Y% A! Z
  104. 0 `' [. y! j7 }9 O+ n' F
  105.       
    , Y; W9 @. O7 L7 r' M

  106. ' O& P8 a- P; j* G. b2 C4 v
  107.     if(pMeasurand)
    8 r3 ^$ X4 z( l  C4 ]. c5 Z
  108. ' e! m. G, Y* b2 S: p- a' d
  109.     {! p. w: I. {4 }! r- R

  110. ( q% R- L5 P, Z. B3 h  U3 f
  111.         *pMeasurand = (unsigned short)t;/ X$ Y$ l* F& G- U! Y6 B, L  e

  112. 8 n  B% P! ^. |; k3 x) a0 u5 p
  113.     }% E6 C, K: L& A8 l4 U8 `2 ^8 h

  114. ; h. ]! ?. u  p0 N% m$ M
  115.       ) l2 j, i- m9 z- p- @% z

  116. 3 K( y" e  K1 D. W3 u. V1 [. ~
  117.     return t;  J1 h) w0 b4 S: Y
  118. * l# v9 P  S3 U0 h3 C
  119.       
    # U  ^  A$ q: J7 I3 c5 a4 H
  120. . `% t0 X& s4 P
  121. }
复制代码

) L& N6 _, r' g! V7 K7 {
上面就是对应的读取温湿度寄存器里面的值。
5.png
最后读取出来的需要进行转换。
6.png
7.png
如上图。
8.png
最终串口输出数据。
9.png
单片机使用的是STM32F103VET6。板子上还有其他传感器明天接着水。

" o$ G# U! ]) N3 Y5 Y. H# F
收藏 评论2 发布时间:2021-6-7 23:09

举报

2个回答
STMCU-管管 回答时间:2021-6-8 09:28:26
响应快啊,给力: Z: k; q8 f, P+ _& Y) j
liuxingkeji 回答时间:2021-6-8 09:51:43
STMCU-管管 发表于 2021-6-8 09:280 O) c9 V1 a" Q1 i  ~3 x
响应快啊,给力
' L0 m, [% t5 P/ t+ \" m$ i
一晚给你水一篇2 g0 R) K2 d4 }: X

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版