当前位置: 首页 > article >正文

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

HC-05 蓝牙模块简介

  • 功能:支持串口通信的蓝牙模块,广泛应用于无线数据传输。支持 AT 指令配置。

  • 接口:UART 通信,默认波特率为 9600bps。

  • 应用:无线调试、数据传输、无线控制等。

硬件连接

HC-05 引脚功能STM32 连接
VCC电源输入 (+3.3V 或 +5V)3.3V
GNDGND
TXD蓝牙发送端PA3 (STM32 RX)
RXD蓝牙接收端PA2 (STM32 TX)

软件部分 

使用 STM32 的串口外设(USART)与 HC-05 进行通信,STM32 的 TX 引脚连接 HC-05 的 RXD,STM32 的 RX 引脚连接 HC-05 的 TXD,我们可以利用蓝牙进行后续模块的扩展以及利用串口进行打印调试。

蓝牙模块初始化(串口初始化) 

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串口发送的标准库函数封装进入我们的蓝牙函数里面,之后可以更方便我们的调用,使得我们的代码更加直观。

// 发送一个
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++);
  }
}

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


http://www.kler.cn/a/516666.html

相关文章:

  • 第五天 Labview数据记录(5.1 INI配置文件读写)
  • 探秘差分数组:算法星河中闪耀的区间掌控之星
  • Flink运行时架构
  • 每日十题八股-2025年1月23日
  • 【vim】vim编辑器如何设置行号
  • 一位前端小白的2024总结
  • 假期day1
  • NPM 与 Node.js 版本兼容问题:npm warn cli npm does not support Node.js
  • 文献阅读 250123-Accelerated dryland expansion under climate change
  • 从 TCP/IP 演进看按序流与性能
  • tortoiseSVN图标缺少绿色钩/tortoiseSVN图标不显示解决方案
  • EDI安全:2025年数据保护与隐私威胁应对策略
  • 【面试】Java 记录一次面试过程 三年工作经验
  • git rebase的使用
  • 在K8S中使用Values文件定制不同环境下的应用配置详解
  • ArrayFire异构计算
  • YOLOv8改进,YOLOv8检测头融合DSConv(动态蛇形卷积),并添加小目标检测层(四头检测),适合目标检测、分割等
  • C++ 入门速通-第1章【黑马】
  • smb共享文件夹当被共享文件的电脑关机了还能正常获取文件吗
  • linux系统centos版本上安装mysql5.7
  • Excel表格转换成PDF文件时显示不全怎么处理?
  • 绘制决策树的尝试1
  • Linux下的编辑器 —— vim
  • QTableView和QTableWidget的关系与区别
  • Leecode刷题C语言之收集所有金币可获得的最大积分
  • 【C++】string类使用详解