5.HC-05蓝牙模块

配置蓝牙模块

注意需要将蓝牙模块接5v,实测接3.3v好像不太好使的样子

首先需要把蓝牙模块通过TTL串口模块接到我们的电脑,然后打开我们的串口助手

注意,我们现在是配置蓝牙模块,所以需要进入AT模式,需要按着蓝牙模块上的黑色小按钮再上电,这时候模块上的LED灯以一秒慢闪一次的速度闪烁着,如果你的LED是快速闪烁的可能就像上面说的一样接到3.3V去了

连接好后测试一下,波特率默认设置为38400

发送AT,模块会返回一个OK

我们给蓝牙修改一下名字,输入指令:

AT+NAME=自己想改的名字

例如: AT+NAME =BTtest

注意中间如果有空格的话会报错

改完后拔掉蓝牙模块再重新上电,这时候不用再按黑色小按钮了,这样就能进去配对连接啦

我们用手机蓝牙调试助手测试一下

在调试助手找到我们的模块后点击右边加号连接

连接后点击下方对话模式

然后输入内容点击发送

这时候我们的串口助手也能收到

也可以使用我们的串口助手进行发送

手机也能收到我们串口发过来的信息

这就表明我们的蓝牙模块已经配置成功啦,能插到单片机上进去使用了,将跳线帽接到蓝牙这边

初始化USART3

从原理图我们可以看到,将跳线帽接到蓝牙这边后USART3就变成了蓝牙配置

所以需要找到我们的USART3并配置,可以看到USART的TX和RX分别在PB10和PB11

配置USART基本都是:
RCC开启USART和GPIO的时钟
//使用结构体输出化:

GPIO_Init();

NVIC_Init();

USART_Init();
//开启串口接收中断:

USART_ITConfig();
//上电

USART_Cmd();

cpp 复制代码
void BT_UART3_Init(u32 bound )
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);	//使能USART3
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //GPIOB时钟

	//USART3_TX   GPIOB.10
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB.10
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
	GPIO_Init(GPIOB, &GPIO_InitStructure);

	//USART3_RX	  GPIOB.11
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PB.11
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
	GPIO_Init(GPIOB, &GPIO_InitStructure);

	//Usart3 NVIC 配置
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = USART3_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_InitTypeDef USART_InitStructure;
	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(USART3, &USART_InitStructure); //初始化串口3
    USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启串口接受中断
    USART_Cmd(USART3, ENABLE);
}

在main.c定义串口3标志位

cpp 复制代码
int g_USART3_FLAG1 = 0; //串口3控制标志位

然后在BT.h里面extern一下

cpp 复制代码
extern int g_USART3_FLAG1; //串口3控制标志位

中断服务函数添加处理

cpp 复制代码
void USART3_IRQHandler(void)
{
	u8 Res;
	if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
	{	
		Res =USART_ReceiveData(USART3); //读取接收到的数据
		if(Res == 'A') g_USART3_FLAG1 = 1 ; //根据接受的数据 置为标志位
		if(Res == 'B')g_USART3_FLAG1 = 2 ;
	}
}

在上一节USART开启串口接收的函数里面把USART3的判断也加一下

cpp 复制代码
//串口接收判断
void Usatr_If(void)
{
		if(g_USART1_FLAG1 ==1 | g_USART3_FLAG1 ==1 )
		{
			if(temp != 'A')
			{
				printf("Is A,LED Open\n");
			}
			temp = 'A';
			LED = RESET;
		}
		if(g_USART1_FLAG1 ==2 | g_USART3_FLAG1 ==2)
		{
			if(temp != 'B')
			{
			printf("Is B,LED Close\n");
			}
			temp = 'B';
			LED = SET;
		}
		if(g_USART1_FLAG1 ==3 | g_USART3_FLAG1 ==3)
		{
			if(temp != 'C')
			{
			printf("Is C,LED Flashing\n");
			}
			temp = 'C';
			LED =!LED;
		}
}

测试

然后在main.c里面测试一下

cpp 复制代码
//开启串口接收
Usatr_If();

//初始化并设置波特率
BT_UART3_Init(115200);

烧录进单片机,程序现象就是:

输入A,串口打印Is A,LED Open,开启LED

输入B,串口打印Is B,LED Close,关闭LED

输入B,串口打印Is C,LED Flashing,闪烁LED

蓝牙模块测试

看log也打印正常,那么就证明蓝牙已经跟单片机调通啦

相关推荐
国科安芯1 小时前
ASP4644芯片低功耗设计思路解析
网络·单片机·嵌入式硬件·安全
充哥单片机设计1 小时前
【STM32项目开源】基于STM32的智能厨房火灾燃气监控
stm32·单片机·嵌入式硬件
CiLerLinux8 小时前
第四十九章 ESP32S3 WiFi 路由实验
网络·人工智能·单片机·嵌入式硬件
时光の尘8 小时前
【PCB电路设计】常见元器件简介(电阻、电容、电感、二极管、三极管以及场效应管)
单片机·嵌入式硬件·pcb·二极管·电感·三极管·场效应管
Lu Zelin8 小时前
单片机为什么不能跑Linux
linux·单片机·嵌入式硬件
宁静致远20219 小时前
stm32 freertos下基于hal库的模拟I2C驱动实现
stm32·嵌入式硬件·freertos
Wave84514 小时前
STM32--智能小车
stm32·单片机·嵌入式硬件
wdfk_prog16 小时前
[Linux]学习笔记系列 -- lib/timerqueue.c Timer Queue Management 高精度定时器的有序数据结构
linux·c语言·数据结构·笔记·单片机·学习·安全
helesheng19 小时前
用低成本FPGA实现FSMC接口的多串口(UART)控制器
stm32·fsmc·fpga·uart控制器
充哥单片机设计20 小时前
【STM32项目开源】基于STM32的智能家居环境(空气质量)检测系统
stm32·单片机·嵌入式硬件