需要确认注册邮箱后才能开通博客,立即确认我的邮箱
文章 搜索 高级搜索 ?3? ?3?
  • 滤波器new!
  • LED驱动 new!
  • 新能源 new!
  • PLL
  • PCIE协议
  • 可穿戴
  • LSI
  • FCI
文章 论坛 博客 小组 研讨会
EDN电子技术论坛>博客 >迈克尔乔丹博客 >DHT21(AM2301) 数字温湿度传感器在stm32F0和stm8s105的移植

迈克尔乔丹的博客——细致再细致,努力再努力。

博主:迈克尔乔丹???? ???? ????
介绍: 喜欢迈克尔。如果我的博客给您帮助,希望您能点个赞。联系请发邮件362245396@qq.com
文章(9)???? 访问(6906)???? 评论(27)???? 投票(24)???? 订阅本博??

博文列表查看方式: ???

DHT21(AM2301) 数字温湿度传感器在stm32F0和stm8s105的移植
发布时间:2015-11-20 19:14:45
技术类别:嵌入式
需要确认注册邮箱后才能下载,立即确认我的邮箱

?????写在之后:排版有些混乱,见谅哈。转载请注明出处。

???? 写在之后的之后: 我再放几张实物图哈哈,由于我之前在STM32F0移植的时候没有放照片,只能用现在用STM8S105的照片先拿上来,以飨读者。手头还有一些东西玩玩,就是手机控制LCD,这是目前的一部分。由于目前还没做出来,只是处于功能完善阶段,所以有些简陋。小弟就做个抛砖引玉。

?

???? 首先感谢ST王先生给我一块STM32F0-Discovery,实话说,在此之前也没想到会拿到。EDN CHINA 诚不欺我哈哈,废话少说,今天给大家带来的是一款温湿度传感器DHT21(AM2301),
这是一款性能优良的温湿度监测传感器,最近公司要求在STM32F0上还有在STM8S105上面进行移植,为下一步项目做一些准备。Discovery 确实是一个很好的开发环境,集成了STLINK,很方便调试和下载,做工也堪称精炼。
????? 在这里也感慨一下,由于本人走嵌入式这条路自己在网络上收益良多,在这里也感谢各位陌生而亲切的同行,也希望以此为契机,大家集思广益,共同建设EDN CHINA的大家庭。
???? 有问题大家联系我,鄙人乐向哲,362245396@qq.com.
???? 简单说一下,温湿度传感器DHT21(AM2301)是一款优良的温湿度传感器,具体的介绍在我的附件里面。

我附上的附件有以下三个
1,温湿度传感器DHT21(AM2301)的介绍,时序图,还有汇编,C51例程
2,温湿度传感器DHT21(AM2301) 在stm32F0上的移植
3,温湿度传感器DHT21(AM2301) 在stm8S105上面的移植

由于时间有限,我把重点的部分说一下
首先,温湿度传感器DHT21(AM2301)是单总线。

时序图入上所示,不知道为什么我的这边上传不了图片
简单说一下,

1,接线是简单的。如图1_1所示

??????????????????????????????????????????????? ?图1_1
/******
?????? 黑色: GND
?????? 红色: VCC
???????黄色: 接MCU的普通IO (注意不要接到特殊IO 如VSS VDD 等等)
????? 第四线:NC
*******/

2,时序是:
?
空闲时总线为高电平,通讯开始时主机(MCU)拉低总线500us后释放总线,延时20-40us后主机开始检测从机(DHT21)的响应信号。从机的响应信号是一个80us左右的低电平,随后从机在拉高总线80us左右代表即
将进入数据传送。(要注意程序给主机一个下降沿)
如图2_1所示:

????????????????????????????????????????? ?图2_1

如图2_2所示:

????????????????????????????????????????? 图2_2
3,引脚配置如下:这是重点! 这是重点! 这是重点! 重要的事情说四遍。。。
STM32F0版本
上拉输入是必须的!上拉输入是必须的!上拉输入是必须的!
***是中国的!***是中国的!***是中国的!***是中国的!说远了。。


stm32F0版本
void GPIO_Initializations(void)
?{
??GPIO_InitTypeDef GPIO_InitStructure;
??
??/* USART1_Tx/Rx Configuration */?????????????//USART1接口初始化
??GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);?//数据手册中有介绍
??GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);

??GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;?
??GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;???? ??//PA9/10 alternate function
??GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;?? ?//high speed
??GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;??//pushpull mode
??GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;???//可以没有上拉
??GPIO_Init(GPIOA, &GPIO_InitStructure);?

??/* GPIOB Configuration */
??GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;??????????//AM2301接口初始化
??GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;???//output mode
??GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;??//high speed
??GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;?????????? //上拉输入
??GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;???//pull up
??GPIO_Init(GPIOB, &GPIO_InitStructure);
?}

?

?

STM8S105版本:

#define SET_OUT_STATUS? { PC_DDR |= (1<


#define SET_IN_STATUS?? { PC_DDR &=~(1<

?

?

C51 汇编见附件 《AM2301(DHT21)规格书》

?

?

4,“1” 和 “0”的区别:两者的区别在于 高电平时间的长短

?

“0” 如图 4_1所示

?????????????????????????????????????????? 图4_1

“1” 如图 4_2所示

??????????????????????????????????????????? ?图4_2

5,关键程序演示和讲解

?

?

stm32F0版本

unsigned char AM23XX_Read(void)??????//读取温湿度
?{??
??unsigned char i, AM23XX_answerFlag=0;
??unsigned int cnt=0;
?
??AM23XX_OUT_SET;?????//IO设置为输出
?
??AM23XX_OUT(0);
??????//主机发开始信号, 单总线拉低(至少500us)
??delay_ms(1);??????
??
??AM23XX_OUT(1);??????//释放总线, 等待从机响应
??delay_us(30);????//延时(20~40us)
??AM23XX_IN_SET;??????//IO设置为输入
??
??if(AM23XX_IN == 0)?????//检测从机响应信号?
??{
???cnt = 0;
???while(! AM23XX_IN)????//等待低电平结束(80us)
???{
????if(++cnt >= 100000)
?????return 0;
???}
???cnt = 0;
???while(AM23XX_IN)????//等待高电平结束
???{
????if(++cnt >= 100000)
?????return 0;
???}
???
???for(i=0; i<5; i++)
???{
????AM_SensorData[i] = AM23XX_Read_Byte();
???}
???AM23XX_answerFlag = 1;???//应答标志变量置位
??}
??else
??{
???AM23XX_answerFlag = 0;
??}
??
??return AM23XX_answerFlag;
?}

?

?

?

STM8S105版本:

unsigned char? Read_Temperature(void)?? //读温度
{
? unsigned char i;
? SET_OUT_STATUS;
? PB6(1);
? delay_us(10000);
? PB6(0);
? delay_us(600);
? asm("sim");
? SET_IN_STATUS;
? EXTI_CR1 |= (1<<5)+(1<<4);? //配置上下沿都可以
? asm("rim");
? RecvStatrFg=1; //开始接受标志位
? RecvUselessBit=0;? //第一个下降沿是没有意义的
? RecvBytePot=0; //索引
? RecvBit=0;???? //位索引
? RecvTimeout =0; // 超时标志位

}
这个要与中断相联系。

#pragma vector = 7?? //中断向量
__interrupt void PC_470Rx(void)
{
??? if(RecvStatrFg)
??? {
?????
?????? if(PC_IDR_IDR5==0)//下降沿
?????? {
???????? RecvUselessBit++;//两者同时实现了i=i+1,但是++i返回值是i+1,而i++返回值是i.
???????? RecvTimeout=0;
???????? if(RecvUselessBit>1)??//第一个下降沿不采用
???????? {
?????????? if(RecvUselessBit>2)
?????????? {
????????????
???????????? if(DataTime<10)
???????????? {
??????????????? RecvData[RecvBytePot] &= ~(1<<(7-RecvBit));?//判断?0
???????????? }
???????????? else
???????????? {
??????????????? RecvData[RecvBytePot] |= (1<<(7-RecvBit));??? //判断?1
???????????? }
???????????? RecvBit++;
???????????? if(RecvBit>7)??//8位满清零
???????????? {
?????????????? RecvBytePot++;
?????????????? RecvBit=0;
???????????? }??
?????????? }
?????????? DataTime=0;
???????? }
?????? }??
??? }
??
}

?

?

?

C51版本和汇编版本在我发的附件里面 《AM2301(DHT21)规格书》里面

?

?


5,读数的话在?《AM2301(DHT21)规格书》讲得很详细,还是上面的话,有问题大家一起探讨。

????? 组合为:湿度高八位+湿度低八位+温度高八位+温度低八位+校验

?

6,效果照片展示

?

?

在示波器上的演示

?

?

?

明显看出 “1”与 “0”

?

?

?

3,在串口调试助手上的表示

在LCD(JLX12864G_086)上面的移植

关于JLX12864G_086的移植我在下一篇博客写写? 最近在赶点东西哈

?

由于时间有限,有些混乱。大家要交流的可以联系我,很期待与大家的联系。转载请注明出处。

?

?

附件:
STM32F051 AM2301串口输出.zip 下载次数:?37
温湿度成功2015-11-13.zip 下载次数:?38
AM2301(DHT21)规格书.pdf 下载次数:?53
分享到:? 新浪微博 ?? 微信 ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
qq空间 ?? 腾讯微博 ?? 人人网 ?? 百度搜藏 ??
??????有[ 8 ]名读者喜欢此文
阅读(1427)?? 评论(6)?? 收藏??I?? 打印??I?? 推荐到小组??I?? 转发到我的博客 (0)
对不起,您还没有登录,请先登录注册
上一篇:JLX12864G_086 LCD在STM8S105 和STM32的移植
最近到访博主
mango¥
牛人有话说 - DHT21(AM2301) 数字温湿度传感器在stm32F0和stm8s105的移植
美国的游客 (您将以游客身份发表,请登录 | ?注册)
?
你还可以输入1000
验证码:
分享: 新浪微博?? qq空间?? qq微博?? 人人网?? 百度搜藏??
?
有 [ 5 ] 名读者发表评论 - DHT21(AM2301) 数字温湿度传感器在stm32F0和stm8s105的移植
感谢分享,准备调试,谢谢
(0) ???? (0) ???? 回复(0)
对不起,您还没有登录,请先登录注册
???? 2016-04-03 18:01
好东西
(0) ???? (0) ???? 回复(0)
对不起,您还没有登录,请先登录注册
???? 2016-03-03 11:55
rain社区管理 :
博主动手DIY的作品,基于STM32 MCU的板子,很不错。
2015-11-23 09:45
谢谢支持!
(0) ???? (0) ???? 回复(0)
对不起,您还没有登录,请先登录注册
???? 2015-11-23 14:30
博主动手DIY的作品,基于STM32 MCU的板子,很不错。
(0) ???? (0) ???? 回复(1)
对不起,您还没有登录,请先登录注册
???? 2015-11-23 09:45

中国的游客
刚好需要这个,谢谢楼主。
(0) ???? (0) ???? 回复(0)
对不起,您还没有登录,请先登录注册
???? 2015-11-20 20:22
STM8S105版本: #define SET_OUT_STATUS { PC_DDR |= (1< #define SET_IN_STATUS { PC_DDR &=~(1< 这部分上传的时候有些问题,特此更正: #define SET_OUT_STATUS { PC_DDR |= (1<
(0) ???? (0) ???? 回复(0)
对不起,您还没有登录,请先登录注册
???? 2015-11-20 19:26
转发到我的博客
评论?@细致再细致,努力再努力。?的“DHT21(AM2301) 数字温湿度传感器在stm32F0和stm8s105的移植”
写在之后:排版有些混乱,见谅哈。转载请注明出处。写在之后的之后:我再放几张实物图哈哈,由于我之前在STM32F0移植的时候没有放照片,只能用现在用STM8S105的照片先拿上来,以飨读者。手头还有一些东西玩玩,就是手机控制LCD,这是目前的一部分。由于目前还没做出来,只是处于功能完善阶段,所以有些简...
你还可以输入30000
同时评论给?迈克尔乔丹
????
快速回复
?
你还可以输入1000
????
引用回复
引用评论?
?
你还可以输入1000
????
博主资料

想做一个智能管家。

文章存档
2015年12月 (5) 2015年11月 (4)
? ?
? ?
最新评论
阅读排行
迈克尔乔丹的好友
迈克尔乔丹的小组???? 加入小组
STM32爱好者之家
成员6660名
创建者:yuliang0321 Altera MAX 10 FPGA 成员946名
创建者:EDNChina
最新网络博文
华为官方回应有关自研手机操作系统的传闻
这颗芯片有故事,你有酒吗?
PCB设计PADS各层的用途和作用
联想收购的得与失 摩托罗拉空壳化使...
传华为智能机销量目标下调2000万部 Ma...
? 更多博文>>
返回博客首页
有问题请反馈