手机上网站,个人智慧团建网站,短视频营销是什么意思,陕西省建设网三类人员官网HC-SR04介绍 
典型工作电压#xff1a;5v        #xff08;如果你的超声波模块没有工作#xff0c;可以看一下是不是电压不够#xff09;超小静态工作电流#xff1a;2mA  感应角度#xff1a;15           #xff08;超声波模块#xff0c;是一个范围式的探…HC-SR04介绍 
典型工作电压5v        如果你的超声波模块没有工作可以看一下是不是电压不够超小静态工作电流2mA  感应角度15°           超声波模块是一个范围式的探索所以在做测速等一些适合直线传播的项目的时候不建议使用超声波模块探测距离2cm-400cm高精度可以达到0.3cm盲区2cm              当物体和超声波模块的距离小于2cm超声波模块失效 
工作原理 
采用IO触发测距给至少10us的高电平。模块自动发送8个4kHz的方波自动检测是否有信号返回。有信号返回通过IO输出一高电平高电平的持续时间就是超声波从发射到返回的时间 
测试距离高电平时间*声速/2 
因为声音会来回两段所以要除以二声速我们一般取340m/s 接口定义 
VccTrig控制端Echo接收端GND 向Trig发送10us以上的高电平就可以在Echo等待高电平输出一有输出就可以打开定时器计时当Echo变为低电平时就可以读定时器的值此时就为此次测距的时间就可以算出距离不断周期性的测量就可以达到你移动测量的值。 
思路 
IO输出》TrigIO输入《Echo给Trig管脚一个10us的高电平启动启动后Echo开启计时器计数等待检验进入while(Echo1)当Echo不等于高电平的啥时候结束while关掉计时器。设开启定时器时间为T1关闭定时器时间为T2所得时间T即等于T2-T1所以测距距离即为(T2-T1)*340/2 
代码 
配置Echo和Trig 
void Echo_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin  GPIO_Pin_8;GPIO_InitStructure.GPIO_Speed  GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode  GPIO_Mode_Out_PP;GPIO_Init(GPIOA, GPIO_InitStructure);
}
void Trig_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin  GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed  GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode  GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, GPIO_InitStructure);
}	 
然后配置TIM2 
void TIM2_Count_Configuration(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);TIM_TimeBaseStructure.TIM_Period  0xFFFF;  TIM_TimeBaseStructure.TIM_Prescaler  71;  TIM_TimeBaseStructure.TIM_CounterMode  TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure);TIM_Cmd(TIM2, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, DISABLE);
} 
在define几个等下用到的函数 
#define TRIG_H GPIO_WriteBit(GPIOA,GPIO_Pin_9,Bit_SET)
#define TRIG_L GPIO_WriteBit(GPIOA,GPIO_Pin_9,Bit_RESET)#define ECHO GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)main 
int main(void)
{unsigned int time  0;float distance  0.00;void Echo_Configuration();void Trig_Configuration();void TIM2_Count_Configuration();RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);while(1){TIM_Cmd(TIM2,ENABLE);TRIG_H;Delay_us(15);TRIG_L;while(ECHO  0);TIM_SetCounter(TIM2,0);while(ECHO  1);TIM_Cmd(TIM2,DISABLE);time  TIM_GetCounter(TIM2);distance  time * 0.017;printf(Distance  %.2fcm\n, distance);Delay_us(1000000);}
} 
配置EchoTrig和TIM2使能RCC_APB1Periph_TIM2TIM_Cmd(TIM2,ENABLE)      使能TIM2TRIG_H 给TRIG高电平等待15usTRIG_L给TRIG低电平while(ECHO0)     如果ECHO为低电平就复位TIM2为0while(ECHO1)     如果ECHO为高电平TIM_Cmd(TIM2,DISABLE);关闭TIM2time  TIM_GetCounter(TIM2);记录时间为time计算距离distance  time * 0.017;