引脚: VCC GND Trig(连接stm32,32向它输出高电平激活超声波模块工作) , Echo(接收到碰到障碍物反弹之后的超声波后向32输出高电平);
- Vcc:+5V电源供电
- Trig:输入触发信号(可以触发测距)
- Echo:传出信号回响(可以传回时间差)
- Gnd : 接地
采用GPIO通信:
2^16毫秒一次溢出 ,记录溢出次数STA ,高电平时间VAL ,声音空气中传到速度340m/s ;
定时器计时过程中捕获到一次上升沿一次下降沿用时2^16us发生一次溢出,最后一次计数可能只会捕捉到上升沿然后停止,这时把高电平的时间记录在VAL中;
总时间 = STA * 2^16us + VAL;
测得距离 = ( 340m/s * 总时间 )/ 2 ; (由于超声波发出后碰到障碍物后又回来,走了两个距离所以要÷2)(注意单位换算);
u32 DIS_Get()//定义计算距离函数
{
u32 temp;
u32 lenth = 0;
if(TIM2CH1_CAPTURE_STA&0X80)//成功捕获到了一次高电平
{
temp=TIM2CH1_CAPTURE_STA&0X3F; //溢出次数
temp*=65536; //溢出时间总和(65535(us(单位为毫秒)) = 0xffff)
temp+=TIM2CH1_CAPTURE_VAL; //得到总的高电平时间
lenth=temp*0.017; //计算长度(cm)
TIM2CH1_CAPTURE_STA=0; //开启下一次捕获
delay_ms (100);
}
if(lenth>=100000)
{
lenth=0;
}
return lenth;
}