基于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就可以了。

  • 11
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用STM32CubeMX进行蓝牙串口通信配置时,首先需要将HC-05蓝牙模块连接到STM32开发板上。在配置完成后,主从两机重新上电,不需要按按键,进入正常模式,此时HC-05指示灯会快闪。等待几秒钟后,主从两机会自动配对完成,指示灯会以5秒的时间间隔闪烁,表示主从两机连接成功。\[1\] 在STM32CubeMX中,需要对STM32进行相应的配置。HC-05蓝牙模块是主从一体的,两个HC-05之间进行通信时,需要进入AT模式,对HC-05模块进行相应的设置。为了进入AT模式,需要通过TTL转USB模块将HC-05蓝牙模块连接到电脑上。在上电之前,需要一直按住HC-05上的按键,然后上电后松开按键,此时指示灯会慢闪,表示进入AT模式。\[2\] 在主函数循环中,可以使用以下代码进行蓝牙串口通信: ```c uint8_t SendBuffer\[30\] = "hello,world!"; HAL_UART_Transmit(&huart2, (uint8_t *)SendBuffer, sizeof(SendBuffer), HAL_MAX_DELAY); ``` 以上代码将"hello,world!"发送到UART2串口,实现了蓝牙串口通信。\[3\] #### 引用[.reference_title] - *1* *2* *3* [基于STM32CubeMX的HC-05蓝牙主从通讯](https://blog.csdn.net/m0_59551305/article/details/126634445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值