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

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

相关推荐
FightingFreedom3 分钟前
GPIO交换矩阵和IO_MUX
单片机·嵌入式硬件·esp32·arduino·esp32s3
文火冰糖的硅基工坊1 小时前
[硬件电路-150]:数字电路 - 数字电路与模拟电路的异同
嵌入式硬件·fpga开发·电路·运放·跨学科融合
HW-BASE1 小时前
C语言控制语句练习题1
c语言·开发语言·单片机·算法·嵌入式·c
echo_pen2 小时前
蓝桥杯----锁存器、LED、蜂鸣器、继电器、Motor
单片机·蓝桥杯
zhmc3 小时前
MCU程序段的分类
单片机
qq10549415165 小时前
江协科技STM32 15-1 FLASH闪存
科技·stm32·嵌入式硬件
智者知已应修善业5 小时前
【51单片机6位数码管密码锁】2022-10-15
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
天和地丰9 小时前
AAltium SVN Database Library 配置使用说明
数据库·嵌入式硬件·svn
JasmineX-111 小时前
STM32的SPI通信(硬件读取W25Q64)
c语言·stm32·单片机·嵌入式硬件
Naiva11 小时前
【兆易创新】单片机GD32F103C8T6系列入门资料
单片机·嵌入式硬件