EDA365电子论坛网

标题: stm32f103 sht20,接不接传感器都显示128.多 的值! 请各位大神指教一下,那里有问... [打印本页]

作者: beachsun    时间: 2020-10-23 15:10
标题: stm32f103 sht20,接不接传感器都显示128.多 的值! 请各位大神指教一下,那里有问...
在网上找的 SHT20 的程序,我只修改了端口 由PB6、PB7也成了 PB10、PB114 x& f7 k5 v$ H% ?' c# L. _
可运行后,读出的值为128.多,温湿度的值都不变。
* F7 v7 S: t. Z/ k# [1 G! J1 v好像接不接传感器都显示128.多  的值!, |& u  @& D+ W8 U4 E! G
请各位大神指教一下,那里有问题?谢谢
' X4 I+ v" T+ g: A2 r4 Z6 o% e& s) N: ^. V0 s8 ]- ^
$ ~# D( ^5 \9 h! G$ `- Z: [# x, h
.h 的设置,我只改了前3行0 X4 ]) p& ~& m
7 t- v& X! C/ a4 t- Y. b  E

: b# X  ]7 r0 m#define SHT2x_I2C_PORT          GPIOB
0 [( n' c) q5 z8 b" ?#define SHT2x_SCL_PIN           GPIO_Pin_10        //6, A; J* i5 D8 L0 ^' b
#define SHT2x_SDA_PIN           GPIO_Pin_11        //7
: o% s) k& i6 X% h% ?8 q  }, o* G, r

( s3 q  V# @7 U6 T1 t. ?. _1 W8 Y#define SHT2x_SCL_HIGH()        GPIO_SetBits(SHT2x_I2C_PORT, SHT2x_SCL_PIN)
/ D2 t& u' ^' |; J' k: y, M5 }: s+ ]#define SHT2x_SCL_LOW()         GPIO_ResetBits(SHT2x_I2C_PORT, SHT2x_SCL_PIN). u) S9 J7 z3 ]8 I9 K
6 E; j: t8 v6 w4 y5 r. ?
" T6 y3 G$ c: M3 I# o5 f
#define SHT2x_SDA_HIGH()             GPIO_SetBits(SHT2x_I2C_PORT, SHT2x_SDA_PIN)
6 Y8 b' n' M/ b% y" ?#define SHT2x_SDA_LOW()         GPIO_ResetBits(SHT2x_I2C_PORT, SHT2x_SDA_PIN)8 B0 j" E. @" `: ~- ]

2 j9 Z' E8 Q7 _4 X" ?# ^
2 _% t* n2 h7 B0 y, P#define SHT2x_SCL_STATE()       GPIO_ReadInputDataBit(SHT2x_I2C_PORT, SHT2x_SCL_PIN)" ?; @+ X. d# U; B& Q6 |
#define SHT2x_SDA_STATE()       GPIO_ReadInputDataBit(SHT2x_I2C_PORT, SHT2x_SDA_PI
" `' R4 t/ _$ X8 r2 o) k" e9 Q8 Z& G5 `

: o/ l5 p& a& `6 L) b% Z4 m
' w1 k6 V7 T' t: A
3 Z9 T6 U$ c, u.c 初始化函数,我只加了 RCC_APB2PeriphclockCmd(RCC_APB2Periph_GPIOB , ENABLE);这一句
. h% D) A* K3 o) w
2 y: Y' o" M4 D' m- K; _$ y, B/ ]4 }( P; J
void SHT2x_Init(void). Y8 [, ]; H' F. D+ k$ [
{
% a8 {7 C, ~8 T; E  ^1 n    GPIO_InitTypeDef GPIO_InitStructure;
& C+ F( ]; N% s3 Y% I6 ]
2 O6 K2 V/ h7 o: N6 S( E2 G( t1 n1 d' e+ c( E3 E) t
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
) C5 f8 R( U8 K$ e4 B+ F. O
  E6 H0 f# \1 t( a) m4 @' a
  L9 G$ z6 V( ~; i! \. `' S    GPIO_InitStructure.GPIO_Pin =  SHT2x_SCL_PIN | SHT2x_SDA_PIN;
, `1 U1 N' h7 L    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
* J+ |4 m$ ^2 ?4 Q- c6 }1 p1 y7 \    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  c' l3 c. F3 r- w9 h) ^
    GPIO_Init(SHT2x_I2C_PORT, &GPIO_InitStructure);
" f3 m0 @* |2 U& ]' W6 m$ [: I& H0 k; R3 ]

* d7 r  x* ^& {0 l, |5 V; ~/ J+ s    SHT2x_SCL_HIGH();9 I, j$ |4 Y9 M
    SHT2x_SDA_HIGH();) i5 B8 I* `+ m  x( M' L8 x3 |% p
5 X2 n2 F  R0 p* V
9 _2 V% {8 n1 w; C& s. B
    SHT2x_Delay(80);
+ y, O! m9 z- i$ X6 a, c8 I# N+ C% i; [) ~* u/ q  s# s

7 a1 r1 D, J- j' R0 `* w    SHT2x_SoftReset();
$ J) V( W8 _: g, k* y}
/ k2 d2 S! n( C/ E* j6 ~
5 `6 p1 N7 X8 c* L! b; W
作者: younicp    时间: 2020-10-23 16:02
菜鸟帮你顶一个
作者: mytomorrow    时间: 2020-10-23 17:43
SDA这个引脚在使用时既要做为输入又要作为输出,你这样初始化他肯定有问题
作者: beachsun    时间: 2020-10-23 17:44
mytomorrow 发表于 2020-10-23 17:43
1 J5 e; Z. _: J, W9 ESDA这个引脚在使用时既要做为输入又要作为输出,你这样初始化他肯定有问题
7 P' Q$ _$ f9 z7 c1 U. j
应该怎么做
/ p4 ~% b, _* q3 M  M
作者: mytomorrow    时间: 2020-10-23 17:44
beachsun 发表于 2020-10-23 17:44
$ W% p( @8 ]" x/ T6 t  `8 Q$ F9 I应该怎么做
) N; u! \1 v- B
在读取数据的时候将SDA设置为输入,在写数据的时候将SDA设置为输出,建议你参考原子的例程,他也是使用模拟IIC。  C6 P1 R4 @  z! k

作者: beachsun    时间: 2020-10-23 17:49
mytomorrow 发表于 2020-10-23 17:447 ?4 Y! V& ?- N- {% Y3 A
在读取数据的时候将SDA设置为输入,在写数据的时候将SDA设置为输出,建议你参考原子的例程,他也是使用模 ...
: t; `+ [  t2 ~7 y' ~0 O9 X% |
谢谢指导,问题已经解决,8 K4 S4 O& b: D; `$ P/ f3 ^  E9 H
主要问题:: Q2 w0 N0 w; V6 W' I
1.硬件,芯片SDA、SCL两个引脚没有加上拉电阻——在网上买的以为可以直接用。7 R2 S9 t' J) }" b9 h+ [; }
2.IO口打开方式,程序里写成了打开IIC2——这个问题纠结了好久,才搞清楚,STM32只是模拟IIC不用打开硬件IIC。
1 S! N4 t- \4 {7 D" n




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2