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

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

相关推荐
azwsm2 小时前
驱动第一阶段——启动流程
单片机·嵌入式硬件
单片机杂货铺3 小时前
基于单片机的自动开窗器设计
stm32·嵌入式硬件·51单片机·硬件工程
天天爱吃肉82185 小时前
商用车多体动力学实战笔记|第6篇:动力传动系统(发动机、变速箱、分动器、TCS、LSD限滑差速)
大数据·人工智能·笔记·python·嵌入式硬件·汽车
lhbweilai5 小时前
STM32 I2C(hal库)
stm32·单片机·嵌入式硬件
单片机杂货铺9 小时前
基于STM32的智能市政清洁小车系统设计
stm32·单片机·嵌入式硬件·物联网·硬件工程
单片机杂货铺9 小时前
基于STM32的智能书房系统的设计
stm32·单片机·嵌入式硬件·51单片机·硬件工程
&Hello Code10 小时前
3.解决STM32工程混乱:一套可复用六层架构,GPIO 、LED 实战演示
stm32·嵌入式硬件·架构
普科PRBTEK10 小时前
电流探头的常见应用场景
单片机·嵌入式硬件
qq_4017004110 小时前
3个常用的单片机实现隔离控制大电流负载例子
单片机·嵌入式硬件
weixin_4568083810 小时前
【沁恒蓝牙开发】BLE常见错误码与解析
c语言·单片机·嵌入式硬件