想弄一个蓝牙超声波小车,用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了,你可以用仿真器仿真一下这样更容易找到问题。
在定时中断里写那么大一堆...这个习惯不太好,如果不是就当我放屁。