STM32CubeMX(2)——串口实现HC-05蓝牙模块与手机通信

使用的蓝牙

本文使用的蓝牙是市面上常用的HC-05蓝牙模块
在这里插入图片描述
其引脚和STM32的连接为

蓝牙模块单片机
RXDTX
TXDRX
VCC5V
GNDGND

STM32Cubemax配置

前面配置时钟树的基础操作就不演示了

配置串口通信,注意波特率要选择9600,一般出厂的HC-05的默认与单片机通信波特率为9600
在这里插入图片描述
我这里还开启了DMA,方便测试蓝牙的接收功能
在这里插入图片描述
然后直接生成工程就ok了

手机连接蓝牙

若正常连接上电时,蓝牙模块会有红灯快闪,表示未连接。
手机使用蓝牙调试助手,可以自行在商店下载,然后可以看到出现蓝牙HC-05的名称(默认名称是蓝牙HC-05)

在这里插入图片描述
选择连接后,若成功连接,蓝牙模块的红灯会变成一秒两闪,表示连接成功

代码编写

重写printf函数,方便发送

//记得包含stdio的头文件
int fputc(int c,FILE *stream)  
{
		HAL_UART_Transmit(&huart2,(unsigned char *)&c,1,1000);
		return 1;
}

在main函数中发送数据

printf("this is a test\n");

在这里插入图片描述
手机端接收成功
————————————
现在用手机通过蓝牙助手向单片机发送信息,在这里单片机接收的主要采用DMA接收,并且采用的是空闲中断的方法,满足日常使用接收不定长数据,不想使用DMA也可以使用普通的串口接收实现定长接收,或者采用一定技巧,使用串口实现不定长接收。

HAL_UART_Receive(&huart2, RxBuffer, 1,0xffff);		//实现单个字节的接收

DMA的处理。简单的代码如下
编写代码前,还有些DMA的cubemax配置,详细看这篇文章
STM32 Cubemax(四) —— STM32利用DMA空闲中断与Openmv通信

1.加入DMA初始化

__HAL_UART_ENABLE_IT(&huart2,UART_IT_IDLE);  
HAL_UART_Receive_DMA(&huart2,RxBuffer,RXBUFFER_LEN); 

——————————————————————————————————
2.编写中断函数

void USART2_IRQHandler(void)
{
  /* USER CODE BEGIN USART2_IRQn 0 */
	//DMA处理
	uint32_t temp_flag = 0;
	uint32_t temp;
	temp_flag = __HAL_UART_GET_FLAG(&huart2,UART_FLAG_IDLE);
	if((temp_flag!=RESET))
	{
			__HAL_UART_CLEAR_IDLEFLAG(&huart2);
			temp = huart2.Instance->SR;   //通过读取清除标志位
			temp = huart2.Instance->DR;   //读取数据寄存器中的数据
			HAL_UART_DMAStop(&huart2);    //防止中途冲突
			temp = hdma_usart2_rx.Instance->NDTR;  //获取未读取的数据个数
			//F1的板子使用temp = hdma_usart2_rx.Instance->CNDTR;  //获取未读取的数据个数
			Rx_len = RXBUFFER_LEN-temp;  //总共读取了多少个数
			RX_flag = 1;   //完成标志
	}
	HAL_UART_Receive_DMA(&huart2,RxBuffer,RXBUFFER_LEN);//重新开启DMA接收
  /* USER CODE END USART2_IRQn 0 */
  HAL_UART_IRQHandler(&huart2);
  /* USER CODE BEGIN USART2_IRQn 1 */

  /* USER CODE END USART2_IRQn 1 */
}

通过判断RX_flag进行接收处理,这里是去判断接收到的个数和具体内容,并且返回给手机进行通信
下面这个函数别忘了在main.c的while(1)里使用!!
————————————————————————————

void Check_Rx()
{
		if(RX_flag == 1)   //如果完全接收了
		{
				printf("Rx_len = %d\n",Rx_len);
				printf("I got the message %s",RxBuffer);
				for(uint8_t i=0;i<Rx_len;i++)  //清空buffer
				{
						RxBuffer[i] = 0;
				}
				Rx_len=0;
				RX_flag = 0;
		}
}

结果如下
在这里插入图片描述

总结

HC-05是常用的蓝牙模块,使用起来还是非常简单的,但唯一的问题的是,HC-05不能做到一个蓝牙与多个设备同时通信的效果

具体代码链接:代码仓库链接

### 回答1: STM32 CubeMX是一款用于STM32微控制器的图形化配置工具,可以帮助开发者快速生成初始化代码和驱动程序。而HC-05蓝牙模块是一种常用的串口蓝牙模块,可以实现无线通信功能。在使用STM32 CubeMX开发蓝牙应用时,可以通过配置串口蓝牙模块的参数,实现HC-05蓝牙模块通信。 ### 回答2: STM32 CubeMX是一款支持STMicroelectronics(意法半导体)的ARM Cortex-M微控制器的图形化配置工具。它可用于快速配置STM32微控制器并生成启动代码。它减少了移植工作的时间和工作量,同时大大提高了系统开发的效率。HC-05蓝牙模块是一种协议为蓝牙串口的模块。它是便宜而易用的,因为它的价格低廉,因此得到了广泛的应用。那么,STM32 CubeMX HC-05蓝牙模块如何结合使用呢? 在使用STM32 CubeMX HC-05蓝牙模块之前,我们需要做的第一件事是将HC-05模块进行匹配。一旦成功匹配,我们可以获取HC-05模块的名称和地址。然后,我们可以将HC-05模块连接到STM32微控制器上,以实现通信和数据传输。 在STM32 CubeMX软件中,我们需要按照以下步骤进行操作: 1.选择特定的STM32微控制器。 2.选择通信接口和协议,例如USART或SPI。 3.配置USART或SPI参数,例如波特率和数据位数。 4.配置GPIO引脚,以实现HC-05模块的连接。 5.生成启动代码,并将其导入到STM32微控制器的工程中。 6.编写应用程序代码,以实现HC-05模块进行通信。 总之,在使用STM32 CubeMX HC-05蓝牙模块的过程中,我们需要了解STM32微控制器的基本知识,例如GPIO引脚和USART或SPI通信协议等。同时还要了解HC-05蓝牙模块的基本功能和配置方法。通过对这些知识的了解和使用,我们可以轻松地实现HC-05模块与STM32微控制器之间的通信和数据传输。 ### 回答3: STM32 CubeMX是STMicroelectronics公司推出的一款专门为STM32微控制器设计的快速开发工具。它可以自动生成C代码,并提供GUI配置界面,使得开发人员可以快速地进行项目开发,大大提高了开发效率。 在STM32 CubeMX中集成HC-05蓝牙模块,可以使得开发人员更加方便地进行蓝牙应用的开发。HC-05蓝牙模块是一种成熟的低成本蓝牙模块,支持蓝牙2.0和蓝牙4.0,使用起来非常简单。将HC-05蓝牙模块STM32微控制器集成,可以构建各种应用,例如:手机蓝牙遥控车、远程控制等。 在集成HC-05蓝牙模块时,首先需要在STM32 CubeMX中配置串口蓝牙模块之间的连接。具体步骤如下: 1. 打开STM32 CubeMX,选择需要使用的STM32微控制器型号。 2. 选择串口(USART),使其与蓝牙模块进行通信。根据HC-05蓝牙模块的数据手册,HC-05的TX接口需要连接STM32微控制器的RX接口,而HC-05的RX接口需要连接STM32微控制器的TX接口。因此,在配置串口时,需要将串口的TX引脚与STM32微控制器的RX引脚连接,将串口的RX引脚与STM32微控制器的TX引脚连接。 3. 在串口中配置波特率、数据位、停止位、奇偶校验等参数。 4. 将配置好的代码生成到Keil或者其他编辑器中,编写应用程序,实现HC-05蓝牙模块通信。 需要注意的是,由于HC-05蓝牙模块是基于串口通信的,因此在使用过程中需要注意串口通信细节,例如波特率、数据位、停止位、奇偶校验等参数的设置,否则将会出现通信错误。 总的来说,在STM32 CubeMX中集成HC-05蓝牙模块,可以有效地提高开发效率,快速构建各种蓝牙应用。
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzzzzzzm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值