1.概述
本篇文章主要介绍如何使用芯片型号r7fa2l1ab2dfl的开发板外接温湿度传感器进行温湿度检测,并通过串口显示温湿度。
2.硬件准备
这里我们准备的是芯片型号r7fa2l1ab2dfl的开发板,dht11温湿度传感器模块。
3.温湿度传感器参数
供电电压:3.3v~5.5v dc
输出:单总线数字信号测量范围:湿度 20~90%rh,温度 0~50℃测量精度:湿度±5%rh,温度±2%℃分辨率:湿度1%rh,温度1℃长期稳定性:newstack->driver->connectivity -> uart driver on r_sci_uart。
10.uart属性配置
11.设置e2studio堆栈
12.e2studio的重定向printf设置
c++ 构建->设置->gnu arm cross clinker->miscellaneous去掉other linker flags中的 “--specs=rdimon.specs”
13.printf输出重定向到串口
打印最常用的方法是printf,所以要解决的问题是将printf的输出重定向到串口,然后通过串口将数据发送出去。 注意一定要加上头文件#include#ifdef __gnuc__ //串口重定向 #define putchar_prototype int __io_putchar(int ch)#else #define putchar_prototype int fputc(int ch, file *f)#endifputchar_prototype{ err = r_sci_uart_write(&g_uart0_ctrl, (uint8_t *)&ch, 1); if(fsp_success != err) __bkpt(); while(uart_send_complete_flag == false){} uart_send_complete_flag = false; return ch;}int _write(int fd,char *pbuffer,int size){ for(int i=0;i;i++)>
14.dht11链接图
由下图我们可以得知,我们将data接在了p208引脚上。
15.io配置
可以给p208命名,并将p208引脚设置为输入模式。
16.dht11数据传输
dht11数字湿温度传感器采用单总线数据格式,单个数据引脚端口完成输入输出双向传输。数据分小数部分和整数部分,一次完整的数据传输为40bit,高位先出。 数据格式为:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和。 数据传送正确,则byte4+byte3+byte2+byte1=byte0。
17.数据发送时序
首先主机发送开始信号,主机变为输出模式拉低数据线,保持至少18ms时间,再拉高数据线20~40us时间,然后主机变为输入模式读取dht11的响应。dht11接收到主机发送的开始信号,dht11会拉低数据线,保持80us时间,作为响应信号,然后dht11拉高数据线,保持80us时间后,开始输出数据。待40bit数据传输结束后,上拉电阻拉高总线。
18.数据0&数据1
数据1时序图:
数据0时序图: 通过对比时序图可知,要判断数据0或数据1,只要判断拉高电平时间即可。例如,在电平被拉高的40us判断高低电平,若此时为低电平,则为数据0。若此时为高电平,则为数据1。
19.r_ioport_portdirectionset()函数原型
故可以通过r_ioport_portdirectionset()函数设置端口io方向,设置方法如下所示。//设置p208为输入r_ioport_portdirectionset(&g_ioport_ctrl, bsp_io_port_02, 0<<8, 1<<8);//设置p208为输出r_ioport_portdirectionset(&g_ioport_ctrl, bsp_io_port_02, 1<<8, 1<<8);
20.dht11.c& dht11.h
添加2个文件,dht11.c是驱动文件,dht11.h是头文件。 dht11.c 代码:#include hal_data.h#include #include dht11.huint8_t temp;uint8_t humi;uint8_t flag=0;uint8_t retry=0;bsp_io_level_t p_port_value_dht11;void dht11_rst(){ dht11_io_out();//set output dht11_dq_low;//拉低dq r_bsp_softwaredelay(18, bsp_delay_units_milliseconds);//拉低至少18ms dht11_dq_high;//dq=1 r_bsp_softwaredelay(20, bsp_delay_units_microseconds);//主机拉高20~40us}void dht11_check(){ dht11_io_in();//set input retry=0; r_ioport_pinread(&g_ioport_ctrl, dht11, &p_port_value_dht11); while(p_port_value_dht11&&retry=100)flag=1; else retry=0; while(!p_port_value_dht11&&retry=100)flag=1; if(flag==1) { printf(no dht11\n); r_bsp_softwaredelay(1, bsp_delay_units_seconds); }}void dht11_read_data(){ uint8_t buf[5]; uint8_t i; flag=0; dht11_rst(); dht11_check(); if(flag==0) { for(i=0;i<5;i++)//读取40位数据 { buf[i]=dht11_read_byte(); } if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])//校验读的温湿度结果是否正确 { humi=buf[0]; temp=buf[2]; printf(humi=%d\n,humi); printf(temp=%d\n,temp); } else printf(receive error\n); } r_bsp_softwaredelay(2, bsp_delay_units_seconds);}//从dht11读取一个位 返回值:1/0uint8_t dht11_read_bit(void){ retry=0; while(p_port_value_dht11&&retry<100)//等待变为低电平 { r_ioport_pinread(&g_ioport_ctrl, dht11, &p_port_value_dht11); retry++; r_bsp_softwaredelay(1, bsp_delay_units_microseconds); } retry=0; while(!p_port_value_dht11&&retry<100)//等待变为高电平 { r_ioport_pinread(&g_ioport_ctrl, dht11, &p_port_value_dht11); retry++; r_bsp_softwaredelay(1, bsp_delay_units_microseconds); } r_bsp_softwaredelay(30, bsp_delay_units_microseconds); r_ioport_pinread(&g_ioport_ctrl, dht11, &p_port_value_dht11); if(p_port_value_dht11)return 1; else return 0;}//从dht11读取一个字节 //返回值:读到的数据uint8_t dht11_read_byte(void){ uint8_t i,dat; dat=0; for (i=0;i<8;i++) { dat<<=1; dat|=dht11_read_bit(); } return dat;}
dht11.h 代码:#ifndef _dht11_h_#define _dht11_h_//io方向设置#define dht11_io_in() r_ioport_portdirectionset(&g_ioport_ctrl, bsp_io_port_02, 0<<8, 1<<8)#define dht11_io_out() r_ioport_portdirectionset(&g_ioport_ctrl, bsp_io_port_02, 1<<8, 1
22.结果演示
上图是我们测出来的温湿度,下图是当地温湿度。可以看出还是在误差范围内的。 当我们没有接上dht11时:
TLD2314EL型号LED驱动器的产品介绍
在运放电路设计中如何降低电源噪声?
教你们如何加注汽车空调制冷剂以及注意事项
你要注意了,这些坏习惯将损失听力
KT6368A双模蓝牙芯片功能、参数、应用介绍
瑞萨e2studio----RA2L1通过传感器检测温湿度
区块链是否值得投资?如何确定投资方向?
深度解析雷克萨斯LC500h多级混动系统
中国硬创大赛牵手高交会上演总决赛巅峰对决
Movicon产品案例——热电厂控制监测系统
三星A6s评测 手机的探索没有止境
嵌入式设计软件哪一些功能比较重要
AMETEK程控电源部发布舰载动力测试软件选件
屏下指纹识别原理介绍_屏下指纹识别技术原理分析
微软新款Xbox手柄发布 采用洋红色半透明设计海外定价69.99美元
飞凌嵌入式FET210-A核心板简介
一种以开源FreeRTOS内核为核心的RTOS
蓄电池行业再添巨头,夏普强势杀入
TL431稳压电路内部结构及电压计算
五孔插座如何接线