STM32--蓝牙

本文主要介绍基于STM32F103C8T6和蓝牙模块实现的交互控制

简介

蓝牙(Bluetooth)是一种用于无线通信的技术标准,允许设备在短距离内进行数据交换和通信。它是由爱立信(Ericsson)公司在1994年推出的,以取代传统的有线连接方式,使设备之间能够实现低功耗、低成本的数据传输和通信。
在这里插入图片描述

蓝牙技术的特点
无线通信:蓝牙允许设备在近距离内(通常是10米左右,具体取决于设备版本)进行通信,无需使用电缆或其他物理连接。
低功耗:蓝牙技术被设计为低功耗的通信方式,这使得它在移动设备上广泛使用,如智能手机、平板电脑、蓝牙耳机等。
多设备连接:蓝牙允许一个主设备(如手机)同时连接多个从设备(如蓝牙耳机、蓝牙音箱等),实现更灵活的数据传输和通信。
通用性:蓝牙技术在许多设备和应用中得到广泛应用,例如无线耳机、键盘、鼠标、汽车蓝牙连接、智能家居设备等。
安全性:蓝牙技术在不断发展和改进中,以提高其安全性,以防止未经授权的访问和数据泄露。
蓝牙技术在不同的版本中有不同的特性和功能,从经典蓝牙(Bluetooth Classic)到低功耗蓝牙(Bluetooth Low Energy,简称BLE),每个版本都针对不同的应用场景和需求。

常见的蓝牙模块
(1)HC-05/HC-06:
HC-05和HC-06是广泛使用的经典蓝牙模块,常用于与单片机(如Arduino)进行无线通信。
它们基于蓝牙2.0标准,支持串口通信(UART)协议,使得与单片机的连接和数据交换相对简单。
HC-05可作为主设备或从设备,支持蓝牙SPP(串口通信)和AT命令模式。
HC-06通常作为从设备,仅支持蓝牙SPP模式。
它们具有基本的通信范围,通常在10米左右。

(2)HM-10/CC2541:
HM-10和CC2541是低功耗蓝牙(BLE)模块,适用于物联网(IoT)设备和传感器网络。
它们基于蓝牙4.0标准,具有低功耗和短距离通信的特点。
它们支持BLE通信协议,如GATT(通用属性配置文件)和ATT(属性协议),用于数据传输和连接管理。
HM-10具有较大的功能集,包括主设备和从设备模式,而CC2541主要作为从设备。
它们通常用于连接和控制传感器、智能家居设备等。

(3)RN42/RN52:
RN42和RN52是经典蓝牙模块,由Microchip(以前是Roving Networks)生产。
它们基于蓝牙2.1+EDR标准,提供了丰富的功能和易于使用的接口。
这些模块支持串口通信(UART)协议,具有较大的通信范围(通常在30米以上)。
它们适用于各种应用,如音频传输、数据通信和蓝牙配对。
RN52还提供了额外的音频功能,如立体声音频传输和音频配置选项。

(4)ESP32:
ESP32是一款强大的Wi-Fi和蓝牙组合模块,由Espressif Systems开发。
它集成了双核处理器、Wi-Fi、蓝牙、低功耗技术和丰富的外设接口。
ESP32支持蓝牙经典和低功耗蓝牙(BLE),具有较大的灵活性和功能性。
它广泛应用于物联网(IoT)应用、嵌入式系统和智能设备开发。

综上,本文主要介绍基于HC-05和STM32F103C8T6的蓝牙无线控制

接线

将HC-05模块的VCC引脚连接到STM32的3.3V电源引脚,GND引脚连接到STM32的地引脚。
将HC-05模块的TXD引脚连接到STM32的一个UART接收引脚(例如USART1_RX),RXD引脚连接到STM32的一个UART发送引脚(例如USART1_TX)。
如果需要进行模块的配置或进入AT命令模式,可以将HC-05模块的EN引脚连接到STM32的一个GPIO引脚,并在代码中控制该引脚的状态。
本示例中管脚连接状态如下所示:

STM32F103C8T6蓝牙模块
VCCVCC
GNDGND
A2RXD
A3TXD

程序示例

串口UART初始化函数

void My_USART2_Init(void)  
{  
    GPIO_InitTypeDef GPIO_InitStrue;  
    USART_InitTypeDef USART_InitStrue;  
    NVIC_InitTypeDef NVIC_InitStrue;  
      
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIO端口使能  
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//串口端口使能  
      
	
	//实际使用的是这俩IO口
    GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;  
    GPIO_InitStrue.GPIO_Pin=GPIO_Pin_2;        //TXD
    GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;  
    GPIO_Init(GPIOA,&GPIO_InitStrue);  
      
    GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;  
    GPIO_InitStrue.GPIO_Pin=GPIO_Pin_3;         //RXD
    GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;  
    GPIO_Init(GPIOA,&GPIO_InitStrue);  
      
    USART_InitStrue.USART_BaudRate=9600;  
    USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;  
    USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;  
    USART_InitStrue.USART_Parity=USART_Parity_No;  
    USART_InitStrue.USART_StopBits=USART_StopBits_1;  
    USART_InitStrue.USART_WordLength=USART_WordLength_8b;  
      
    USART_Init(USART2,&USART_InitStrue);
      
    USART_Cmd(USART2,ENABLE);					//使能串口2  
      
    USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//开启接收中断  
      
    NVIC_InitStrue.NVIC_IRQChannel=USART2_IRQn;  
    NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;  
    NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=0;  
    NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;  
    NVIC_Init(&NVIC_InitStrue);      
}  

主函数中关于蓝牙点灯和关灯的操作函数

   	while(1)
	{		
		if(res=='1')
              {
			   Led_On(LED1);
			  //TIM_SetCompare2(TIM3,175);
			  delay_ms(1000);}
			  
			if(res=='2')
              {
			   Led_Off(LED1);
			  //TIM_SetCompare2(TIM3,180);
				  delay_ms(1000);}			  			
	}

示例效果

首先手机中装的蓝牙APP是如下SPP蓝牙串口助手,可支持命令聊天及键盘模式等
在这里插入图片描述
其中,接收命令是“1”时,LED点亮

if(res=='1')
              {
			   Led_On(LED1);
			  //TIM_SetCompare2(TIM3,175);
			  delay_ms(1000);}

接收命令是“2”时,LED灯灭

if(res=='2')
              {
			   Led_Off(LED1);
			  //TIM_SetCompare2(TIM3,180);
				  delay_ms(1000);}	

具体指令可以在代码中修改,也可以使用键盘模式控制,如下所示:
在这里插入图片描述

附完整资源链接

链接:https://pan.baidu.com/s/1o-lnlWjCYFTDZIvoJBs-iQ
提取码:4wh6

### STM32蓝牙通信教程及实例 #### 蓝牙基础概述 蓝牙技术是一种短距离无线通信标准,广泛应用于消费电子设备之间的小范围数据交换。对于嵌入式开发者而言,理解蓝牙的基本工作原理及其协议栈至关重要[^1]。 #### 硬件准备 为了实现基于STM32蓝牙通信项目,通常需要以下硬件组件: - **STM32微控制器板**:作为核心处理器负责运行程序逻辑。 - **蓝牙模块**:可以选用经典蓝牙或者BLE(Bluetooth Low Energy)模块,具体取决于应用场景需求[^2]。 #### 软件环境搭建 开发前需安装必要的工具链库文件支持整个流程顺利推进: - 安装最新版本的STM32CubeMX用于初始化外设配置并生成初始代码框架; - 配置Keil MDK或其他兼容IDE完成后续编码调试操作; - 如果涉及复杂功能,则可能还需要下载官方提供的中间件包如`STM32Cube Expansion Package for Bluetooth LE`以便简化特定任务处理过程[^3]。 #### 编程实践案例分享 下面给出一段简单的串口转蓝牙透传示例代码片段展示两者间如何交互: ```c #include "stm32f4xx_hal.h" UART_HandleTypeDef huart1; // 假定使用USART1接口发送接收消息 void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_USART1_UART_Init(void); int main(void){ HAL_Init(); SystemClock_Config(); /* 初始化GPIO */ MX_GPIO_Init(); /* 初始化串口 */ MX_USART1_UART_Init(); while (1){ uint8_t data; if(HAL_UART_Receive(&huart1, &data, sizeof(data), HAL_MAX_DELAY)==HAL_OK){ HAL_UART_Transmit(&huart1,&data,sizeof(data),HAL_MAX_DELAY); } } } // 其他辅助函数定义省略... ``` 上述例子展示了通过单片机读取来自外部传感器的数据并通过蓝牙转发出去的过程。 #### 注意事项 当实际动手制作此类产品原型时,请务必注意以下几点建议以提高成功率: - 正确匹配所选蓝牙模组的工作电压等级以免损坏器件; - 查阅对应型号芯片手册确认其资源分配情况从而合理规划电路布局减少干扰现象发生概率; - 测试阶段多尝试不同参数组合找到最优解决方案提升用户体验效果最佳。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

541板哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值