基于HC-05的蓝牙透传(附stm32f103程序)

本文详细介绍了蓝牙透传的概念和特点,强调其数据透明传输、无丢失和双向通信的优势。接着,重点讲解了HC-05蓝牙模块的特性,包括电压范围、波特率、工作距离等,并阐述了其工作原理。此外,还提供了HC-05模块进入AT指令模式的方法以及STM32F103单片机与蓝牙模块的连接和程序烧录步骤。最后,提到了手机端通过BluetoothSerial应用程序进行调试的方法。
摘要由CSDN通过智能技术生成

一.什么是蓝牙透传?

     透传是最简单也是最常见的通讯方式(如下图所示),透传也叫串口透传,就是透明传输的意思,透传是一种工作方式,不是一种功能,一般出现在串口模式中,蓝牙透传的存在是为了让用户更好的开发蓝牙无线产品,不需要关心蓝牙协议栈是如何实现。串口模块具体的工作机制就是不对MCU要传输的数据做任何处理,也不需要自己增加什么协议。

 特点:

(1).这个过程数据不用处理;

(2).不会丢失数据;

(3).双向传输;

(4).透传的数据包没有协议封装,自己可以控制数据包的大小;

(5).无需了解复杂的蓝牙底层协议,只要简单几步设置就可以实现蓝牙透传。

二.HC-05蓝牙模块

                                                                             

 特点:

(1)输入电压:3.6--6v,禁止超过7v

(2)波特率为1200,2400,4800,9600,19200,38400,57600,115200 用户可以自己设置。

(3)工作范围:最大10米。

(4)工作原理

           HC-05通过TX和RX引脚,支持使用标准AT命令。为此,用户必须使用在设备启动时进入特殊命令模式,这时通过在打开模块时将钥匙销拉低来完成。否则,设备将启动进入数据模式,这样它就可以与其它设备进行无线通信,

          模块启动后,任何蓝牙设备(例如智能手机)都应该可以发现他。然后,可以使用标准密码(1234)连接到设备。建立连接后,数据通过HC-05传输并转换为串行流。然后由模块连接的微控制器读取该串行流。

   三.HC-05蓝牙模块透传模式的调试

(1).连接USB转TTL模式(注意TX连接RX,RX连接TX)

( 2).进入AT指令模式

进入命令相应模式,先长按HC05上的按键(按键如图所示),再上电(此时指示灯慢闪,大约1秒一次)即成功进入AT指令命令响应模式。这时打开串口助手,可以进行AT指令交互,设置相应参数

1.通讯波特率、校验位、停止位。

2.工作模式(主、从、回环)

3.连接密码、名字

 

               AT指令集。链接:https://pan.baidu.com/s/19Py4Y_qCsRM-k9sdDX4exA 
        提取码:yyds 
(3)stm32f103蓝牙 手机数据收发

1.连线

   HC05与stm32f103单片机的连线与串口通信相似,

VCC-VCC,

GND-GND,

TX-RX,

RX-TX.

2.程序烧入

部分代码:

usart.c

#include "sys.h"
#include "usart.h"	  
// 	 
//如果使用ucos,则包括下面的头文件即可.
#if SYSTEM_SUPPORT_OS
#include "includes.h"					//ucos 使用	  
#endif
//	 

//
//加入以下代码,支持printf函数,而不需要选择use MicroLIB	  
#if 1
#pragma import(__use_no_semihosting)             
//标准库需要的支持函数                 
struct __FILE 
{ 
	int handle; 

}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
_sys_exit(int x) 
{ 
	x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{      
	while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch;      
	return ch;
}
#endif 

 
 
#if EN_USART1_RX   //如果使能了接收
//串口1中断服务程序
//注意,读取USARTx->SR能避免莫名其妙的错误   	
u8 USART_RX_BUF[USART_REC_LEN];     //接收缓冲,最大USART_REC_LEN个字节.
//接收状态
//bit15,	接收完成标志
//bit14,	接收到0x0d
//bit13~0,	接收到的有效字节数目
u16 USART_RX_STA=0;       //接收状态标记	  
  
void uart_init(u32 bound){
  //GPIO端口设置
  GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);	//使能USART1,GPIOA时钟
  
	//USART1_TX   GPIOA.9
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
   
  //USART1_RX	  GPIOA.10初始化
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10  

  //Usart1 NVIC 配置
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		//子优先级3
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
	NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器
  
   //USART 初始化设置

	USART_InitStructure.USART_BaudRate = bound;//串口波特率
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式

  USART_Init(USART1, &USART_InitStructure); //初始化串口1
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
  USART_Cmd(USART1, ENABLE);                    //使能串口1 

}


#endif

main.c

#include "delay.h"
#include "sys.h"
#include "usart.h"

void USART1_IRQHandler(void)
{
	u8 res;
	if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
	{
		USART_ClearITPendingBit(USART1,USART_IT_RXNE);
		res=USART_ReceiveData(USART1);
		USART_SendData(USART1,res);
	
	}
}

 int main(void)
 {	
	 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	 uart_init(9600);
	 USART1_IRQHandler();
	 while(1);
}
 

完整程序链接:https://pan.baidu.com/s/1PHbPJKh6q9iwJmWobQ_gkg 
提取码:yyds 
3.手机端应用市场下载 Bluetooth Serial即可开发调试

 

  • 5
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
基于STM32F103C8T6的HC-05蓝牙通信可以通过以下步骤实现。首先,我们需要使用AT指令对HC-05蓝牙模块进行配置。这可以通过连接一个CH340模块到电脑的串口调试助手,然后发送AT指令到HC-05蓝牙模块来完成。初始波特率为38400,无奇偶校验,一位停止位。\[2\] 在STM32F103C8T6上,我们需要使用两个USART串口来实现蓝牙通信。一个串口用于与电脑进行通信,另一个串口用于与蓝牙模块进行通信。电脑发送调试命令给单片机单片机再发送给蓝牙蓝牙再返还命令处理结果给单片机单片机再上传给电脑。\[3\] 通过配置STM32F103C8T6的串口参数,我们可以实现与蓝牙模块的通信。可以使用STM32的串口库函数来发送和接收数据。通过串口与蓝牙模块进行通信,我们可以实现一些功能,比如远程控制LED亮灭、蓝牙小车、远程监控等等。这为我们提供了更多的发挥空间和创造力。\[1\] 总结起来,基于STM32F103C8T6的HC-05蓝牙通信需要使用AT指令对蓝牙模块进行配置,并通过两个USART串口实现与蓝牙模块的通信。这样我们就可以实现各种有趣的功能了。 #### 引用[.reference_title] - *1* *3* [基于STM32F103C8T6的HC-06蓝牙通信](https://blog.csdn.net/qq_46015224/article/details/127714326)[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] - *2* [stm32f103c8t6+HC-05蓝牙模块+L298N电机驱动+直流电机组成的蓝牙遥控小车](https://blog.csdn.net/NJWZS/article/details/120680567)[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 ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浅_望

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

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

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

打赏作者

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

抵扣说明:

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

余额充值