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

【年中粉丝节】+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)
    - b' e9 D5 C3 e& D% q0 E
  2. 4 P- `, s! w9 Z$ K; z9 E6 D- U* t+ `
  3. {# S8 e$ |/ u8 B, \9 s
  4. 3 \" ^7 K% S( |
  5.       / [# S5 {5 k1 o
  6. 1 `0 \8 w" a7 T. Y% `1 J
  7.     char  checksum = 0;  //checksum
    ! i6 ?# g8 F3 o
  8. 5 X% X  R7 E$ y" y, f# [
  9.     char  data[2];    //data array for checksum verification0 ~3 F4 i; g2 A

  10. ' V$ K, S9 j  Q
  11.        unsigned char addr = 0;
    % W3 p2 P6 ]+ w5 L5 ~

  12. $ N& B& O7 M2 v6 H
  13.     unsigned short tmp = 0;
    ! C4 G# i1 c5 o) t% v

  14. . x4 S0 ]+ Q2 F7 E$ {. R/ y
  15.     float t = 0;8 W& E( C3 ?1 w( N! Q

  16. % K7 ^6 z# F, Y1 U
  17.       
    & j' G0 f: k" h! z6 q/ X) l  r& l: A

  18. 2 q, Q  T" Y4 P( |
  19.     addr = SHT20_ADDRESS << 1;
    3 {2 A" n* G# j  k. x& v

  20. ; ]2 X3 w' i6 c/ [, ?
  21.       
    2 o& M+ R& ?5 x- T

  22. 3 A/ G2 G- a9 o% P" b
  23.        IIC_Start();+ e* K3 T4 M$ ^% z& a

  24. : \" X  z2 ^9 ~& i; b  u1 E+ ^$ A4 @
  25.       8 a. h( u3 \$ o- Z$ ?
  26. ) o# ^' P- X7 P7 \
  27.        IIC_SendByte(addr);+ R' a& @# Q) N0 s. r) h

  28. / n" W& `+ I: C2 T" R( @
  29.        if(IIC_WaitAck(50000)) //等待应答
    8 r% J+ ^1 i+ d7 L
  30. 7 c. K  P! d( U! _9 S
  31.               return 0.0;$ f% f3 c+ @# ~1 h& X& h

  32. % B- q7 H2 ?; d; m5 Q) Y% {
  33.       
    ; p" O, P, [$ w+ |. c" e7 E4 t9 o
  34. ! W8 _1 ?3 ?/ C) {! I
  35.        IIC_SendByte(cmd);
    ! ]# u" n6 R% K8 G! P

  36. ' f! s% G0 m' ^
  37.        if(IIC_WaitAck(50000)) //等待应答
    ' N( P+ S0 t9 o/ D+ Q
  38. 9 S$ _" g; L6 q/ x( Z  A
  39.               return 0.0;
    2 H% w: j" T7 P. F1 Z9 w9 [

  40. 8 b8 m5 l5 v9 W) R
  41.       
    2 P% A9 Z7 G( o# N; d4 T4 a
  42. / y4 ?, q4 H9 P, N, m
  43.        IIC_Start();
    8 F3 n. H9 o: O* a8 z

  44. ! n  W5 r  p/ P: D# Y# Z
  45.       0 s1 ~! i6 U- E2 s

  46. ' _9 d; {4 ]$ ^" G0 s
  47.        IIC_SendByte(addr + 1);- e% n7 N4 K+ m# p9 A8 I$ j" c
  48. 8 s! }. O1 O6 m! A1 ^' w
  49.        while(IIC_WaitAck(50000)) //等待应答# a+ O' F! G' t! g3 w

  50. : S# `; m" o& U7 t2 n7 w5 L
  51.        {" G1 H8 q# k& N$ }# G3 x
  52. * v2 e+ a5 C2 n0 R) ^  s
  53.               IIC_Start();
    / N( d' w- m9 ?! ?( E6 m5 L
  54. 3 J% ?) X8 U7 A! N
  55.               IIC_SendByte(addr + 1);
    & Z/ b* w. L5 _0 b3 @! z

  56. " D  N& B% X: m' b
  57.        }
    # D% R7 b* T9 [

  58. . {" h# T! C7 a2 A) V4 g
  59.       6 q" L# N& M& M+ ~
  60. 8 t0 ]/ m0 B# f* ~( l1 ~
  61.        DelayXms(70);
    / D- m: i1 [0 j2 m

  62. 8 A3 |$ `/ h9 a, w2 s0 @
  63.         Y* T4 q3 v# L- k

  64. " S+ w6 U2 K, V  X2 z/ u* F7 V
  65.        data[0] = IIC_RecvByte();
    ; ^( O  N( w- c" D

  66. ( D2 i# R* D( G0 u% a: ?% i
  67.        IIC_Ack();) p- t8 V: \4 j6 t$ K# f5 }

  68. % W7 b2 v9 a; P5 b9 H2 `
  69.        data[1] = IIC_RecvByte();
    5 b" A- z. ]( n0 A1 N

  70. " {% l. @  V9 F( W( a  P2 I) L
  71.        IIC_Ack();1 k0 T7 @% N7 D- n/ U, B" S* x
  72. , E( a8 S6 D# h5 i' f* j
  73.       % L- `9 r/ z! X% `# R0 i/ p" V$ ^

  74.   I  P0 W8 `  ?7 D- p/ k! u3 ]1 m1 R
  75.        checksum = IIC_RecvByte();
    4 J3 l3 `0 U- b  T0 i. W$ D' L0 N
  76. 5 f: u, v" M/ g( ]$ }7 e
  77.        IIC_NAck();! C0 L4 _8 J( r( y' Y3 A. L
  78.   k! Y& \6 y7 A" |$ c* e; T- B9 o
  79.       
    : O9 O) H% \3 \8 U) }# X+ P
  80. ) Y# t* ?9 A7 g4 z/ q' W- e
  81.        IIC_Stop();+ M6 @& K# S) _

  82. - ^4 w# n* F1 ^3 t: w9 F' }
  83.       
    , h. \$ P+ [( T/ i+ ?2 k
  84. + G$ a- G7 r) |7 G  U3 y
  85.        SHT2x_CheckCrc(data, 2, checksum);& {, x# d) x' A& U: d

  86. 4 V* z+ @* r* q  N/ U$ J5 `
  87.     tmp = (data[0] << 8) + data[1];
    / Q' p+ A1 j- x( }# u/ |

  88. 8 @& R( k- l7 T
  89.     if(cmd == SHT20_Measurement_T_HM)
    * m; \3 E$ }+ N0 e
  90. ; Y( h  y. C( R4 T) b
  91.     {
    . v  r) H5 l( K# X9 U$ Z
  92. ' \) c' z$ y7 Y' ?& d- n) X3 M+ a* D
  93.         t = SHT2x_CalcTemperatureC(tmp);. j; @5 J0 ?9 K; O  c& B7 d: u
  94. 0 H6 J; y0 W. Y2 J3 r  u; y, f
  95.     }
    0 v1 ]- D! h4 Q) G9 |. }- p; D& F
  96. " c+ O' z# Z) c0 ?
  97.     else
    8 ?: {, t* R" g. j. Y
  98. ) o$ [: m5 @3 h( ^# y) C) g4 `
  99.     {
    $ d$ I9 s2 Z% X. V

  100. : \- x6 i5 R/ ?3 S4 @: ^3 ?
  101.         t = SHT2x_CalcRH(tmp);7 Z7 n- c' Z- ]" C
  102. 9 x% R" l; ?: S+ M- L
  103.     }
    * p( G& h2 P) n
  104. 5 h# U6 |0 d0 u
  105.       
    : B: V: I: Y: o7 A6 W- Y) Y4 _

  106. 5 }4 j: c4 I# O, W/ K
  107.     if(pMeasurand)
    2 S* M8 l% ~' E3 D4 I1 E  @
  108. $ y( q- f+ {' o7 a3 i8 u
  109.     {" @9 D4 W4 ^. @
  110. - n2 T$ z7 m8 Y
  111.         *pMeasurand = (unsigned short)t;
    $ Z* ?' M+ y# d# D
  112. + y' z: X. w- [
  113.     }$ }0 M2 U$ V) @$ r2 j% z

  114. ) F4 d& R) U2 Q+ f- p: q0 ?
  115.       # n0 d! p0 b5 v! T

  116. 6 r9 L! B0 w# Z* I% u. @
  117.     return t;- D& O- L& [# `! Q7 h) @
  118. $ M: D& L7 [. Y
  119.       
    0 w& W# ]) o2 C) ^+ k5 v* J6 w" G
  120. , W+ o, N$ q) C) T6 t# z9 w
  121. }
复制代码
. e& N) j, G; M
上面就是对应的读取温湿度寄存器里面的值。
5.png
最后读取出来的需要进行转换。
6.png
7.png
如上图。
8.png
最终串口输出数据。
9.png
单片机使用的是STM32F103VET6。板子上还有其他传感器明天接着水。

& H* i2 Q( t, T/ n  `3 ^2 k% t
收藏 评论2 发布时间:2021-6-7 23:09

举报

2个回答
STMCU-管管 回答时间:2021-6-8 09:28:26
响应快啊,给力
# P0 m& z+ C5 o7 w, d  T* D  s
liuxingkeji 回答时间:2021-6-8 09:51:43
STMCU-管管 发表于 2021-6-8 09:28
6 M1 `( L* I- }- [响应快啊,给力
" j5 C- A0 g6 O6 Y; {! P, _
一晚给你水一篇' K; Z8 q' ~& H# F

所属标签

相似分享

官网相关资源

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