1、说明

AM2320 数字温湿度传感器采用单总线、标准 I²C 两种通信方式。本文主要基于HT66F2390单片机,采用单总线通讯,实现AM2320传感器数据获取。关于AM2320传感器的使用,可参考AM2320产品手册。在文章最后,分享了AM2320的相关资料,里面有我写的STM32的例程,大家可以参考一下。

2、AM2320单总线通讯


3、代码

下面是基于HT66F2390的AM2320传感器开发代码:

AM2320.h

#ifndef __AM2320_H
#define __AM2320_H
#include "HT66F2390.h"
//#include "sys.h"
#include "Type.h"#define GPIO_AM2320  _pdc3
#define PIN_AM2320      _pd3void AM2320_IO_OUT(void);
void AM2320_IO_IN(void);
void AM2320_DQ_OUT(u8 i);
u8 AM2320_DQ_IN(void);
u8 AM2320_Init(void);
void AM2320_Rst(void);
u8 AM2320_Check(void);
u8 AM2320_Read_Bit(void);
u8 AM2320_Read_Byte(void);
u8 AM2320_Read_Data(float *temperature,float *humidity);#endif

sys.h文件为系统时钟配置头文件,没用到可以不调用。
Type.h文件主要是结构体类型的重定义,方便后面调用。

Type.h

typedef  unsigned char   u8;
typedef char            s8;
typedef unsigned short  u16;
typedef short           s16;
typedef unsigned long   u32;
typedef long            s32;

AM2320.c

#include"AM2320.h"/* 输出模式 */
void AM2320_IO_OUT(void)
{GPIO_AM2320=0;
}
/* 输入模式 */
void AM2320_IO_IN(void)
{GPIO_AM2320=1;_pgpu1=1;  //上拉使能
}/* AM2320初始化 */
u8 AM2320_Init(void)
{    GPIO_AM2320=0;   //输入模式PIN_AM2320=1;  //输出AM2320_Rst();  //发送开始信号return AM2320_Check();  //检测AM2320的响应
} void AM2320_Rst(void)
{                 GPIO_AM2320=0;   //输出模式PIN_AM2320=0;    //拉低delay_ms(20);       //拉低至少800usPIN_AM2320=1;   //拉高 GCC_DELAY(120);        //拉高20~40us
}u8 AM2320_Check(void)     //检查
{   u8 retry=0;AM2320_IO_IN();      //输入模式 while (PIN_AM2320&&retry<100)   //AM2320会拉低80us{retry++;GCC_DELAY(4);};     if(retry>=100) //超时未响应/未收到开始信号,退出检测{return 1;   }else retry=0;while (!PIN_AM2320&&retry<100) //AM2320拉低后会再次拉高80us{retry++;GCC_DELAY(4);};if(retry>=100){return 1;   //超时,AM2320工作出错,退出检测}return 0;  //设备正常响应,可以正常工作
}
/* 读1位 */
u8 AM2320_Read_Bit()
{u8 retry=0;while(PIN_AM2320&&retry<100)//等待变成低电平,开始数据接收准备{retry++;GCC_DELAY(4);}retry=0;while(!PIN_AM2320&&retry<100)//等待变成高电平,数据开始传输{retry++;GCC_DELAY(4);}GCC_DELAY(160);         //等待40us//0信号为26-28us,1信号则为70us,所以说超过40us去读取引脚状态就可以知道传输的值了if(PIN_AM2320){return 1;}else{return 0;}
}
/* 读8位 */
u8 AM2320_Read_Byte(void)
{        u8 i,dat;dat=0;for (i=0;i<8;i++) {dat<<=1; dat|=AM2320_Read_Bit();} return dat;
}/* 读温湿度 */
u8 AM2320_Read_Data(float *temperature,float *humidity)
{        u8 buf[5];   u8 i;u8 sum;*humidity=0;*temperature=0;AM2320_Rst();if(AM2320_Check()==0) //设备响应正常{for(i=0;i<5;i++)//读取40位数据{buf[i]=AM2320_Read_Byte();}AM2320_IO_OUT();   //输出模式PIN_AM2320=1;    //拉高 sum = buf[0]+buf[1]+buf[2]+buf[3];if(sum == buf[4])   //校验数据接收是否正确{*humidity=(float)buf[0]*25.6+(float)0.1*buf[1];   //湿度高8位*temperature=(float)buf[2]*25.6+(float)0.1*buf[3];   //温度高八位和低八位}}else {return 1;    //设备未成功响应,返回1}return 0;    //读取数据成功返回0
}

建议直接使用官方的GCC_DELAY()函数,自定义的延时函数会造成延时不准从而无法获取传感器数据。

4、资源分享

链接:https://pan.baidu.com/s/17HEFl1VQY7macNFTNDbYig
提取码:2320
本链接是AM2320的资料包,其中有PDF的传感器说明书,还有STM32、Arduino和51的开发例程。因为某些原因,合泰的开发例程没有放进去。如果本文对你有用,点赞收藏支持一下呗,蟹蟹大家啦。

HT66F2390/STM32——AM2320温湿度传感器相关推荐

  1. stm32+HTU21D温湿度传感器通过usart1发送温湿度数据在串口助手显示

    stm32+HTU21D温湿度传感器 这里就不拍实物图了,我用的是下面这款HTU21D ic是stm32f103vet6 工程代码是io口模拟i2c和传感器通讯 PB6-SCL,PB7-SDA usa ...

  2. STM32使用温湿度传感器

    前言 MDK5(Keil5)软件:uVision5 IDE 集成开发环境,是目前针对 ARM 处理器,尤其是 Cortex M 内核处理器的最佳开发工具. 本项目采用ARM结构中最为代表的Cortex ...

  3. 基于I2C协议利用STM32进行温湿度传感器的数据采集

    目录 一.I2C总线通信协议的介绍 1.I2C简介 2.I2C总线时序图 3.五种速率 4.四种信号 5.I2C的优缺点 6.软件IIC和硬件IIC 二.创建工程 1.实验目的 2.工具的选择 3.相 ...

  4. STM32 驱动温湿度传感器 HTU21D

    前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长. github:my github 注:博客所涉及的关于 stm32 的代码 ...

  5. STM32驱动温湿度传感器HTU21D

    https://blog.csdn.net/wwt18811707971/article/details/80034047 1.简介 法国Humirel公司新一代HTU21D温度和湿度传感器在尺寸与智 ...

  6. STM32——DHT11温湿度传感器

    一.DHT11介绍 1.DHT11技术性能特征 工作电压范围:3.3V~5.5V 工作电流:平均0.5mA 输出:单总线数字信号 测量范围:湿度20~90%RH,温度0~50°C 精度:湿度±5%,温 ...

  7. 嵌入式 STM32 SHT31温湿度传感器

    目录 简介 1.原理图 2.时序说明 数据传输 起始信号 结束信号 3.SHT31读写数据 SHT31指令集 读数据 温湿度转换 4.温湿度转换应用 sht3x初始化 读取温湿度 简介 什么是SHT3 ...

  8. STM32读取SHT3x系列温湿度传感器,标准库和HAL库

    STM32读取SHT3x系列(SHT30.SHT31.SHT35)温湿度传感器的数据并显示在0.96寸OLED屏上. 我下面提供两份代码,一份是标准库使用硬件I2C的,另一份是HAL库使用软件模拟II ...

  9. STM32驱动 HTU21D温湿度传感器

    STM32驱动 HTU21D温湿度传感器 温湿度传感器模块HTU21D产品简介 基于法国Humirel公司高性能的湿度感应元件制成,新一代HTU21D温度和湿度传感器在尺寸与智能方面建立了新的标准:它 ...

最新文章

  1. 运行gulp项目报错:AssertionError: Task function must be specified。
  2. php实现多商家开发,Thinkphp5.0实战-仿百度糯米开发多商家电商平台学习注意事项...
  3. Canvas 属性,方法
  4. android ptrace注入
  5. [html] iframe在更改了src之后,不出现后退或者前进按钮怎么解决?
  6. 500道Java 必备面试题答案(过后即删)
  7. 大学英语期末考计算机上答卷,英语期末考试总结范文(精选5篇)
  8. nuxt webpack配置css,vuecli或nuxt用Webpack的优雅ProgressBar(webpackBar)
  9. windows访问mysql57_windows下 Mysql5.5升级5.7(其实就是安装了两个版本的mysql)
  10. python人工智能方向怎么学_人工智能方向需要学习python或是深度学习呢?
  11. 用脚本整理Leetcode题解
  12. 845. 数组中的最长山脉
  13. coolfire文章之八
  14. 转速恒压频比交流变频调速系统Simulink仿真,可观察到电压频率的变比情况以及电动机的转速波形。
  15. 如何解决谷歌浏览器插件屏蔽问题
  16. 清零软件解决连供打印机喷嘴断墨和堵塞
  17. scara机器人运动学正逆解
  18. SM74HC595D电路级联教程
  19. 对于PS选区的初步认识
  20. JavaScript小项目总结

热门文章

  1. Linux之阻塞与非阻塞IO
  2. 一种灵活可靠的工作方式:组件化设计与开发
  3. js-PhotoSwipe相册功能
  4. 计算机视觉学习笔记(一)
  5. 封装R0805跟R0603贴片电阻有什么区别?
  6. css display flew 伸缩盒模型
  7. android 百度地图获取两个坐标的实际路线距离
  8. 群晖NAS教程(二十二)、利用Docker安装minio
  9. JAVA--线程同步的三种方法
  10. model.evaluate() 解释一下