初级会员

- 积分
- 155
- 金钱
- 155
- 注册时间
- 2019-9-5
- 在线时间
- 27 小时
|
GY39模块是一个温度、湿度、大气压力、海拔、光照度的复合模块,支持串口和IIC接口访问。
最近做个小玩意,想用GY39模块通过IIC总线读取温湿度数据,并用Usart1输出至电脑串口。
IIC总线挂在PA6,PA7上。模块上手以后先按厂家的例程写进F103C8T6最小系统板上,写完重启后发现输出的各项参数都为0。
于是乎,开始分析程序和电路连接。一开始以为端口初始化为开漏输出,IIC总线缺少上拉电阻,配了两个4K7的电阻后依然没有数据。
忙活了一晚上后决定老老实实把程序中各个函数过一遍。由于手上又没有逻辑分析仪。只好在各个功能函数的返回值前加了一条printf语句,用于输出返回值,
看看到底是哪个函数模块出了问题。重新烧录后奇迹发生了,GY39居然有输出了,函数内的printf语句输出的也都是一切正常。试着把printf语句注释掉,结果又没输出了。
多番烧脑分析(瞎猫碰着死老鼠)后认为,估计是原程序中所给的延时不足,造成模块来不及响应,加上printf语句后相当于额外加了延时,抱着这个思路提高了延时时间,原延时5us的,改为10us。
模块就有输出了。
不过还是有疑问,希望各位高手能否给解答一下:
1、厂家例程里面一再强调IIC总线时钟频率要低于40KHZ,但是例程里面使用的应该是软件模拟IIC读写,这个频率是如何计算得出??如何才能保证低于40KHZ??
2、虽然GY39模块有数据输出,但是海拔高度是错误的且基本不变,显示值为65515m上下跳动,我研究了GY39的IIC数据格式,发现海拔数据位于数据串的最后两个字节,会不会是因为主机读数据过程中
时序有少许偏差,前面的数据能读对,到最后两个字节的时候,因为时序偏差的原因导致数据出错了????
|
|