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

【年中粉丝节】+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)4 ^1 S2 q7 b' i! _: [

  2. . K# e3 D% t2 k6 z
  3. {
    $ B* @6 Q9 [7 w3 K) j* I4 y
  4. # _% V( o# n% T+ C2 E2 L' e
  5.       
    ' ?0 }! G% A, J! g
  6. 4 R  A0 F% ^% m) Z0 ^! `
  7.     char  checksum = 0;  //checksum) I! B7 U( r5 j6 m5 W. b
  8. 7 H4 j0 ~8 O+ w5 d
  9.     char  data[2];    //data array for checksum verification
    3 U" Q( a" r# I( |3 R

  10. 2 X- y- t  L  f  A9 v# k4 y
  11.        unsigned char addr = 0;, c/ O  D1 ]" {  y# H
  12. ! s+ M7 }0 f8 M' R. e
  13.     unsigned short tmp = 0;
    " j  P5 B) p, C

  14. $ G- C, B6 A4 `4 t
  15.     float t = 0;0 D% q  `& a* C
  16. ( A# B  n4 y6 W% Y; @) m
  17.       
    " X- M0 n9 m  y# @5 _
  18. 9 T, v3 x) R* d7 N% h8 q
  19.     addr = SHT20_ADDRESS << 1;
    4 V: q0 I$ K( r" I+ f
  20. " C- Q8 Y: M. e( D% ?. ?7 b
  21.       9 l; _4 X9 R, X: v8 `7 b

  22. 7 _3 R1 T1 t# P. D$ P
  23.        IIC_Start();! v4 ~7 `9 e7 \( c4 _( r
  24. 0 \* B) E: ^& l( d0 i$ A! f
  25.       
    # ~2 X% C3 n% i% s
  26. & p, p! |  v- o. N+ m, b0 _0 r
  27.        IIC_SendByte(addr);0 w% R: u! ~+ l( n1 W- H: S

  28. 0 |; }, M$ q8 ]5 \  g
  29.        if(IIC_WaitAck(50000)) //等待应答# T8 d! ^  Q/ U# i, t/ ~) u+ `# s

  30. 4 H' _2 q6 [1 S. g; B  H, @
  31.               return 0.0;
    * i# A! H# m4 ~/ j. i* s
  32. ' Y" f# ^7 o  A' N9 |- M
  33.       
    & B. W  q& O. n

  34. ' h8 _, S9 p1 r! ~
  35.        IIC_SendByte(cmd);/ _- S" M! S. ~; V& G7 ?: p$ `
  36. ( m" H4 Q  I& L( b3 o! k
  37.        if(IIC_WaitAck(50000)) //等待应答
    ! M3 ~1 ?2 N! h1 C7 Y" _

  38. . s; a* `1 i* r# n! h
  39.               return 0.0;
    9 n% `" y8 }  s/ K
  40. ' t8 u4 G" W9 P) Q) b8 J6 S
  41.       7 ^& T) T6 x! o/ j, H" x( e

  42. ' r/ @8 }2 U6 y
  43.        IIC_Start();
    $ G9 `* @2 _+ s5 h3 d
  44. . O8 v9 ?, ~( A' o
  45.       
    % p; K: @3 \9 e+ r1 \5 m& q

  46. $ I4 U) I- B6 N
  47.        IIC_SendByte(addr + 1);4 J+ @0 A0 M* ^' X7 n. y
  48. ' j  d3 D7 Y, o2 M! a
  49.        while(IIC_WaitAck(50000)) //等待应答
    3 h; ?( Z2 u* q

  50.   D6 W0 e* j. R
  51.        {
    8 T1 z2 d* x9 H2 D: l
  52. . j' m  j3 D: v# ~8 I4 U) m
  53.               IIC_Start();, e! n1 n0 r- @' w

  54. 1 t0 x+ s; R0 f) U3 u2 q1 B
  55.               IIC_SendByte(addr + 1);1 [  R. t0 U; H4 V; v/ u

  56. 4 o8 E3 g- r% u8 x: `
  57.        }' k6 M7 b3 p. M5 R& b; f4 ~
  58. : K* o; X8 Y  d, w
  59.       6 z7 e+ u1 \* `# \; p7 |

  60. 5 a% [" J6 |4 b; S; B
  61.        DelayXms(70);" W' J2 C" Y; n: ?0 S+ j

  62. * R: F% T- b0 C+ I4 {
  63.       
    7 J( {" \2 B) z* @3 t  ?5 c

  64. 7 H) H/ b' a7 Z; C4 ?
  65.        data[0] = IIC_RecvByte();
    1 F5 G/ b% N* f* z9 C

  66. ( W: d& V2 j1 n5 g
  67.        IIC_Ack();. ^' |3 C" u! A8 I8 ?6 M$ e
  68. 2 {1 b. w  N. g+ y, D6 c
  69.        data[1] = IIC_RecvByte();1 Z4 i8 l& G- f3 m) {/ V

  70. + X- S( }/ ~& l
  71.        IIC_Ack();
    0 W2 U+ J  A: l6 W- E/ U

  72. 8 I. P5 @" m8 n! p
  73.       
    4 l' y' h0 o5 ^+ q

  74. , d: d) L! Z, z: }( X, d
  75.        checksum = IIC_RecvByte();
    : T/ k3 I" D# g# h: v5 _( j5 H5 V
  76.   T& b4 A& b7 x- @$ s9 ^
  77.        IIC_NAck();
    : Q( a- z9 m! ?1 [

  78. . l2 d8 R! X2 R$ y1 B4 `
  79.       * S& t/ E$ O; a

  80. " t' P$ ~  U+ |4 @' X9 E- E
  81.        IIC_Stop();1 B$ n- Q0 J$ k. t& S9 W

  82. $ l3 \, V, \8 U  U7 |& u7 R- P
  83.       
    ! ~2 k$ ^# k1 J) k0 V2 H2 R
  84. % Z# O1 \. N2 Q2 f! W$ a0 |2 R7 j; S
  85.        SHT2x_CheckCrc(data, 2, checksum);
    - V. {  R. f% d( h  t, G
  86. 5 c8 r2 u, j# t7 L* v4 |
  87.     tmp = (data[0] << 8) + data[1];
    , r0 m+ \) R1 l
  88. 5 g8 u% o: U/ u7 z* l' _
  89.     if(cmd == SHT20_Measurement_T_HM)
    : S$ m  a2 f" B. ?+ a7 `

  90. ; \/ {& u! D, x* O( C' S) f# S
  91.     {5 R' @$ q' p% {# \+ f

  92. # H) {5 a4 _0 F, C
  93.         t = SHT2x_CalcTemperatureC(tmp);1 k9 ]% `4 U0 Z+ R& G! f

  94. 5 [6 @5 k8 ]& `5 M3 r
  95.     }
    6 |( J3 j2 o  {2 R$ V8 b% V

  96. 7 h; [7 }; H5 B" v: Y  E/ X
  97.     else
    6 O) d5 C1 ~4 X/ _; k% z
  98. , `/ w3 O- v7 I( v3 {" C' m
  99.     {2 Q; n5 ^1 H# _7 F
  100. ( I( i7 c( B5 G. l, B# E% J
  101.         t = SHT2x_CalcRH(tmp);
    . q6 z! Z6 s! ~' ~6 C9 {4 R, o4 C
  102. 5 J) F( N+ P% u& e& |4 h2 m
  103.     }9 {8 s0 [$ |. y3 Z  z. g
  104. ( Q8 O. x6 |. r" t: A
  105.       
    / p. h$ M2 L2 v0 ^4 O

  106. : p$ e! @4 g) @0 d6 a
  107.     if(pMeasurand)
    - F3 }, s9 V3 G5 H9 q

  108. 2 k+ E& P8 _8 x  h/ @5 A
  109.     {6 ]# c/ `0 F/ I  D7 p5 b* s7 A

  110. - @4 C( s7 {& A, J5 m
  111.         *pMeasurand = (unsigned short)t;7 m! H2 m: ]% k

  112. 1 N/ n. ^$ o6 E; Z, y
  113.     }+ T5 e$ T% j& r9 k0 j- X

  114. 0 B9 @0 i) L* v
  115.       2 e2 L6 A% h! ?! V3 M

  116. ; c4 W, L" i5 `" ?
  117.     return t;4 w4 f8 ~. a4 u, b1 E, P
  118. 6 }+ c! N0 d- {- U7 `  D% X# O3 p
  119.       
    + q9 \7 ^2 z. ^  H& U6 _
  120. ; H& [4 y) w5 B2 j
  121. }
复制代码
5 v8 @; v/ v( v3 y5 w
上面就是对应的读取温湿度寄存器里面的值。
5.png
最后读取出来的需要进行转换。
6.png
7.png
如上图。
8.png
最终串口输出数据。
9.png
单片机使用的是STM32F103VET6。板子上还有其他传感器明天接着水。
) g1 C7 E  M. c
收藏 评论2 发布时间:2021-6-7 23:09

举报

2个回答
STMCU-管管 回答时间:2021-6-8 09:28:26
响应快啊,给力* W0 p8 i7 ?! S- N
liuxingkeji 回答时间:2021-6-8 09:51:43
STMCU-管管 发表于 2021-6-8 09:28
. I, I" k, V! i! z0 B5 N" c响应快啊,给力
: [! s1 N, Q' e2 `
一晚给你水一篇
2 i: P/ Q3 e7 r/ n

所属标签

相似分享

官网相关资源

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