写在之后:排版有些混乱,见谅哈。转载请注明出处。
写在之后的之后: 我再放几张实物图哈哈,由于我之前在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 = 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的移植我在下一篇博客写写 最近在赶点东西哈
由于时间有限,有些混乱。大家要交流的可以联系我,很期待与大家的联系。转载请注明出处。
);>);>
作者: Bruce-Woo, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-1850657.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
用户420356 2016-4-3 18:01
用户1268034 2016-3-3 11:55
Bruce-Woo 2015-11-23 14:30
用户1696769 2015-11-23 09:45
用户377235 2015-11-20 20:22
Bruce-Woo 2015-11-20 19:26