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

【年中粉丝节】+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)- ]3 ?; V/ |2 v3 c. r8 H# p0 l

  2. " G, L  p2 G: z! H4 x
  3. {
    ) ?+ @  I7 i: q$ q% k1 P; M
  4. % A6 R! l1 H9 X
  5.       
    9 m2 D! @0 o. T4 l
  6. 6 c! I6 e0 u: N7 M( H
  7.     char  checksum = 0;  //checksum
    : g6 D5 O  b2 C! j+ D/ G5 q! f0 ^
  8. : `( Y3 I0 ^/ X* V
  9.     char  data[2];    //data array for checksum verification+ z7 m0 K& K, T( \" ]/ V; [
  10. ) M: z3 f# c( U. w- l# e
  11.        unsigned char addr = 0;$ p8 m1 W4 j! B$ d

  12. 2 ?0 Z' \( \6 U8 r8 U0 h. o0 o6 U: ^
  13.     unsigned short tmp = 0;2 h6 @9 S5 v9 T7 C

  14. & c  P! d! n/ p$ c1 Q
  15.     float t = 0;" }9 L! A" H0 ^0 i/ ~, }
  16. * ~9 T! U- u$ k, D
  17.       % Y& ?7 @0 C% m+ A6 D' c
  18. / `: z6 S. z! k8 `4 ~2 C
  19.     addr = SHT20_ADDRESS << 1;
    . S) `0 Q  ^$ |; `' W3 B' P

  20. $ l# T/ z6 J7 L) o) |2 Z) s, V
  21.       , i# s1 C' z. I( W% \/ g5 \
  22. 6 F9 ?( P# X& C1 T  s. U
  23.        IIC_Start();0 g9 t$ S2 S5 b8 r

  24. ' A) c* ?( A  W1 r/ p8 L7 C
  25.       , u7 {8 w* r- a! y' f  O3 ^- Q
  26. 1 G# [* L( n; |% E0 F% j; |
  27.        IIC_SendByte(addr);
    9 T2 E( n) P( T7 K1 {- h

  28. 6 O: {8 g; w$ k  _2 Y7 O8 n
  29.        if(IIC_WaitAck(50000)) //等待应答
    ( f- n3 R9 b' o/ H

  30. 8 ~. k4 r) v3 G+ k2 ?6 L- B+ B
  31.               return 0.0;
      @) l& Q' c/ _

  32. 4 T. z" V# [/ c% P
  33.       1 K! V! n' D: I4 N4 Y: M

  34. ; F% t& C& a6 p0 t8 U+ o
  35.        IIC_SendByte(cmd);
    4 M- F# Q& o+ [' r1 m9 |2 o

  36. - d. J9 a- {* [: n! l
  37.        if(IIC_WaitAck(50000)) //等待应答; o& j7 `/ e! O. C/ J: B
  38. ' H2 Z6 V1 S% s1 {5 e
  39.               return 0.0;
    ) t3 y4 b; i% D, Z3 o& ^  M% F

  40. ) X+ M) C% _* T* H
  41.       ' P4 _* ]. n9 Y' C% `

  42. 9 S* n' {. V5 _# @8 ^; [; ]
  43.        IIC_Start();* d! J" Q# C% L% X3 i& ^3 X
  44. ! ]% \7 I% C9 ^: S3 @8 W% F
  45.       
    * B! n( }0 X1 w. S: [
  46. % E; ]2 p* A( l* L5 \: Y! M
  47.        IIC_SendByte(addr + 1);: S. z9 e0 c2 S( u

  48. 5 T  d2 N: R9 I" }) G9 h  C
  49.        while(IIC_WaitAck(50000)) //等待应答; b; N' F; K/ K2 u7 l& f
  50. 8 o8 `7 w! _! k: J
  51.        {/ g. P( v0 _9 Q1 c% O$ ^8 X
  52. 6 d7 r& l5 F( X7 F9 D& `5 S( G- S
  53.               IIC_Start();
    % L7 ]8 Y' S' i& ?; ?2 l
  54. 2 G- J+ {9 P  e: l7 E$ j9 L/ J' ?
  55.               IIC_SendByte(addr + 1);
    ; Y- ]. X* E& S) l9 J$ l
  56. & _, Q- m9 a2 O2 j+ N4 c
  57.        }4 l- b% W9 Q3 C  G9 a" f6 W3 P4 W

  58. 7 y) ~" E% l" q/ Q
  59.       " F& ^+ h  ]8 l* M7 s
  60. 7 C" C" X9 T0 {
  61.        DelayXms(70);6 i0 k* Y) K' c7 U/ }- L% k5 b

  62. * t6 a1 [5 z; P+ U& M, X1 Z" e6 m
  63.       
    * x# Z7 W6 z* r) E0 @( f( t5 t0 r
  64. 4 C. y" w8 t4 F8 D; V- r
  65.        data[0] = IIC_RecvByte();9 ~, l1 z6 `1 Y. z. r8 N% m" o4 J

  66. ' s! V! |& \. J8 [0 V& Q
  67.        IIC_Ack();
    - h2 K, R# n, Q+ |' D6 M7 a5 h# ^0 v
  68. % Y, d  |- {5 V5 V% y
  69.        data[1] = IIC_RecvByte();
    : H/ L: {. V, [5 O1 g& M
  70. # a, E5 N' ?- [: W9 B
  71.        IIC_Ack();# z( R! ~7 y: {& [
  72. , C; {( D; W% h3 C" P
  73.       " D8 H& w/ H$ z6 C. ~, b

  74. / D% ^2 N0 t8 l% k/ r* C) K- ?
  75.        checksum = IIC_RecvByte();) G7 b, E/ R/ r
  76. 9 @, S4 I& `+ q4 [) H+ |
  77.        IIC_NAck();: z. ^" R; q; Z- l0 L
  78. 2 w2 Y' e4 W! K; D$ |; A1 H( s
  79.       ; m* N$ d: ~, [, _

  80. 1 C- U$ y$ J3 R3 V
  81.        IIC_Stop();
    % I: t4 G9 }$ V  h- M) }; A
  82. 3 H9 w& c, A9 n( X
  83.       
    . w3 Y8 B% L4 M9 K5 i% Y: O1 g+ n

  84.   s, J; V% f! @. W: B
  85.        SHT2x_CheckCrc(data, 2, checksum);1 D4 I: w7 K/ a6 @

  86. 6 {" |* ^3 d& a  n/ b! y
  87.     tmp = (data[0] << 8) + data[1];+ g( w  C. s; q# M4 \
  88. & B6 \- c) o& J! n
  89.     if(cmd == SHT20_Measurement_T_HM)
    # u8 t& k- t8 w( J1 V* v  i
  90. : i/ |; j) R, ?+ u/ N; m8 @
  91.     {& g/ L# ^$ Z) ^3 u0 Q' o. M

  92. ( e( }) x0 d; f
  93.         t = SHT2x_CalcTemperatureC(tmp);+ u# z$ I! H# T) ^& C( g
  94. 7 E" ?5 c* K7 O. s; B
  95.     }/ u* ?/ `" m, ^, o
  96. * u; q( @( N8 h* n! j/ ^+ [/ \
  97.     else
    0 f+ G/ C( M/ g& P: ?

  98. ) B: p. O7 Q# A+ F
  99.     {( }) w' j) M% ^

  100. 5 @' S$ _$ M8 w; D) [& F
  101.         t = SHT2x_CalcRH(tmp);. {8 C' E. u- k# l
  102. ! G6 A2 C8 j1 A" H  X3 ~; `2 Z1 Y
  103.     }: ]2 [. {. Q& Q0 @5 D
  104. 9 R3 `" m/ F! y* T+ F
  105.       5 V5 M6 j6 `7 |2 b  E7 H

  106. . D4 t  F; ]  t8 L4 l
  107.     if(pMeasurand)$ z3 h1 i  T* e/ ]5 R! R
  108. 5 d7 G1 {- _; C: ^9 a  \' C: H
  109.     {$ b7 c7 x# {# J& j

  110. & j* \* |. K0 {# Y9 [) K
  111.         *pMeasurand = (unsigned short)t;
    5 P( J9 {4 ]# p
  112.   l( h2 q9 ~8 J/ m# y' q
  113.     }7 z8 y) E  G0 d: t- J

  114. + ~0 Q4 v, I% ?
  115.       
    3 |" D$ B% p; T! e1 _

  116. ! [3 ^% l4 t; P. q
  117.     return t;( R8 @( s$ r  @5 M5 ~
  118. , I$ L. X( J; a) n7 h
  119.       # y* K  ^! k. c) O: h2 d
  120. ; A( m6 `% T* Z1 Y* k
  121. }
复制代码

3 ?, p; t  b& H6 r
上面就是对应的读取温湿度寄存器里面的值。
5.png
最后读取出来的需要进行转换。
6.png
7.png
如上图。
8.png
最终串口输出数据。
9.png
单片机使用的是STM32F103VET6。板子上还有其他传感器明天接着水。
1 M" J( F* j0 I4 h+ M
收藏 评论2 发布时间:2021-6-7 23:09

举报

2个回答
STMCU-管管 回答时间:2021-6-8 09:28:26
响应快啊,给力2 {4 e6 G1 d# w5 a1 C5 S- O3 U1 d
liuxingkeji 回答时间:2021-6-8 09:51:43
STMCU-管管 发表于 2021-6-8 09:289 u! w. Y* d3 x- S; P( J7 F& O6 [
响应快啊,给力
1 x, a5 L* w7 \
一晚给你水一篇
3 A' ?1 @9 ~/ U5 k

所属标签

相似分享

官网相关资源

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