新手入门
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2015-12-21
- 在线时间
- 0 小时
|
5金钱
各位大神,我做的是超声波测距实验,用的芯片是STM32ZET6。超声波模块用的是HC-SR04:接了5V电源。TRig接了PC7脚。ECHO接了PA5脚。
void GetDistanceDelay()
{
//发送触发信号
Trig_SET;
status = 1;
TIM_SetCounter(TIM4, 0);
TIM_Cmd(TIM4, ENABLE);//打开定时器
while(TIM_GetCounter(TIM4) < 11);//延时超过10us
status = 2;
Trig_RESET;
TIM_SetCounter(TIM4, 0);
while(Echo == 0)//等待回向信号起始位置
{
if(TIM_GetCounter(TIM4) > 60000)//回应时间超出正常范围
{
status = 0;
distance_cm = 0;//失败后就后退
TIM_Cmd(TIM4, DISABLE);//关闭定时器
return;//本次失败
}
}
TIM_SetCounter(TIM4, 0);
while(Echo == 1)//开始计算长度
{
int count = TIM_GetCounter(TIM4);
if(count > 60000)//回应时间超出正常范围
{
status = 0;
distance_cm = 0;//失败后就后退
TIM_Cmd(TIM4, DISABLE);//关闭定时器
return;//本次失败
}
}
dis_count = TIM_GetCounter(TIM4);
TIM_Cmd(TIM4, DISABLE);//关闭定时器
distance_cm = (unsigned int)(((long)(dis_count) * 34)/2000);//声速340m/s
status = 0;//准备下次发送
}
用示波器显示可以看出TRig发送了10us的高电平,程序运行可以进入while(Echo==1);但是死在这里出不来了。而且示波器显示低电平好奇怪。求大神帮帮忙,感觉代码逻辑没有问题的。 |
|