HC-05 蓝牙模块简介
-
功能:支持串口通信的蓝牙模块,广泛应用于无线数据传输。支持 AT 指令配置。
-
接口:UART 通信,默认波特率为 9600bps。
-
应用:无线调试、数据传输、无线控制等。
硬件连接
HC-05 引脚 | 功能 | STM32 连接 |
---|---|---|
VCC | 电源输入 (+3.3V 或 +5V) | 3.3V |
GND | 地 | GND |
TXD | 蓝牙发送端 | PA3 (STM32 RX) |
RXD | 蓝牙接收端 | PA2 (STM32 TX) |
软件部分
使用 STM32 的串口外设(USART)与 HC-05 进行通信,STM32 的 TX 引脚连接 HC-05 的 RXD,STM32 的 RX 引脚连接 HC-05 的 TXD,我们可以利用蓝牙进行后续模块的扩展以及利用串口进行打印调试。
蓝牙模块初始化(串口初始化)
cpp
void Blue_Hc05_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(BLUE_USART_RX_GPIO_CLK|BLUE_USART_TX_GPIO_CLK, ENABLE);
RCC_APB1PeriphClockCmd(BLUE_USART_CLK, ENABLE);
/* 连接 PXx 到 USARTx_Tx*/
GPIO_PinAFConfig(BLUE_USART_RX_GPIO_PORT,BLUE_USART_RX_SOURCE, BLUE_USART_RX_AF);
/* 连接 PXx 到 USARTx__Rx*/
GPIO_PinAFConfig(BLUE_USART_TX_GPIO_PORT,BLUE_USART_TX_SOURCE, BLUE_USART_TX_AF);
/* 配置Tx引脚为复用功能 */
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = BLUE_USART_TX_PIN ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(BLUE_USART_TX_GPIO_PORT, &GPIO_InitStructure);
/* 配置Rx引脚为复用功能 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = BLUE_USART_RX_PIN;
GPIO_Init(BLUE_USART_RX_GPIO_PORT, &GPIO_InitStructure);
//USART 初始化设置
USART_InitStructure.USART_BaudRate = BLUE_USART_BAUDRATE;//一般设置为9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
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(BLUE_USART, &USART_InitStructure);
/* Configure one bit for preemption priority */
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* 配置中断源 */
NVIC_InitStructure.NVIC_IRQChannel = BLUE_USART_IRQ;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_ITConfig(BLUE_USART, USART_IT_RXNE, ENABLE);//开启中断
USART_Cmd(BLUE_USART, ENABLE); //使能串口
//USART_Cmd(BLUE_USART, DISABLE); //使能串口
}
其实就是初始化串口的一套经典公式,我们之后可以利用串口发送数据给蓝牙,然后蓝牙模块会把接收到的串口数据发送给我们的蓝牙APP,可以在蓝牙App中看到对应信息,在开发的时候,可以利用这个在手机上面看到调试打印信息,帮助我们开发。
蓝牙模块的发送以及控制蓝牙是否打开
我们把STM32串口发送的标准库函数封装进入我们的蓝牙函数里面,之后可以更方便我们的调用,使得我们的代码更加直观。
cpp
// 发送一个
void BLUE_USART_Send_Data(char data)
{
USART_SendData(BLUE_USART,data);
while(USART_GetFlagStatus(BLUE_USART,USART_FLAG_TC)==0); // 除非发送完成
}
// 发送一串
void BLUE_USART_Send_String(char *String)
{
u16 len,j;
len=strlen(String);
for(j=0;j<len;j++)
{
BLUE_USART_Send_Data(*String++);
}
}
我们决定蓝牙是否打开,就是使能或者失能对应的蓝牙串口。