八、蓝牙通讯实验
	
 
通过原理图来看,小车与蓝牙模块的通信应该是通过串口来进行的:
	
 
	
 
所用引脚为PB10和PB11,查芯片手册可以看出是USART3的接收和发送口。
	
 
	
 
所以蓝牙控制的原理就是蓝牙模块接收手机客户端发送的指令,通过串口把规定好的指令发送给mcu,产生串口中断,然后mcu控制电机进行相应的动作。查看相关串口程序,串口的初始化:
void uart3_init(u32 pclk2,u32 bound)
{  	 
	float temp;
	u16 mantissa;
	u16 fraction;	   
	temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
	mantissa=temp;				 //得到整数部分
	fraction=(temp-mantissa)*16; //得到小数部分	 
  mantissa<<=4; mantissa+=fraction; RCC->APB2ENR|=1<<3; //使能PORTB口时钟 RCC->APB1ENR|=1<<18; //使能串口时钟 GPIOB->CRH&=0XFFFF00FF; 
	GPIOB->CRH|=0X00008B00;//IO状态设置
	GPIOB->ODR|=1<<10; RCC->APB1RSTR|=1<<18; //复位串口1 RCC->APB1RSTR&=~(1<<18);//停止复位 //波特率设置 USART3->BRR=mantissa; // 波特率设置	 
	USART3->CR1|=0X200C;  //1位停止,无校验位.
	//使能接收中断
	USART3->CR1|=1<<8; //PE中断使能 USART3->CR1|=1<<5; //接收缓冲区非空中断使能 MY_NVIC_Init(3,3,USART3_IRQn,2);//组2,最低优先级 }
串口的中断程序:
void USART3_IRQHandler(void)
{	
	if(USART3->SR&(1<<5))//接收到数据
	{	  
	 static	int uart_receive=0;//蓝牙接收相关变量
		uart_receive=USART3->DR; 
		if(uart_receive<10)    mode_data[0]=uart_receive;
			if((mode_data[0]==six_data_2[0]
			&&mode_data[1]==six_data_2[1]
			&&mode_data[2]==six_data_2[2]
			&&mode_data[3]==six_data_2[3])
			||(mode_data[0]==six_data_1[0]
			&&mode_data[1]==six_data_1[1]
			&&mode_data[2]==six_data_1[2]
			&&mode_data[3]==six_data_1[3]))
		{	
			Flag_Stop=!Flag_Stop;
			mode_data[0]=0;	mode_data[1]=0;	mode_data[2]=0;	mode_data[3]=0;
		}
		if(uart_receive==0x00)	Flag_Qian=0,Flag_Hou=0,Flag_Left=0,Flag_Right=0;//////////////刹车
		if(uart_receive==0x01)	Flag_Qian=1,Flag_Hou=0,Flag_Left=0,Flag_Right=0;//////////////前
		if(uart_receive==0x05)	Flag_Qian=0,Flag_Hou=1,Flag_Left=0,Flag_Right=0;//////////////后
		else if(uart_receive==0x02||uart_receive==0x03||uart_receive==0x04)	
													Flag_Qian=0,Flag_Hou=0,Flag_Left=0,Flag_Right=1;
		else if(uart_receive==0x06||uart_receive==0x07||uart_receive==0x08)	
													Flag_Qian=0,Flag_Hou=0,Flag_Left=1,Flag_Right=0;
		mode_data[7]=mode_data[6];
		mode_data[6]=mode_data[5];
		mode_data[5]=mode_data[4];
		mode_data[4]=mode_data[3];
		mode_data[3]=mode_data[2];
		mode_data[2]=mode_data[1];
		mode_data[1]=mode_data[0];
	}  											 
} 
	
可以看出,通过蓝牙指令可以修改以下几个值,就可以控制小车做出动作。
Flag_Qian,Flag_Hou,Flag_Left,Flag_Right
	

 
					
				 
			
			
			
						
			 
	 
 
 
 
 
 
	 
	
	 
 
 
 
	 
										 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
	 
	 
 
 
 
	





 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
	 
	 
 
 
 
 
 
			
 
 
	 
 
	 
	 
 
	 
	
	 
	 
	 
		 
		 
	
										 
					
				 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

