LVGL+FreeRTOS实战项目:智能健康助手(蓝牙模块篇)

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++);
  }
}

我们决定蓝牙是否打开,就是使能或者失能对应的蓝牙串口。

相关推荐
Turnin111111 小时前
Linux系统下速通stm32的clion开发环境配置
stm32·单片机·嵌入式硬件
2401_843785239 小时前
STM32 GPIO
stm32·单片机·嵌入式硬件
jiuri_121511 小时前
单片机内存管理剖析
单片机·嵌入式硬件
shdbdndj11 小时前
STM32单片机:GPIO模式
stm32·单片机·嵌入式硬件
2401_8437852312 小时前
STM32简介
stm32·单片机·嵌入式硬件
tadus_zeng15 小时前
stm8s单片机(二)外部中断实验
单片机·嵌入式硬件
大专生学编程16 小时前
基于ESP32-IDF驱动GPIO输出控制LED
嵌入式硬件·esp32·esp-idf
7yewh18 小时前
嵌入式知识点总结 ARM体系与架构 专题提升(四)-编程
arm开发·stm32·单片机·嵌入式硬件·mcu·物联网·51单片机
Uitwaaien5420 小时前
51 单片机矩阵键盘密码锁:原理、实现与应用
c++·单片机·嵌入式硬件·51单片机·课程设计