一、超声波
1、超声波传感器
产品特点:
HC-SR04 超声波测距模块可提供 2cm-400cm 的非接触式距离感测功能, 测距精度可达高到 3mm;模块包括超声波发射器、接收器与控制电路.
工作原理:
(1)采用 IO 口 TRIG 触发测距,给最少 10us 的高电平信号。
(2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
(3)有信号返回, 通过 IO 口 ECHO 输出一个高电平, 高电平持续的时间就是超声
波从发射到返回的时间。 测量距离=(高电平时间*声速(340M/S))/2;
2、超声波引脚说明
触发信号输入:TRIG(STM32做输出 超声波做输入)
回响信号输出:ECHO(STM32做输入 超声波做输出)
3、超声波框架分析
时序图
测量距离=(高电平时间*声速(340M/S))/2
超声波测量距离步骤
a.STM32发送启动信号
b.测ECHO的高电平持续时间
c.通过公式计算测量距离
4、超声波代码编写思路
1、 先找两个引脚,连接超声波, PA2 – TRIG(触发信号) PA3 – ECHO(回响信号), 并初始化
PA2做为普通输出
PA3做为普通输入
2、 设置定时器3,计一个数用时1us, 可计最大数为50000,且不用中断(不用设置NVIC)
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
//1、能定时器时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseInitStruct.TIM_Prescaler = 84-1; // 84分频 84MHZ/84 = 1MHZ
TIM_TimeBaseInitStruct.TIM_Period = 50000-1; //(其实计不到这么多数) TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数
TIM_TimeBaseInitStruct.TIM_ClockDivision= TIM_CKD_DIV1; // 分频因子
//2、初始化定时器,配置ARR,PSC
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);
//5,不使能定时器
TIM_Cmd(TIM3, DISABLE);
3、 根据下面代码框架,完成距离测量
//PA2输出低电平
delay_us(8);
//PA2输出高电平
delay_us(20); //至少10us
//PA2输出低电平
//设置定时器的CNT为0 TIM3->CNT = 0
//PA3等待高电平到来,参考按键松开代码 while( 读电平 == 0 );
//使能定时器开始计数
//PA3等待低电平到来,while( 读电平 == 1);
//获取定时器CNT值,从而得到高电平持续时间 temp = TIM3->CNT;
//关闭定时器
//通过公式计算出超声波测量距离
下面是整个工程的源码
https://download.csdn.net/download/m0_63622771/90835726
二、DHT11(温湿传感器)
1、DHT11概述
VCC -- 电源正极
DATA -- 数据传输线
NC -- 无连接
GND -- 电源地
2、串行接口 (单线双向)
DATA线用于微处理器与 DHT11之间的通讯,采用单总线数据格式,一次通讯时间(数据传输)4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程如下:
一次完整的数据传输为40bit(5个字节, DHT11向MCU传40位数据),高位先出。
高位先出:
假设传感发送的数据: 1 1 1 0 1 0 1 0 (先出来左边数据)
合成字节:0 1 0 1 0 1 1 1 (低位先出),比较少见,红外接受器有这样的情况
合成字节: 1 1 1 0 1 0 1 0 (高位先出)
数据格式:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据
+8bit校验和
数据传送正确时校验和数据=8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据
3、启动信号
总得来讲,STM32先发送启动信号,DHT11回发响应信号,然后DH11再连续发送40位数据(8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和)