这两天在弄超声波壁障,根据51程序移植到32上,但是每次调试都卡在while(!ECHO); 语句 。 模块是新买的 应该没问题 求助大神如何解决 实在没办法了。
[mw_shl_code=c,true]void bizhang_init(void)
{
RCC->APB2ENR |= 1<<5; //开启GPIOD时钟
GPIOD->CRH &= 0xFFFFFF00;
GPIOD->CRH |= 0x00000043; // PD8 推挽输出(TRIG) PD9 浮空输入 (ECHO)
}
void Triger(void)
{
TRIG=0;
delay_us(10);
TRIG=1;
delay_us(10);
TRIG=0;
}
float calculate_d(void)
{
float d=0;
TIM2->CNT = 0;
while(!ECHO);
TIM2->CR1|=0x01; //使能定时器2
while(ECHO);
TIM2->CR1&=~(0x01); //失能定时器2
d = ( TIM2->CNT / 2000.0) * 340.0 ;
d /= 2.0;
return d;
}
float bizhang(void)
{
float t;
Triger();
t=calculate_d();
return t;
}
void TIM2_Int_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<0; //TIM2时钟使能
TIM2->ARR=arr; //设定计数器自动重装值
TIM2->  SC=psc;
// TIM2->DIER&=~(1<<0); //允许更新中断
// TIM2->CR1|=0x01; //使能定时器2
MY_NVIC_Init(1,3,TIM2_IRQn,2);//抢占1,子优先级3,组2
}
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
uart_init(72,9600); //串口初始化为9600
delay_init(72); //延时初始化
motor_init();
TIM3_PWM_Init(65535,0); //TIM3用于产生电机PWM波
TIM2_Int_Init(65534,35999);
bizhang_init();
   WM_ZKB_LEFT=30000;
   WM_ZKB_RIGHT=30000;
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
while(1)
{
if(bizhang()<0.3)
bizhang_process();
}
}
[/mw_shl_code]
|