基于STM32CUBEMX,HAL库蓝牙通信

 蓝牙通信(实现手机与stm32连接)

1.准备工作

  • 蓝牙模块HC-05模块
  • 安卓APP软件

  • HC-05蓝牙模块支持AT指令。要进入AT指令模式,需要先按住蓝牙模块上的按键,接通电源,当模块上的LED灯进入慢闪后再松开按键,此时已经进入AT指令模式,可以进行AT指令设置1

    常用的AT指令包括:

    AT+VERSION?

    返回HC-05的软件版本号

    AT+NAME?

    返回HC-05的名字

    AT+UART?

    返回蓝牙波特率

    AT+UART=115200,0,0

    设置串口波特率115200,1位停止位,无校验位

    AT+NAME=bluetooth

    修改蓝牙模块的名字为bluetooth

    AT+PSWD?

    查询配对密码

    AT+PSWD=”1234”

    设置密码1234

    AT+ROLE?

    查询主从状态,=1:设置成主,=0:设置成从,=2:设置成回环

    AT+ROLE=0

    设置成从

    AT+ORGL

    恢复出厂默认设置。

    2.stm32cubemx设置

    设置和串口一样,因为需要用到中断,所以我们需要打开中断。

    我们打开2个串口。UART5连接蓝牙模块。

    3.keil代码

    基础配置一下

    usart.c下

    /* USER CODE BEGIN 1 */
    char Buff[255];//存储数据
    uint8_t Data;	//暂存数据
    int Cnt = 0;	//计数
    
    void  HAL_UART_RxCpltCallback(UART_HandleTypeDef  *huart)
    {
        if(huart ==&huart5)
        {
          
    			Buff[Cnt++] = (char)Data;
    			if(Buff[Cnt-1] == 0x0A && Buff[Cnt-2] == 0x0D)//判断是否为回车结尾  
    			{
    			
    							if(Buff[Cnt-3] == 0x01)
    							{
    								flag = 1;
    							}
    							if(Buff[Cnt-3] == 0x02)
    							{
    								flag = 2;
    							}
    							if(Buff[Cnt-3] == 0x03)
    							{
    								flag = 3;
    							}
    							if(Buff[Cnt-3] == 0x04)
    							{
    								flag = 4;
    							}
    							if(Buff[Cnt-3] == 0x05)
    							{
    								flag = 5;
    							}							
     							if(Buff[Cnt-3] == 0x06)
    							{
    								flag = 6;
    							}
    			}							
            HAL_UART_Receive_IT(&huart5,(uint8_t *)&Data,sizeof(Data));
        }
    }
    
    
    ///重定向c库函数printf到串口DEBUG_USART,重定向后可使用printf函数
    int fputc(int ch, FILE *f)
    {
    	/* 发送一个字节数据到串口DEBUG_USART */
    	HAL_UART_Transmit(&huart5, (uint8_t *)&ch, 1, 1000);	
    	
    	return (ch);
    }
    /* USER CODE END 1 */

     usart.h

    /* USER CODE BEGIN Includes */
    #include <stdio.h>
    /* USER CODE END Includes */
    
    /* USER CODE BEGIN Private defines */
    extern char Buff[255];//存储数据
    extern uint8_t Data;	//暂存数据
    extern int Cnt;	//计数
    extern int flag;
    /* USER CODE END Private defines */
    

     main.c

    /* USER CODE BEGIN PTD */
    	int flag;
    /* USER CODE END PTD */
    
      /* USER CODE BEGIN 2 */
      HAL_UART_Receive_IT(&huart5,(uint8_t *)&Data,sizeof(Data));
      /* USER CODE END 2 */
    
      /* USER CODE BEGIN WHILE */
      while (1)
      {
    	      switch(flag)    
        		 {
        		 case(1):
    				 printf("1");
    			 break;
        		 case(2):
    				 printf("2");
    			 break;
        		 case(3):
    				 printf("3");
    			 break;
        		 case(4):
    				 printf("4");
    			 break;
        		 case(5):
    				 printf("5");
    			 break;
    			 case(6):
    				 printf("6");
    			 break;
        		 default:
    				 printf("0");
    				 break;
        		 } 
    			 HAL_Delay(1000);
        /* USER CODE END WHILE */

     

    4.实验现象

    发送01 0D 0A(0D 0A是两个ASCII码,分别代表回车(CR)和换行(LF))

    发送02 0D 0A

    如果需要在电脑上显示,我们把发送给手机的端口huart5改成huart1就可以了。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 基于STM32CUBEMX,HAL库蓝牙通信

    发表回复