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

【年中粉丝节】+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)
    1 [1 R6 j, P8 d( Z; O( ]
  2. 1 ]7 Z) u7 w5 C4 S
  3. {8 s" ~6 q1 O5 |0 k; C  F

  4. ! e& [4 E( o) R. y% V0 D3 G( S; Z
  5.       & z% b! B; g# u1 T' C8 S

  6. ) B$ `" d7 t6 Z* G# c
  7.     char  checksum = 0;  //checksum$ R! C: Q" r  l. i0 t$ T
  8. 6 }& r; l/ e4 _9 B# g1 A
  9.     char  data[2];    //data array for checksum verification
    * u1 e9 E, m; ]6 L
  10. : h/ E6 A/ w1 r! }
  11.        unsigned char addr = 0;
    9 C; C& r* E6 m  p( m1 U7 Q
  12. ! b. Z3 T* j9 L
  13.     unsigned short tmp = 0;- d! e  m& d; U! L+ Z: @) x
  14. # b* H% m. ~" F4 W
  15.     float t = 0;
    # L& Z  R1 g9 D7 ?/ o

  16. ' g  }% l" T  h# Q& [# d4 q3 A7 O3 B
  17.       
    ; [  X9 L9 ?5 m  E
  18. % c: F  p# y1 M8 V! e& G
  19.     addr = SHT20_ADDRESS << 1;
    6 F  T2 \" ?' q( m5 z3 i) C7 y
  20. ( t2 g2 Q. e, D& \
  21.       6 L' \3 x7 y) y. l% ?! S1 C3 D+ j) k
  22. 2 Y0 T" W: K  r# C: V4 N
  23.        IIC_Start();
    , e( J3 i+ |' \5 z

  24. % z' |" {/ T1 v* i$ q" I, \) I
  25.       
    5 Q( @1 E" h  F. u
  26. / Z# @/ o8 d  V* q
  27.        IIC_SendByte(addr);
    , E& j, a$ L8 j# e0 }- u
  28.   x' e: g/ A  u& {
  29.        if(IIC_WaitAck(50000)) //等待应答
    ' |, W+ \$ O/ @; k$ P: U; F' L

  30. . ]/ x5 t! i2 O; |2 A6 f: O, d# u' n
  31.               return 0.0;
    / e: D: Q1 D( f2 P4 J4 Q2 a9 ^

  32. ' U* \! y" b& }0 H3 J% a# T, D
  33.       
    8 b0 ]) g- M/ |" F4 H
  34. * S" V0 d7 L! Q
  35.        IIC_SendByte(cmd);+ j' f7 V8 L! {% [; g
  36. 1 D6 e! G* x. ~
  37.        if(IIC_WaitAck(50000)) //等待应答7 L# L8 ?" p8 r8 U) i. [
  38.   I) ^+ F  R; p+ s
  39.               return 0.0;2 N# Z( {/ n0 Z* ?& j

  40. 1 V8 r7 a/ f6 S& r- c# V# f1 ^
  41.       ; ^8 I6 J! Y, `5 o9 A! @
  42. 1 f  u- l8 }7 Y4 E1 F
  43.        IIC_Start();0 f; J( k, G" m) o  y9 L
  44. ( g( \0 Z4 c- S0 `  n/ q' R# K3 V5 p
  45.       . C- ^1 x) h, T, E: v

  46. ; w/ N) _5 \. A
  47.        IIC_SendByte(addr + 1);# Z1 @' s8 p) o% ~9 X! K
  48. ' H; H4 B. ?4 X! t2 D+ L$ u$ z
  49.        while(IIC_WaitAck(50000)) //等待应答
    % Q; N& |7 P0 S0 S: T, r
  50. 6 r* y! ~* b1 ]% J; Y
  51.        {0 S# a' X0 M( r* t$ X' v

  52. . I0 w. A& Q0 t
  53.               IIC_Start();" w: u0 t9 E8 F: a/ b* P6 i+ p

  54. 1 z3 T- F' Q7 {8 |& m5 ~. I% t
  55.               IIC_SendByte(addr + 1);
    ! C' K' ~5 y1 {; S) o4 t( d& O0 q! s7 X
  56. - |6 _: @' k2 l1 |  j
  57.        }
    % [! C; G% Q3 S$ ]+ Y+ T, A5 e+ I6 {

  58. - \. F' N8 ]' J0 L# Z
  59.       
    6 k1 R" O. R$ B& p9 k: d; G6 r6 Z
  60. * @" G5 D8 t: k$ a( {
  61.        DelayXms(70);
    * z) V- r& O* K, m" l
  62. 1 T) {4 A6 h: ^- F/ c& h7 s. O
  63.       
    # \6 N( k& {6 Y, |) ^9 I1 O$ G2 L
  64. 2 o% n0 ?9 _6 e4 [
  65.        data[0] = IIC_RecvByte();5 ?8 C5 n/ q8 f$ `8 O- j
  66. 3 J* B3 G' t+ g1 g! U7 k# `* i
  67.        IIC_Ack();  j, t6 J6 u. t" p

  68. 9 |8 g( _5 t) I+ B; R
  69.        data[1] = IIC_RecvByte();/ y( G: \. q) c! k' ~& d

  70. $ D% ]! `+ x: V
  71.        IIC_Ack();& i+ C( r0 h& V5 P% G' _( a6 T

  72. 4 W. I$ j- x9 k) [6 H
  73.       : a" P% Q7 B9 ^- Z! r

  74. ! H2 i5 D' e4 A* }2 ?7 \; q& {
  75.        checksum = IIC_RecvByte();9 Y4 ?; ^5 w$ O- i  m% k" r( |; v
  76. + K3 k6 T  [4 s; P
  77.        IIC_NAck();
    8 v( H6 a+ \' P6 Q' i: e9 R6 t

  78. " u( r& V' _- c
  79.         {% D/ {! I  j3 S. ?

  80. 3 G6 t7 D5 {* D
  81.        IIC_Stop();+ N9 V* e8 Y7 m2 W: e
  82. * }2 O; u3 Z4 W: j
  83.       
    & ^/ m  J# P. y$ ^
  84. ' m, C6 q9 a! o
  85.        SHT2x_CheckCrc(data, 2, checksum);8 g, k, m9 A/ T# Z

  86. * P% D. a( e0 g* @1 l
  87.     tmp = (data[0] << 8) + data[1];
    / B; c2 l: F. H% g- L

  88. 2 K( s& {2 U2 k1 D) I
  89.     if(cmd == SHT20_Measurement_T_HM)
    - E2 F- H; `. V: T

  90. 7 v0 x/ t, V* \* d, f; W
  91.     {$ R. }! c; r* W. ^2 K7 ?1 J; I

  92. 8 a* J$ u: M3 w: G% J4 z
  93.         t = SHT2x_CalcTemperatureC(tmp);  I: D7 K: w: C- Z8 {6 j

  94. " S* R& U6 n1 \
  95.     }+ X, n5 Q  @% z: _5 z& O) ^
  96. ! K$ \- [8 I; D3 D8 X  T
  97.     else4 ~. r, k. ~# m# L+ F3 ^0 n' V

  98. 7 z# O9 N: k2 c; Q) y1 |+ C
  99.     {
    ) F. x5 m5 f6 E+ q* w& q: [( f; W

  100. 4 B, M) q' `$ R8 z
  101.         t = SHT2x_CalcRH(tmp);5 Q: G9 R4 ?/ @  \7 B
  102. 2 n" ~  m/ v  A5 s% Y) q- @
  103.     }
    2 ~% E+ V: n; g6 C! D0 h: R
  104. , V) U' c3 }; c+ z! I4 ^9 R# _8 |3 q
  105.       
    ) @0 g/ `  d9 e( E$ W

  106. 0 @1 t) r: R- {# M
  107.     if(pMeasurand)
    5 Z6 A' _* e1 O1 y

  108. / x: |5 [1 M( A: R
  109.     {! N2 G  m4 d, c# k) R; W1 z

  110.   i: k( ^, _& L' p. g
  111.         *pMeasurand = (unsigned short)t;
    % ^, O. z$ T- j( `" B2 s
  112. : `; S4 Q4 l# N/ }4 M3 X. V4 k8 D
  113.     }/ g/ v; d: X4 ]! @, L- J

  114. # D3 E% x" g1 M/ @9 W
  115.       3 W* X' q4 x) ?: c9 \) T( S; t. ~
  116. . v5 h, w# t: c6 D" V
  117.     return t;
    8 @1 X6 s/ {6 b0 R8 Y
  118. # B) p; e( b6 c. Z8 p0 S5 X
  119.       : I7 i+ f( v: e8 X, _! j9 c. b8 O0 |
  120. ( m( _; F3 u8 ~; Z7 e6 B; H
  121. }
复制代码
4 m1 r- |' H; C
上面就是对应的读取温湿度寄存器里面的值。
5.png
最后读取出来的需要进行转换。
6.png
7.png
如上图。
8.png
最终串口输出数据。
9.png
单片机使用的是STM32F103VET6。板子上还有其他传感器明天接着水。

1 R0 Y/ S. ]* @0 D
收藏 评论2 发布时间:2021-6-7 23:09

举报

2个回答
STMCU-管管 回答时间:2021-6-8 09:28:26
响应快啊,给力1 |* ?( ?1 V. D9 x- v5 r
liuxingkeji 回答时间:2021-6-8 09:51:43
STMCU-管管 发表于 2021-6-8 09:28
- v  R. V1 k- T$ z响应快啊,给力

: d7 o: Z( h" v: w# T一晚给你水一篇* j2 E; B4 H# b9 \' s

所属标签

相似分享

官网相关资源

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