纬图虚拟仪器论坛

 找回密码
 立即注册
搜索
查看: 10507|回复: 4

STM32通过硬件I2C读写控制AM2311温湿度传感器模块打印输出数据

[复制链接]
发表于 2012-11-20 12:43:42 | 显示全部楼层 |阅读模式
本帖最后由 wdluo 于 2012-11-20 14:07 编辑

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

使用道具 举报

 楼主| 发表于 2012-11-21 20:50:00 | 显示全部楼层
wkxwkx101 发表于 2012-11-21 19:35
程序写的不错,这传感器贵吗?

不贵
回复 支持 反对

使用道具 举报

发表于 2013-3-19 09:59:33 | 显示全部楼层
好资料!谢谢分享!!
回复 支持 反对

使用道具 举报

发表于 2013-4-29 11:22:41 | 显示全部楼层
楼主能否帮衬看一下这个程序啊~
为什么每次输出的就是个0x03,后面的都是0啊

AM2311.rar

891.42 KB, 下载次数: 28

stm32串口输出AM2311的温湿度值,(寄存器版)

回复 支持 反对

使用道具 举报

发表于 2017-11-11 15:06:24 | 显示全部楼层
好,可以参考!谢谢了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|纬图虚拟仪器

GMT+8, 2024-12-12 10:11 , Processed in 0.369274 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表