求原子哥和各位大神帮帮忙
写的一个超声波测距程序,但是测不到距离,在void Ultra_Ranging()这个函数里面
while(ECHO_RX) //陷入了死循环 {
delay_us(10);
j++;
//printf("%d\r\n",j);
}
#define TRIG_TX PAout(0)// PA0发送
#define ECHO_RX PAin(2)// PA1返回
float Ultr_S=0; //距离
void Ultra_Init() //超声波模块初始化
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
//PA0(TRIG)推挽输出
GPIOA->CRL&=0XFFFFFFF0;
GPIOA->CRL|=0X00000003;//PA0 通用推挽输出模式50MHz
//PA1(ECHO)浮空输入
GPIOA->CRL&=0XFFFFFF0F;
GPIOA->CRL|=0X00000040;//PA1 浮空输入模式01 输入模式[00]
GPIOA->ODR&=~(1<<1); //PA1 下拉
}
void Start_Ultra()//启动超声波模块
{
TRIG_TX=1;
delay_us(13);
TRIG_TX=0;
}
void Ultra_Ranging() //超声测距
{
u32 j=0;
while(!ECHO_RX);
while(ECHO_RX) //此处陷入死循环 跪求各位大神帮俺看看
{
delay_us(10);
j++;
//printf("%d\r\n",j);
}
Ultr_S=(340/2)*j*10/1000000;
printf("%f\r\n",Ultr_S); //发送给串口显示
}
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化
Ultra_Init();
while(1)
{
printf("超声波测距");
Start_Ultra();
Ultra_Ranging();
}
}
|