stm32 +蓝牙模块+超声波模块

想弄一个蓝牙超声波小车,用hal库写的,但是蓝牙控制小车可以实现,但是加上超声波后就蓝牙失灵了,所以想问问各位有何解决方法

代码部分:
//超声波模块
HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin, GPIO_PIN_SET);
HAL_Delay(20/1000);
HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin, GPIO_PIN_RESET);

    TIM3_Count=0;
    while(HAL_GPIO_ReadPin(Echo_GPIO_Port,Echo_Pin)==0)
  HAL_TIM_Base_Start_IT(&htim3);
    
    while(HAL_GPIO_ReadPin(Echo_GPIO_Port,Echo_Pin)==1);
    HAL_TIM_Base_Stop_IT(&htim3);
   Count=TIM3_Count;
    Distance=ChangeDistance(Count);
    
    if(Distance<=100)
      {
   LED1_RESET();
   mode=04;
      }
    else
        {
        HAL_UART_Receive_IT(&huart1,&RX_dat,1);//启动接收函数
        }        
        HAL_Delay(60);

    
    switch(mode)
    {
        case 01:            __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,100);//右边的轮子    
                                    __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,100);//左边的轮子
                      HAL_UART_Receive_IT(&huart1,&RX_dat,1);//启动接收函数
      break;
      case 02:      __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,0);//右边的轮子    
                                    __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,0);//左边的轮子
                                    HAL_UART_Receive_IT(&huart1,&RX_dat,1);//启动接收函数
        break;
        case 03:     __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,0);//右边的轮子    
                           __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,0);//左边的轮子
                              HAL_UART_Receive_IT(&huart1,&RX_dat,1);//启动接收函数
        break;
        case 04:    __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,80);//右边的轮子    
                  __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,30);//左边的轮子
                    HAL_Delay(2250);
                    __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,80);//左边的轮子
                    HAL_UART_Receive_IT(&huart1,&RX_dat,1);//启动接收函数
        break;
        case  05:   __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,30);//右边的轮子    
                                __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,80);//左边的轮子
                                HAL_Delay(50);
                                 __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,80);//右边的轮子    
                                HAL_UART_Receive_IT(&huart1,&RX_dat,1);//启动接收函数
        break ;
        }

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1)
{
HAL_UART_Receive_IT(&huart1,&RX_dat,1);//启动接收函数
mode=RX_dat;
TIM3_Count=0;
}

}

看着你的程序是测处距离大于100才启动串口接收程序,是不是你测的距离都小于或者等于100了,你可以用仿真器仿真一下这样更容易找到问题。

在定时中断里写那么大一堆...这个习惯不太好,如果不是就当我放屁。