传感器介绍:单工和半双工上拉电阻用于提供电流,下拉电阻用于均流。传感器的串行接口用于发送和接收数据。介绍了传感器的读写时序。智能终端在感知层。如果你想感知和收集数据,你必须使用传感器。市面上有很多检测气体的传感器。
传感器1。用于串行和并行端口的传感器单工和半双工上拉电阻简介:用于电源电流的下拉电阻:用于均流2。DHT11传感器串行接口的数据接收与发送DHT11的读写时序分析。
1.传感器简介智能终端在感知层,所以要想感知采集到的数据,就必须使用传感器。
市面上有很多传感器:检测气体的温度和湿度,稀有气体(CoCoO2甲醛乙醇甲烷…)的含量,检测液体的温度和PH值,检测固体的湿度元素含量,检测人体的温度、血压、心率、血糖…
传感器的接口有很多:GPIO接口、串行接口(USART/UART IIC IIS SPI …)和并行接口。
数字传感器和模拟传感器
传感器可以分为采集型、接口型、采集数据型等多种类型。
串口和并口串口:串行接口或串行通信接口|串行通信接口是指数据以串行方式传输(即数据按位传输)并口:并行接口或并行通信接口|并行通信接口是指数据以并行方式传输(即数据按多位传输)。注意:并不是说并口可以一次发送多个位的数据,是说并口比串口通讯快。其实恰恰相反,串口的通信速度比并口快,有很多限制(数据线之间会有电平干扰,需要同时收发)。
单工和半双工单工模式a –> --->–b半双工模式a –> ------
稍微…
上拉电阻:用于提供电流。
下拉电阻:用于均流。
2.DHT11传感器
从手册中了解DHT11传感器:
用于采集温湿度的传感器以4针封装的形式采集数字量:湿度:20% - 90%(误差:5%),温度:0℃±-50℃(误差:2℃),分辨率:1(指采集的准确度)连接方式:一针接电源,一针接另一针。a . pin-floating(NC)串行接口:指串行方式的数据传输,单线双向(半双工工作模式):指串行接口的工作模式,单工模式、半双工模式和全双工模式,完整的数据传输为40bit。8位湿度整数数据+8位湿度小数数据+8位温度整数数据+8位温度小数数据+当数据传输正确时,校验和数据等于结果“8位湿度整数数据+8位湿度小数数据+8位温度小数数据”的后8位。软件有软件协议,硬件也有硬件协议:硬件协议就是读写时序,读写时序是政府定义的一个例子:DHT11生产的时候,官方已经定义了一套读写时序,MCU要和DHT11交互,MCU需要遵守DHT11的读写时序分析。DHT11的读写时序串行接口需要以高位先出的方式传输形式参数C中存储的8位二进制数据。假设MCU与PC9引脚相连,可以使用该位带发送数据PCOut(9)接收数据PCIn(9)。数据线低电平代表数据0,数据线高电平代表数据1。
/*发送数据*/void func(u8c)//10111110 { u8i = 0;//循环变量for(I = 0;I u8 c = 0;//用于接收数据的变量u8i = 0;//循环变量for(I = 0;i GPIO _ InitTypeDef Gpio _ Value//定义变量GPIO _ value。gpio初始化结构类型的gpio _ mode = gpio _ mode _ out _ pp//选择推挽输出模式gpio _ value。gpio _ pin = gpio _ pin _ 10//引脚10 gpio _ value。选择gpio _ speed = gpio _ speed _ 50mhz//选择输出速率为50MHz的GPIO_Init(GPIOC,& GPIO _ Value);//根据上述配置初始化pin } void set _ DHT _ input(void)//GPIOC组内部函数,将PC10引脚配置为输入模式{ GPIO _ InitTypeDef Gpio _ Value//定义变量GPIO _ value。gpio初始化结构类型的gpio _ mode = gpio _ mode _ in _ floating;//浮点输入模式gpio _ value。选择gpio _ pin = gpio _ pin _ 10//选择第10针GPIO_Init(GPIOC,& GPIO _ Value);//根据上述配置初始化GPIOC组的pin } void DHT _ output _ status(int n){ set _ DHT _ output();//首先将PC10管脚初始化为输出模式,如果(n = = 0)PC out(10)= 0;elsePCOut(10)= 1;} int DHT _ input _ status(void){ set _ DHT _ input();//首先将PC10引脚初始化为输入模式返回PCIn(10);}void dht_init(void)//DHT11初始化{ RCC _ AP B2 periphclock cmd(RCC _ AP B2 PERIPH _ GPIOC,enable);//通过APB2总线使能GPIOC组的时钟} void Get _ DHT _ value(char buf[5])//获取DHT11传感器采集的数据{ u8 flag = 0;//该变量用于获取PC10引脚的电平u8 time = 0;//该变量用于统计DHT _ output _ status(1);//拉高PC10引脚DHT _ output _ status(0);//将PC10引脚下拉delay _ ms(20);//delay 20 msdht _ output _ status(1);//将PC10引脚拉高//while(DHT _ input _ status());//等待PC10引脚以死方式拉低{ flag = DHT _ input _ status();//获取PC10引脚delay_us(2)的电平;//Delay 2us time++;//计数自增}while(flag == 1 && time 20)//判断是否超时返回;//结束程序,同时(!DHT _ input _ status());//等待PC10引脚被拉高/*开始接收40位数据*///...............}
评论前必须登录!
注册