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

查看: 537|回复: 0

[其他] STM32通过硬件I2C读写控制AM2311温湿度传感器模块打印输出...

[复制链接]

2

主题

0

回帖

0

蝴蝶豆

新手上路

最后登录
2019-4-16
发表于 2019-4-16 16:47:57 | 显示全部楼层 |阅读模式
程序功能说明:
1、通过I2C硬件查询方式驱动AM2311。
2、获取AM2311测得的温度和湿度并串口打印输出。
3、使用I2C1。
程序注意事项:
1、AM2311在测试完数据后会进入一个休眠模式,程序需要向AM2311发送一个任意的数据将其唤醒,发送这个数据可能会返回一些错误的信息,这个可以不用理会。
2、每次准备读取温度或者湿度时需要发送读取数据命令,发送命令后需要稍微等待一段时间使传感器将数据准备好,若不加延时直接调用读数据函数可能会出现总线错误。
3、测得的温度或者湿度值要通过移位除10处理,具体处理方法可以产考程序源码和AM2311传感器模块资料。
程序主函数:
  • /**
  •   * @brief  串口打印输出温度和湿度
  •   * @param  None
  •   * @retval None
  •   */
  • int main(void)
  • {
  •         uint8_t AM2311Data[10],ret;
  •         NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000); //重新映射中断向量表
  •         SystemInit();//系统时钟初始化
  •         USART_Configuration(115200);//串口1初始化
  •         printf("\x0c\0");printf("\x0c\0");//超级终端清屏
  •         printf("\033[1;40;32m");//设置超级终端背景为黑色,字符为绿色
  •         printf("\r\n*******************************************************************************");
  •         printf("\r\n************************ Copyright 2009-2012, ViewTool ************************");
  •         printf("\r\n************************* http://www.viewtool.com/bbs *************************");
  •         printf("\r\n***************************** All Rights Reserved *****************************");
  •         printf("\r\n*******************************************************************************");
  •         printf("\r\n");
  •         //根据AM2311传感器设置I2C初始化数据
  •         I2C_Info.controlMode = 1;//硬件控制
  •         I2C_Info.speed=100000;//100K
  •         I2C_Info.subAddrMode=2;//无子地址模式
  •         I2C_Info.subAddrWidth=0;//子地址为0字节宽度
  •         I2C_Info.slaveAddr=0xB8;//AM2311传感器I2C地址
  •         I2C_Info.channel=0;//使用I2C1
  •         VT_I2C_HardInit(&I2C_Info);
  •         while(1)
  •         {
  •                 VT_I2C_HardWriteNByte(I2C1,0,AM2311Data,1);//随便发送一个数据出去,将传感器从睡眠中唤醒
  •                 AM2311Data[0]=0x03;
  •                 AM2311Data[1]=0x00;
  •                 AM2311Data[2]=0x04;
  •                 ret = VT_I2C_HardWriteNByte(I2C1,0,AM2311Data,3);//发送读取温度和湿度的指令
  •                 if(ret){
  •                         printf("I2C写数据错误 %d\n\r",ret);
  •                 }
  •                 Delay(100000);//必须加这个延时,否则传感器没准备好数据会出现读数据错误
  •                 ret = VT_I2C_HardReadNByte(I2C1,0,AM2311Data,8);//读取温度和湿度
  •                 if(ret){
  •                         printf("I2C读数据错误 %d\n\r",ret);
  •                 }else{
  •                         printf("温度:%f℃\n\r",((AM2311Data[4]<<8)+AM2311Data[5])/10.0);
  •                         printf("湿度:%f%%\n\r",((AM2311Data[2]<<8)+AM2311Data[3])/10.0);
  •                 }
  •                 Delay(10000000);
  •         }
  • }

[color=rgb(51, 102, 153) !important]复制代码

程序运行效果:

回复

使用道具 举报

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