国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

學(xué)習(xí) stm32 無(wú)線藍(lán)牙模塊HC05配置與應(yīng)用(手機(jī)藍(lán)牙連接發(fā)送參數(shù))

這篇具有很好參考價(jià)值的文章主要介紹了學(xué)習(xí) stm32 無(wú)線藍(lán)牙模塊HC05配置與應(yīng)用(手機(jī)藍(lán)牙連接發(fā)送參數(shù))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

最近學(xué)習(xí)使用HC05 藍(lán)牙模塊進(jìn)行單片機(jī) 連接使用,進(jìn)行手機(jī)端數(shù)據(jù)通信,用到了,和大家分享一下。

HC05 藍(lán)牙模塊介紹

HC05 模塊,是 ALIENTEK 生成的一款高性能主從一體藍(lán)牙串口模塊,可以同各種帶藍(lán)牙功能的電腦、藍(lán)牙主機(jī)、手機(jī)、PDA、PSP 等智能終端配對(duì),該模塊支持非常寬的波特率范圍:4800~1382400,并且模塊兼容 5V 或 3.3V 單片機(jī)系統(tǒng),可以很方便與您的產(chǎn)品進(jìn)行連接。
實(shí)物圖如下(正反兩面)
stm32藍(lán)牙模塊,STM32,HC05藍(lán)牙,stm32,學(xué)習(xí),單片機(jī)
stm32藍(lán)牙模塊,STM32,HC05藍(lán)牙,stm32,學(xué)習(xí),單片機(jī)
接線方式
RXD ----------------->T
TXD ------------------>R
GND ------------------->GND
VCC -------------------->VCC(5v)
EN/KEY ----------------->VCC(3.3v )
配置成功后通信只需要連接4跟線即可(RXD,TXD,GND ,VCC)實(shí)現(xiàn)藍(lán)牙通信

可以直接接線在stm32各類(lèi)型好板子進(jìn)行配置,也可以u(píng)sb 配置如下圖
stm32藍(lán)牙模塊,STM32,HC05藍(lán)牙,stm32,學(xué)習(xí),單片機(jī)

該模塊的使用方式

AT指令操作
藍(lán)牙模塊需要通過(guò)AT指令進(jìn)行模式與連接的設(shè)置,不同型號(hào)的藍(lán)牙模塊它的AT指令也可能會(huì)有差別,如果發(fā)現(xiàn)發(fā)送指令后模塊沒(méi)有回應(yīng),檢查一下AT指令是否發(fā)送正確,是否進(jìn)入命令模式,這里就要查看自己手中的兩個(gè)藍(lán)牙模塊的資料包了,若兩個(gè)藍(lán)牙模塊不同,則它們的配置指令也可能會(huì)不相同,就要用對(duì)應(yīng)的指令配置了。

串口工具示例1(正確返回OK)
stm32藍(lán)牙模塊,STM32,HC05藍(lán)牙,stm32,學(xué)習(xí),單片機(jī)

串口工具示例2
stm32藍(lán)牙模塊,STM32,HC05藍(lán)牙,stm32,學(xué)習(xí),單片機(jī)
stm32藍(lán)牙模塊,STM32,HC05藍(lán)牙,stm32,學(xué)習(xí),單片機(jī)

以上2種串口工具均可以配置
模塊連接
要連接兩個(gè)藍(lán)牙模塊,就相當(dāng)于兩個(gè)藍(lán)牙模塊進(jìn)行配對(duì),也就是兩個(gè)藍(lán)牙設(shè)備進(jìn)行配對(duì),那么應(yīng)該用哪一個(gè)去尋找目標(biāo)對(duì)應(yīng)的藍(lán)牙設(shè)備呢?這里就需要一個(gè)設(shè)備為主機(jī),另一個(gè)設(shè)備則為從機(jī),只能通過(guò)主機(jī)來(lái)尋找從機(jī)進(jìn)行連接配對(duì),從機(jī)只能等待連接,而不能主動(dòng)地尋找設(shè)備進(jìn)行連接。

說(shuō)到主機(jī)與從機(jī),就要看看自己手中的藍(lán)牙模塊是否支持主機(jī)模式了,至少要有一塊主從一體的藍(lán)牙模塊,這里我簡(jiǎn)單直接將HC05 設(shè)置為從機(jī),用手機(jī)去連接進(jìn)行通信。(該模塊支持藍(lán)牙4.0,基本上4G,5G手機(jī)藍(lán)牙已經(jīng)是5.0 了,所以我用老款手機(jī))

我的配置要求
HC05
9600
從機(jī)
1234
配置完成后,即可進(jìn)行藍(lán)牙通訊連接

//------------------------------前面的都是第一步藍(lán)牙的配置,下面開(kāi)始通信編寫(xiě)代碼---------------------------------------------//

通信思路
藍(lán)牙模塊連接串口3,進(jìn)行手機(jī)連接藍(lán)牙發(fā)送內(nèi)容和命令操作

HC05部分

//初始化HC05模塊
//返回值:0,成功;1,失敗.
u8 HC05_Init(void)
{
	u8 retry=10,t;	  		 
	u8 temp=1;
	
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	//使能PORTA
 
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;				 // 端口配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 		 //上拉輸入
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度為50MHz
	GPIO_Init(GPIOA, &GPIO_InitStructure);					 //根據(jù)設(shè)定參數(shù)初始化A15
	 
 
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;				 // 端口配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽輸出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度為50MHz
	GPIO_Init(GPIOA, &GPIO_InitStructure);					 //根據(jù)設(shè)定參數(shù)初始化GPIOA4

	GPIO_SetBits(GPIOA,GPIO_Pin_4);
 	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
	HC05_KEY=1;
	HC05_LED=1; 
	
	USART3_Init(9600);	//初始化串口3為:9600,波特率.
	
	while(retry--)
	{
		HC05_KEY=1;					//KEY置高,進(jìn)入AT模式
		delay_ms(10);
		u3_printf("AT\r\n");		//發(fā)送AT測(cè)試指令
		HC05_KEY=0;					//KEY拉低,退出AT模式
		for(t=0;t<10;t++) 			//最長(zhǎng)等待50ms,來(lái)接收HC05模塊的回應(yīng)
		{
			if(USART3_RX_STA&0X8000)break;
			delay_ms(5);
		}		
		if(USART3_RX_STA&0X8000)	//接收到一次數(shù)據(jù)了
		{
			temp=USART3_RX_STA&0X7FFF;	//得到數(shù)據(jù)長(zhǎng)度
			USART3_RX_STA=0;			 
			if(temp==4&&USART3_RX_BUF[0]=='O'&&USART3_RX_BUF[1]=='K')
			{
				temp=0;//接收到OK響應(yīng)
				break;
			}
		}			    		
	}		    
	if(retry==0)temp=1;	//檢測(cè)失敗
	return temp;	  
}	 
//獲取HC05模塊的角色
//返回值:0,從機(jī);1,主機(jī);0XFF,獲取失敗.							  
u8 HC05_Get_Role(void)
{	 		    
	u8 retry=0X0F;
	u8 temp,t;
	while(retry--)
	{
		HC05_KEY=1;					//KEY置高,進(jìn)入AT模式
		delay_ms(10);
		u3_printf("AT+ROLE?\r\n");	//查詢角色
		for(t=0;t<20;t++) 			//最長(zhǎng)等待200ms,來(lái)接收HC05模塊的回應(yīng)
		{
			delay_ms(10);
			if(USART3_RX_STA&0X8000)break;
		}		
		HC05_KEY=0;					//KEY拉低,退出AT模式
		if(USART3_RX_STA&0X8000)	//接收到一次數(shù)據(jù)了
		{
			temp=USART3_RX_STA&0X7FFF;	//得到數(shù)據(jù)長(zhǎng)度
			USART3_RX_STA=0;			 
			if(temp==13&&USART3_RX_BUF[0]=='+')//接收到正確的應(yīng)答了
			{
				temp=USART3_RX_BUF[6]-'0';//得到主從模式值
				break;
			}
		}		
	}
	if(retry==0)temp=0XFF;//查詢失敗.
	return temp;
} 							   
//HC05設(shè)置命令
//此函數(shù)用于設(shè)置HC05,適用于僅返回OK應(yīng)答的AT指令
//atstr:AT指令串.比如:"AT+RESET"/"AT+UART=9600,0,0"/"AT+ROLE=0"等字符串
//返回值:0,設(shè)置成功;其他,設(shè)置失敗.							  
u8 HC05_Set_Cmd(u8* atstr)
{	 		    
	u8 retry=0X0F;
	u8 temp,t;
	while(retry--)
	{
		HC05_KEY=1;					//KEY置高,進(jìn)入AT模式
		delay_ms(10);
		u3_printf("%s\r\n",atstr);	//發(fā)送AT字符串
		HC05_KEY=0;					//KEY拉低,退出AT模式
		for(t=0;t<20;t++) 			//最長(zhǎng)等待100ms,來(lái)接收HC05模塊的回應(yīng)
		{
			if(USART3_RX_STA&0X8000)break;
			delay_ms(5);
		}		
		if(USART3_RX_STA&0X8000)	//接收到一次數(shù)據(jù)了
		{
			temp=USART3_RX_STA&0X7FFF;	//得到數(shù)據(jù)長(zhǎng)度
			USART3_RX_STA=0;			 
			if(temp==4&&USART3_RX_BUF[0]=='O')//接收到正確的應(yīng)答了
			{			
				temp=0;
				break;			 
			}
		}		
	}
	if(retry==0)temp=0XFF;//設(shè)置失敗.
	return temp;
} 
///
//str:命令串.(這里注意不再需要再輸入回車(chē)符)
void HC05_CFG_CMD(u8 *str)
{					  
	u8 temp;
	u8 t;		  
	HC05_KEY=1;						//KEY置高,進(jìn)入AT模式
	delay_ms(10);
	u3_printf("%s\r\n",(char*)str); //發(fā)送指令
	for(t=0;t<50;t++) 				//最長(zhǎng)等待500ms,來(lái)接收HC05模塊的回應(yīng)
	{
		if(USART3_RX_STA&0X8000)break;
		delay_ms(10);
	}									    
	HC05_KEY=0;						//KEY拉低,退出AT模式
	if(USART3_RX_STA&0X8000)		//接收到一次數(shù)據(jù)了
	{
		temp=USART3_RX_STA&0X7FFF;	//得到數(shù)據(jù)長(zhǎng)度
		USART3_RX_STA=0;
		USART3_RX_BUF[temp]=0;		//加結(jié)束符		 
		printf("\r\n%s",USART3_RX_BUF);//發(fā)送回應(yīng)數(shù)據(jù)到串口1
	} 				 
}

主函數(shù)



//顯示HC05模塊的主從狀態(tài)
void HC05_Role_Show(void)
{
	if(HC05_Get_Role()==1)
	{
		LCD_ShowString(10,140,200,16,16,"ROLE:Master");	//主機(jī)
	}
	else 
	{
		LCD_ShowString(10,140,200,16,16,"ROLE:Slave ");	//從機(jī)
	}
}

//顯示HC05模塊的連接狀態(tài)
void HC05_Sta_Show(void)
{												 
	if(HC05_LED)
	{
		LCD_ShowString(110,140,120,16,16,"STA:Connected ");	//連接成功
	}
	else 
	{
		LCD_ShowString(110,140,120,16,16,"STA:Disconnect");	 			//未連接
	}				 
}


int main()
{
	u8 t=0;
	u8 key;
	u8 sendmask=0;
	u8 sendcnt=0;
	u8 sendbuf[20];	  
	u8 reclen=0; 
	
	SysTick_Init(72);
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中斷優(yōu)先級(jí)分組 分2組
	LED_Init();
	KEY_Init();
	USART1_Init(115200);
	TFTLCD_Init();			//LCD初始化
	
	
	FRONT_COLOR=RED;
	LCD_ShowString(10,10,tftlcd_data.width,tftlcd_data.height,16,"PRECHIN");
	LCD_ShowString(10,30,tftlcd_data.width,tftlcd_data.height,16,"www.prechin.com");
	LCD_ShowString(10,50,tftlcd_data.width,tftlcd_data.height,16,"BT05 BlueTooth Test");
	delay_ms(1000);			//等待藍(lán)牙模塊上電穩(wěn)定
	
	while(HC05_Init()) 		//初始化HC05模塊  
	{
		printf("HC05 Error!\r\n");
		LCD_ShowString(10,90,200,16,16,"HC05 Error!    "); 
		delay_ms(500);
		LCD_ShowString(10,90,200,16,16,"Please Check!!!"); 
		delay_ms(100);
	}
	printf("HC05 OK!\r\n");
	LCD_ShowString(10,90,210,16,16,"KEY_UP:ROLE   KEY1:SEND/STOP");  
	LCD_ShowString(10,110,200,16,16,"HC05 Standby!");  
  	LCD_ShowString(10,160,200,16,16,"Send:");	
	LCD_ShowString(10,180,200,16,16,"Receive:"); 
	
	FRONT_COLOR=BLUE;
	HC05_Role_Show();
	delay_ms(100);
	USART3_RX_STA=0;
 	while(1) 
	{		
		key=KEY_Scan(0);
		if(key==KEY_UP_PRESS)						//切換模塊主從設(shè)置
		{
   			key=HC05_Get_Role();
			if(key!=0XFF)
			{
				key=!key;  					//狀態(tài)取反	   
				if(key==0)HC05_Set_Cmd("AT+ROLE=0");
				else HC05_Set_Cmd("AT+ROLE=1");
				HC05_Role_Show();
				HC05_Set_Cmd("AT+RESET");	//復(fù)位HC05模塊
				delay_ms(200);
			}
		}
		else if(key==KEY1_PRESS)
		{
			sendmask=!sendmask;				//發(fā)送/停止發(fā)送  	 
			if(sendmask==0)LCD_Fill(10+40,160,240,160+16,WHITE);//清除顯示
		}
		else delay_ms(10);	   
		if(t==50)
		{
			if(sendmask)					//定時(shí)發(fā)送
			{
				sprintf((char*)sendbuf,"PREHICN HC05 %d\r\n",sendcnt);
	  			LCD_ShowString(10+40,160,200,16,16,sendbuf);	//顯示發(fā)送數(shù)據(jù)
				printf("%s\r\n",sendbuf);
				u3_printf("PREHICN HC05 %d\r\n",sendcnt);	//發(fā)送到藍(lán)牙模塊
				sendcnt++;
				if(sendcnt>99)sendcnt=0;
			}
			HC05_Sta_Show();  	  
			t=0;
			LED1=!LED1; 	     
		}	  
		if(USART3_RX_STA&0X8000)			//接收到一次數(shù)據(jù)了
		{
			LCD_Fill(10,200,240,320,WHITE);	//清除顯示
 			reclen=USART3_RX_STA&0X7FFF;	//得到數(shù)據(jù)長(zhǎng)度
		  	USART3_RX_BUF[reclen]='\0';	 	//加入結(jié)束符
			printf("reclen=%d\r\n",reclen);
			printf("USART3_RX_BUF=%s\r\n",USART3_RX_BUF);
			if(reclen==10||reclen==11) 		//控制D2檢測(cè)
			{
				if(strcmp((const char*)USART3_RX_BUF,"+LED2 ON\r\n")==0)LED2=0;//打開(kāi)LED2
				if(strcmp((const char*)USART3_RX_BUF,"+LED2 OFF\r\n")==0)LED2=1;//關(guān)閉LED2
			}
 			LCD_ShowString(10,200,209,119,16,USART3_RX_BUF);//顯示接收到的數(shù)據(jù)
 			USART3_RX_STA=0;	 
		}	 															     				   
		t++;	
	}
}

串口1


int fputc(int ch,FILE *p)  //函數(shù)默認(rèn)的,在使用printf函數(shù)時(shí)自動(dòng)調(diào)用
{
	USART_SendData(USART1,(u8)ch);	
	while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
	return ch;
}

//串口1中斷服務(wù)程序
//注意,讀取USARTx->SR能避免莫名其妙的錯(cuò)誤   	
u8 USART1_RX_BUF[USART1_REC_LEN];     //接收緩沖,最大USART_REC_LEN個(gè)字節(jié).
//接收狀態(tài)
//bit15,	接收完成標(biāo)志
//bit14,	接收到0x0d
//bit13~0,	接收到的有效字節(jié)數(shù)目
u16 USART1_RX_STA=0;       //接收狀態(tài)標(biāo)記


/*******************************************************************************
* 函 數(shù) 名         : USART1_Init
* 函數(shù)功能		   : USART1初始化函數(shù)
* 輸    入         : bound:波特率
* 輸    出         : 無(wú)
*******************************************************************************/ 
void USART1_Init(u32 bound)
{
   //GPIO端口設(shè)置
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
 
	
	/*  配置GPIO的模式和IO口 */
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX			   //串口輸出PA9
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;	    //復(fù)用推挽輸出
	GPIO_Init(GPIOA,&GPIO_InitStructure);  /* 初始化串口輸入IO */
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX			 //串口輸入PA10
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;		  //模擬輸入
	GPIO_Init(GPIOA,&GPIO_InitStructure); /* 初始化GPIO */
	

	//USART1 初始化設(shè)置
	USART_InitStructure.USART_BaudRate = bound;//波特率設(shè)置
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字長(zhǎng)為8位數(shù)據(jù)格式
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//一個(gè)停止位
	USART_InitStructure.USART_Parity = USART_Parity_No;//無(wú)奇偶校驗(yàn)位
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無(wú)硬件數(shù)據(jù)流控制
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收發(fā)模式
	USART_Init(USART1, &USART_InitStructure); //初始化串口1
	
	USART_Cmd(USART1, ENABLE);  //使能串口1 
	
	USART_ClearFlag(USART1, USART_FLAG_TC);
		
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//開(kāi)啟相關(guān)中斷

	//Usart1 NVIC 配置
	NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口1中斷通道
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//搶占優(yōu)先級(jí)3
	NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;		//子優(yōu)先級(jí)3
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
	NVIC_Init(&NVIC_InitStructure);	//根據(jù)指定的參數(shù)初始化VIC寄存器、	
}

/*******************************************************************************
* 函 數(shù) 名         : USART1_IRQHandler
* 函數(shù)功能		   : USART1中斷函數(shù)
* 輸    入         : 無(wú)
* 輸    出         : 無(wú)
*******************************************************************************/ 
void USART1_IRQHandler(void)                	//串口1中斷服務(wù)程序
{
	u8 r;
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中斷
	{
		r =USART_ReceiveData(USART1);//(USART1->DR);	//讀取接收到的數(shù)據(jù)
		if((USART1_RX_STA&0x8000)==0)//接收未完成
		{
			if(USART1_RX_STA&0x4000)//接收到了0x0d
			{
				if(r!=0x0a)USART1_RX_STA=0;//接收錯(cuò)誤,重新開(kāi)始
				else USART1_RX_STA|=0x8000;	//接收完成了 
			}
			else //還沒(méi)收到0X0D
			{	
				if(r==0x0d)USART1_RX_STA|=0x4000;
				else
				{
					USART1_RX_BUF[USART1_RX_STA&0X3FFF]=r;
					USART1_RX_STA++;
					if(USART1_RX_STA>(USART1_REC_LEN-1))USART1_RX_STA=0;//接收數(shù)據(jù)錯(cuò)誤,重新開(kāi)始接收	  
				}		 
			}
		}   		 
	} 
}

串口3

//串口接收緩存區(qū) 	
u8 USART3_RX_BUF[USART3_MAX_RECV_LEN]; 				//接收緩沖,最大USART3_MAX_RECV_LEN個(gè)字節(jié).
u8  USART3_TX_BUF[USART3_MAX_SEND_LEN]; 			//發(fā)送緩沖,最大USART3_MAX_SEND_LEN字節(jié)

//通過(guò)判斷接收連續(xù)2個(gè)字符之間的時(shí)間差不大于10ms來(lái)決定是不是一次連續(xù)的數(shù)據(jù).
//如果2個(gè)字符接收間隔超過(guò)10ms,則認(rèn)為不是1次連續(xù)數(shù)據(jù).也就是超過(guò)10ms沒(méi)有接收到
//任何數(shù)據(jù),則表示此次接收完畢.
//接收到的數(shù)據(jù)狀態(tài)
//[15]:0,沒(méi)有接收到數(shù)據(jù);1,接收到了一批數(shù)據(jù).
//[14:0]:接收到的數(shù)據(jù)長(zhǎng)度
vu16 USART3_RX_STA=0;   	


void USART3_IRQHandler(void)
{
	u8 res;	      
	if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到數(shù)據(jù)
	{	 
		res =USART_ReceiveData(USART3);		 
		if((USART3_RX_STA&(1<<15))==0)//接收完的一批數(shù)據(jù),還沒(méi)有被處理,則不再接收其他數(shù)據(jù)
		{ 
			if(USART3_RX_STA<USART3_MAX_RECV_LEN)	//還可以接收數(shù)據(jù)
			{
				TIM_SetCounter(TIM7,0);//計(jì)數(shù)器清空          				//計(jì)數(shù)器清空
				if(USART3_RX_STA==0) 				//使能定時(shí)器7的中斷 
				{
					TIM_Cmd(TIM7,ENABLE);//使能定時(shí)器7
				}
				USART3_RX_BUF[USART3_RX_STA++]=res;	//記錄接收到的值	 
			}else 
			{
				USART3_RX_STA|=1<<15;				//強(qiáng)制標(biāo)記接收完成
			} 
		}
	}  				 											 
}   


//初始化IO 串口3
//pclk1:PCLK1時(shí)鐘頻率(Mhz)
//bound:波特率	  
void USART3_Init(u32 bound)
{  
	NVIC_InitTypeDef NVIC_InitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	// GPIOB時(shí)鐘
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //串口3時(shí)鐘使能

 	USART_DeInit(USART3);  //復(fù)位串口3
	//USART3_TX   PB10
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//復(fù)用推挽輸出
	GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB10
   
    //USART3_RX	  PB11
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入
	GPIO_Init(GPIOB, &GPIO_InitStructure);  //初始化PB11
	
	USART_InitStructure.USART_BaudRate = bound;//波特率一般設(shè)置為9600;
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字長(zhǎng)為8位數(shù)據(jù)格式
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//一個(gè)停止位
	USART_InitStructure.USART_Parity = USART_Parity_No;//無(wú)奇偶校驗(yàn)位
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無(wú)硬件數(shù)據(jù)流控制
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收發(fā)模式
  
	USART_Init(USART3, &USART_InitStructure); //初始化串口	3

	USART_Cmd(USART3, ENABLE);                    //使能串口 
	
	//使能接收中斷
	USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//開(kāi)啟中斷   
	
	//設(shè)置中斷優(yōu)先級(jí)
	NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//搶占優(yōu)先級(jí)3
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		//子優(yōu)先級(jí)3
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
	NVIC_Init(&NVIC_InitStructure);	//根據(jù)指定的參數(shù)初始化VIC寄存器
	
	TIM7_Int_Init(99,7199);		//10ms中斷
	USART3_RX_STA=0;		//清零
	TIM_Cmd(TIM7,DISABLE);			//關(guān)閉定時(shí)器7
}

//串口3,printf 函數(shù)
//確保一次發(fā)送數(shù)據(jù)不超過(guò)USART3_MAX_SEND_LEN字節(jié)
void u3_printf(char* fmt,...)  
{  
	u16 i,j; 
	va_list ap; 
	va_start(ap,fmt);
	vsprintf((char*)USART3_TX_BUF,fmt,ap);
	va_end(ap);
	i=strlen((const char*)USART3_TX_BUF);		//此次發(fā)送數(shù)據(jù)的長(zhǎng)度
	for(j=0;j<i;j++)							//循環(huán)發(fā)送數(shù)據(jù)
	{
		while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循環(huán)發(fā)送,直到發(fā)送完畢   
		USART_SendData(USART3,USART3_TX_BUF[j]); 
	} 
}

 

串口軟件和手機(jī)助手軟件以及PZ-HC05藍(lán)牙模塊開(kāi)發(fā)手冊(cè)–整理好放在百度網(wǎng)盤(pán),請(qǐng)前往下載
鏈接:https://pan.baidu.com/s/1jIcNQIdTpD8tQpnPk052NQ
提取碼:j0nr
–來(lái)自百度網(wǎng)盤(pán)超級(jí)會(huì)員V10的分享

上一節(jié)學(xué)習(xí) stm32(TTL)串口通信控制16路舵機(jī)控制板(維特智能)
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-792651.html

到了這里,關(guān)于學(xué)習(xí) stm32 無(wú)線藍(lán)牙模塊HC05配置與應(yīng)用(手機(jī)藍(lán)牙連接發(fā)送參數(shù))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • HC-05藍(lán)牙模塊與STM32控制led燈亮詳解

    HC-05藍(lán)牙模塊與STM32控制led燈亮詳解

    HC-05模塊是一種基于藍(lán)牙協(xié)議的簡(jiǎn)單無(wú)線通信設(shè)備,共有6個(gè)引腳,其中兩個(gè)引腳通過(guò)stm32的兩個(gè)含TX和RX的接口與之進(jìn)行通信,一般用于無(wú)線控制,智能家居等。 VCC:用于供電 GND:用于供電 TX(發(fā)送):與單片機(jī)某一RX口進(jìn)行通信 RX(接收):與單片機(jī)某一TX口進(jìn)行通信 一句話

    2024年02月08日
    瀏覽(55)
  • STM32系列——手把手教你藍(lán)牙模塊HC05、HC06的使用,重在“用起來(lái)”(HAL庫(kù))

    STM32系列——手把手教你藍(lán)牙模塊HC05、HC06的使用,重在“用起來(lái)”(HAL庫(kù))

    不論是HC05還是HC06,我們用到的都是藍(lán)牙模塊的透?jìng)鞴δ?,只需要用?個(gè)引腳:RXD、TXD、VCC(5V)、GND。 1、HC-05有6個(gè)引腳,但是我們只用到4個(gè)。 2、HC-05正面有一個(gè)按鍵。與HC-06的區(qū)別是, 它上電之前必須要按住此按鍵再插入電腦中,才能夠進(jìn)入AT模式 。HC-06沒(méi)有按鍵,直接

    2024年02月05日
    瀏覽(100)
  • HC-05(ZS-040)藍(lán)牙模塊使用詳情(藍(lán)牙模塊配置、手機(jī)藍(lán)牙控制單片機(jī)、藍(lán)牙與藍(lán)牙之間的通信)含51、32程序

    HC-05(ZS-040)藍(lán)牙模塊使用詳情(藍(lán)牙模塊配置、手機(jī)藍(lán)牙控制單片機(jī)、藍(lán)牙與藍(lán)牙之間的通信)含51、32程序

    HC-05是一款主從一體化的藍(lán)牙模塊,因此其使用起來(lái)比較方便,只需要進(jìn)行簡(jiǎn)單的配置即可。 本文就 手把手的介紹小白入手模塊后如何使用 。 對(duì)于模塊使用:1、藍(lán)牙配置→2、手機(jī)與藍(lán)牙的傳輸→3、手機(jī)通過(guò)藍(lán)牙模塊控制單片機(jī)→4、一對(duì)藍(lán)牙之間主—從傳輸數(shù)據(jù),這是一個(gè)

    2023年04月09日
    瀏覽(400)
  • 【基于stm32】【附代碼】?jī)蓧K藍(lán)牙模塊HC-05進(jìn)行通訊,不占用串口一的代碼教程

    【基于stm32】【附代碼】?jī)蓧K藍(lán)牙模塊HC-05進(jìn)行通訊,不占用串口一的代碼教程

    目錄 前言 一、兩塊hc-05藍(lán)牙通訊的連接 二、使用步驟 1.hc-05從機(jī),該教程主要是應(yīng)用于【收數(shù)據(jù)】 usar.h代碼 usart.c代碼(只引用stm32的串口2,串口一用于燒程序) main.c 2.hc-05主機(jī),該教程主要是應(yīng)用于【發(fā)數(shù)據(jù)】 usar.h代碼 usart.c代碼(只引用stm32的串口2,串口一用于燒程序)

    2024年02月16日
    瀏覽(122)
  • STM32外設(shè)系列—HC-05(藍(lán)牙)

    STM32外設(shè)系列—HC-05(藍(lán)牙)

    ?? 文章作者:二土電子 ?? 關(guān)注文末公眾號(hào)獲取其他資料和工程文件! ?? 期待大家一起學(xué)習(xí)交流! 藍(lán)牙(Bluetooth)是一種無(wú)線技術(shù)標(biāo)準(zhǔn),可實(shí)現(xiàn)固定設(shè)備、移動(dòng)設(shè)備和樓宇個(gè)人域網(wǎng)之間的短距離數(shù)據(jù)交換(使用2.4~2.485GHz的ISM波段的UHF無(wú)線電波)。藍(lán)牙技術(shù)最初由電信巨頭愛(ài)立信

    2024年02月12日
    瀏覽(29)
  • STM32F407+藍(lán)牙HC-05+手機(jī)藍(lán)牙助手

    STM32F407+藍(lán)牙HC-05+手機(jī)藍(lán)牙助手

    突然想試試怎么玩藍(lán)牙模塊,本文演示工程較為簡(jiǎn)單,最后結(jié)果為通過(guò)手機(jī)藍(lán)牙助手控制單片機(jī)上小燈的亮滅。 用到的軟件:STM32CubeMX、Keil、串口調(diào)試助手XCOM 、藍(lán)牙調(diào)試寶(手機(jī)藍(lán)牙調(diào)試助手) 用到的硬件:32單片機(jī)、HC-05藍(lán)牙模塊、USB轉(zhuǎn)TTL模塊 本文在了解如何使用STM32C

    2024年02月02日
    瀏覽(56)
  • HC-05藍(lán)牙模塊學(xué)習(xí)(兩個(gè)藍(lán)牙模塊連接互發(fā)信息)

    HC-05藍(lán)牙模塊學(xué)習(xí)(兩個(gè)藍(lán)牙模塊連接互發(fā)信息)

    目錄 1、進(jìn)入AT模式和連接前注意事項(xiàng) 2、實(shí)現(xiàn)兩個(gè)藍(lán)牙完美配對(duì) 3、HC-05_1初始化配置 4、HC-05_2初始化配置 5、HC-05_1與HC-05_2綁定 6、設(shè)置模塊通信波特率通信驗(yàn)證 USB轉(zhuǎn)TTL(串口助手)和藍(lán)牙模塊連接好后(VCC-VCC GND-GND RXD-TXD TXD-RXD ),插上電腦 進(jìn)入AT模式的兩種方法。 方法一:先按

    2024年02月04日
    瀏覽(106)
  • stm32 之20.HC-06藍(lán)牙模塊

    stm32 之20.HC-06藍(lán)牙模塊

    原理圖顯示使用usart3串口使用的是PB10和PB11引腳 ?直接配置usart3串口協(xié)議 主函數(shù)代碼

    2024年02月11日
    瀏覽(32)
  • STM32--- 藍(lán)牙HC-08 (兩模塊間主從通信)

    STM32--- 藍(lán)牙HC-08 (兩模塊間主從通信)

    1.1? 開(kāi)發(fā)軟硬環(huán)境 芯片型號(hào):STM32F103RCT6 開(kāi)發(fā)軟件:Keil5? (v5.31+AC5,最常用) 代碼用庫(kù):標(biāo)準(zhǔn)固件庫(kù) 藍(lán)牙模塊:HC-08 (匯承家的;? 缺點(diǎn):小貴 ,優(yōu)點(diǎn):pdf+串口助手+APP+小程序,完美) USB轉(zhuǎn)TTL模塊: CH9340C? (Type-C接口,win10可免驅(qū)動(dòng),比CH340和CP2102爽) 1.2? 代碼下載鏈接

    2024年02月03日
    瀏覽(32)
  • 關(guān)于HC05 藍(lán)牙模塊與與藍(lán)牙模塊連接

    關(guān)于HC05 藍(lán)牙模塊與與藍(lán)牙模塊連接

    在通常的電子設(shè)計(jì)中,一般采用藍(lán)牙模塊與上位機(jī)(手機(jī))連接來(lái)與電子設(shè)備通信,實(shí)現(xiàn)對(duì)電子設(shè)備的控制。當(dāng)然也可以通過(guò)WiFi模塊等其他通信模塊進(jìn)行通信。這里就介紹一下藍(lán)牙模塊之間的連接,能夠擺脫上位機(jī),實(shí)現(xiàn)設(shè)備與設(shè)備之間的通信。 藍(lán)牙模塊需要通過(guò)AT指令進(jìn)行

    2024年02月16日
    瀏覽(112)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包