AM2311_STM32_I2C

现在正在做一个机房控制系统,要求采集机房室内外的温湿度,并根据情况控制空调和电机。温湿度传感器是客户指定的,型号是奥松电子的AM2311湿敏电容数字模块,通信接口采用标准I2C接口。

以前没做过I2C接口的开发,这次正好练练。我用的是安富莱的开发板,里面关于I2C的例程说ST的硬件I2C实现太复杂,建议用GPIO模拟。看到AM2311的官方文档里说AM2311传感器每个I2C地址都相同,且为0xB8,因此在同一总线上只能挂一个AM2311传感器,这下好,又给我这个懒人找到软模拟的理由了(我以为STM32只有一个硬件I2C口,后来看文档实际是有两个)。

根据奥松电子官网上提供的C51下的AM2311源码,写完了STM32下的代码,调试了下,有问题:

1、主机在发完一个字节后,从机没有ACK把时钟线拉低。

解决:调整了延时时间,可以收到从机的响应了。

2、收到的数据整体左移了一位。

一开始我以为是在程序中多产生了一个时钟信号,所以才会左移,用示波器观察了下时钟输出波形,都是对的,想到程序里有一处是收到一位数据后,保存数据的变量左移一位以便接收下一位数据。定位到这段代码,果然是这个地方出错了,我是在循环中每接收一位存储后才左移,这样在完整地接收了一个字节后,即收到第0位后,我还是进行了一次左移操作,造成了最终数据的错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值