HT66F2390/STM32——AM2320温湿度传感器

news/2024/11/24 1:57:51/

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的开发例程。因为某些原因,合泰的开发例程没有放进去。如果本文对你有用,点赞收藏支持一下呗,蟹蟹大家啦。


http://www.ppmy.cn/news/139343.html

相关文章

一次恶心的AM2320温湿度传感器调试经历

一次恶心的AM2320温湿度传感器调试经历 前面画了一块MCU和FPGA的PCB板子&#xff0c;主要功能都已经测试通过了&#xff0c;还剩下一个温湿度传感器AM2320的功能没试&#xff0c;本以为网上买的这个模块无非就是引两个引脚出来就完事了&#xff0c;可最后却花了我近两天时间来调…

双节锂电池充电方案芯片IP2320,支持5V输入同步开关升压充电

双节串联锂电池/锂离子电池的升压充电管理方案芯片——英集芯IP2320&#xff0c;集成功率MOS&#xff0c;采用同步开关架构&#xff0c;使其在应用时仅需极少的外围器件&#xff0c;并有效减小整体方案的尺寸&#xff0c;降低BOM成本。 IP2320 集成一个Boost同步升压充电控制器…

P2320 [HNOI2006]鬼谷子的钱袋(想法)

原题&#xff1a; https://www.luogu.org/problem/P2320 题意&#xff1a; 给出一个m&#xff0c;你讲起拆分成最少份&#xff0c;使得可以组成1到m之间的任意数&#xff0c;大于1数只能有一份。 解析&#xff1a; 以39为例&#xff0c;按照二进制分可以分成 1 , 2 , 4 , 8…

zzulioj2320 古钱币(编程脱衣舞,层层优化,绝了!!!)

【题目描述】 小强同学的爸爸是收藏爱好者&#xff0c;家里收藏了好多古钱币&#xff0c;有唐、宋、元、明、清年代的钱币&#xff0c;分别用A、B、C、D、E来表示&#xff0c;每个钱币的价格是5、4、3、2、1&#xff08;万元&#xff09;&#xff0c;小强考上了大学&#xff0c…

洛谷 P2320 [HNOI2006]鬼谷子的钱袋 思维+二进制

https://www.luogu.org/problem/P2320 题目描述 鬼谷子非常聪明&#xff0c;正因为这样&#xff0c;他非常繁忙&#xff0c;经常有各诸侯车的特派员前来向他咨询时政。 有一天&#xff0c;他在咸阳游历的时候&#xff0c;朋友告诉他在咸阳最大的拍卖行&#xff08;聚宝商行&a…

哈理工OJ P2320:OX

题目链接&#xff1a;OX 题意 &#xff1a;给出一个3X3的黑白棋棋盘&#xff0c;棋盘上有若干黑白子&#xff0c;再给出下一个下的人&#xff0c;问下一个下的人能否赢 分析&#xff1a;考虑到只有39种状态&#xff0c;故用一个数保存目前棋盘的状态&#xff0c;记为value&…

Citrix Receiver 错误编号2320

Citrix Receiver 错误编号2320 安装完citrix receiver后点击快捷方式启动应用&#xff0c;出现以上报错解决方法&#xff1a;1 打开注册表 搜索 allowhotkey2 删除allowhotkey键值 注意&#xff0c;删除前请备份该键值&#xff01; 转载于:https://blog.51cto.com/141686/21210…

【实战】烂泥:关于佳能IR2320N网络打印机的安装域使用

第一步&#xff1a;首先要为该机器设置一个IP地址&#xff0c;具体方法是&#xff1a;附加管理→系统管理→网络管理→IPv4→IP地址&#xff0c;输入相应的IP地址&#xff0c;子网掩码&#xff0c;默认网关。如果你要查看该机的MAC地址的话&#xff0c;那你也可以在此查看呢。选…