STM32F103C8T6与HC-05:构建低功耗蓝牙通信网络

构建低功耗蓝牙(Bluetooth Low Energy, BLE)通信网络是一种在嵌入式系统中实现设备间无线通信的有效方式。STM32F103C8T6微控制器虽然原生不支持BLE,但可以通过外接BLE模块如HC-05(注意:HC-05本身不是低功耗蓝牙模块,这里为了说明问题,我们假设有一个BLE模块可以与STM32F103C8T6配合工作)来实现基本的蓝牙通信功能。以下将介绍如何使用STM32F103C8T6与一个假设的BLE模块构建通信网络,并提供相应的代码示例。

低功耗蓝牙技术概述

低功耗蓝牙是一种专为低功耗操作设计的无线通信技术,非常适合于电池供电的设备。它提供了快速连接、低延迟和广播功能,适用于需要低功耗和高性能的嵌入式系统。

STM32F103C8T6与BLE模块的集成

  1. 硬件连接:将BLE模块的TX、RX、VCC和GND引脚分别连接到STM32F103C8T6的相应引脚。
  2. 软件配置:配置STM32F103C8T6的串口,实现与BLE模块的通信。

BLE模块的配置

BLE模块通常可以通过AT指令进行配置,包括设置设备名称、服务和特征等。

STM32F103C8T6的串口通信配置

  1. 初始化串口:配置串口的波特率、数据位、停止位和奇偶校验位。
  2. 发送和接收数据:使用串口发送和接收函数与BLE模块进行通信。

代码示例

以下是STM32F103C8T6与BLE模块通信的示例代码:

#include "stm32f10x.h"
#include "stdio.h"// 串口初始化函数
void USART_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;// 使能GPIOA和USART1时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);// 配置PA9(TX)和PA10(RX)为复用推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);// 配置USART1USART_InitStructure.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(USART1, &USART_InitStructure);// 使能USART1USART_Cmd(USART1, ENABLE);
}// 发送数据到BLE模块
void USART_Send(uint8_t *data, uint16_t size)
{for (uint16_t i = 0; i < size; i++){while (!USART_GetFlagStatus(USART1, USART_FLAG_TXE));USART_SendData(USART1, data[i]);}while (!USART_GetFlagStatus(USART1, USART_FLAG_TC)); // 等待发送完成
}// 从BLE模块接收数据
void USART_Receive(uint8_t *buffer, uint16_t size)
{for (uint16_t i = 0; i < size; i++){while (!USART_GetFlagStatus(USART1, USART_FLAG_RXNE));buffer[i] = (uint8_t)USART_ReceiveData(USART1);}
}int main(void)
{// 初始化串口USART_Init();// 假设的BLE模块初始化命令uint8_t bleInitCmd[] = "AT+RESET\r\n";USART_Send(bleInitCmd, sizeof(bleInitCmd));// 延时等待模块重启for (volatile int i = 0; i < 0x500000; i++);// 发送数据到BLE模块uint8_t dataToSend[] = "Hello, BLE World!";USART_Send(dataToSend, sizeof(dataToSend));// 从BLE模块接收数据uint8_t dataReceived[20];USART_Receive(dataReceived, sizeof(dataReceived));// 打印接收到的数据for (int i = 0; i < sizeof(dataReceived); i++){printf("%c", dataReceived[i]);}while (1){// 其他任务...}
}

低功耗蓝牙网络的构建

  1. 设备配对:在BLE网络中,设备需要配对才能相互通信。
  2. 服务和特征定义:定义网络中设备提供的服务和特征。
  3. 广播和扫描:使用广播和扫描功能来发现和连接设备。

结论

虽然STM32F103C8T6本身不支持BLE,但通过外接BLE模块,仍然可以构建基本的蓝牙通信网络。在实际应用中,可能需要考虑更多的因素,如通信距离、数据速率、功耗等。代码示例提供了基本的串口通信实现,但在具体项目中可能需要根据实际需求进行调整和优化。

请注意,构建真正的低功耗蓝牙网络需要使用支持BLE的微控制器或模块。HC-05模块是基于经典蓝牙技术的,不支持低功耗特性。如果需要实现低功耗蓝牙通信,应选择支持BLE的模块,如HM-10或BBC micro:bit等。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/48573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨文档消息传递:WebKit中的Web通信新纪元

跨文档消息传递&#xff1a;WebKit中的Web通信新纪元 在现代Web应用中&#xff0c;跨文档消息传递&#xff08;Cross-document messaging&#xff09;是一种允许不同源的文档进行通信的机制。这种机制对于构建复杂的Web应用&#xff0c;如嵌入式框架&#xff08;iframes&#…

【SpringBoot】第3章 SpringBoot的系统配置

3.1 系统配置文件 3.1.1 application.properties SpringBoot支持两种不同格式的配置文件&#xff0c;一种是Properties&#xff0c;一种是YML。 SpringBoot默认使用application.properties作为系统配置文件&#xff0c;项目创建成功后会默认在resources目录下生成applicatio…

父子组件的传参问题,一方改变,另一方随之改变

目录 1.问题 2.解决方案 3.前端中的深拷贝及浅拷贝问题总结 1.问题 在子组件中通过emit调用父组件的方法&#xff0c;并传递参数&#xff0c;当子组件中修改传递给父组件的参数时&#xff0c;即使没有将修改后的值传递给父组件&#xff0c;父组件中的值依然修改了。 原因是…

Unity XR Interaction Toolkit设置或监听手柄按键事件(三)

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、XRI Default Input Actions1.导入官方案例2.设置控制器绑定&#xff0c;如手柄、主/辅助按钮、操纵杆等1.要设置控制器绑定&#xff0c;如左右手 手柄、主/辅助按钮、操纵杆等…

转换,模糊查询属性,校验html写法

element ui 模糊查询 filterable 表单规则 &#xff1a;rulesrules el-form-item中的prop绑定的属性写规则rules blur 失去焦点事件 forcus 获取焦点事件 映射转换 function mappingFn(code){ let arr mappingList.value.map((item,index)>{ if(item.codecode){ r…

[k8s源码]8.deltaFIFO

deltaFIFO DeltaFIFO: 这是一个特殊类型的队列&#xff0c;它结合了FIFO&#xff08;先进先出&#xff09;队列的特性和增量&#xff08;Delta&#xff09;处理的能力。DeltaFIFO 中是按顺序存储的&#xff0c;但它们不必严格按照发生的顺序逐个处理。这种设计提供了处理的灵…

nosql--redis

nosql--不仅仅是sql&#xff0c;是所有非关系型数据库的统称 常用的NOSQL产品 redis [企业使用频率很高] mongodb hbase [适合大数据] redis redis可以用作数据库&#xff0c;缓存和消息代理&#xff0c;而且里面可以存储多种数据类型&#xff0c;提供了高可用机制 安装redi…

【C++中线程学习】

1、多线程 C11之前没有引入线程的概念&#xff0c;如果想要实现多线程&#xff0c;需要借助操作系统平台提供的API&#xff0c;比如Linux的<pthead.h>&#xff0c;或者windows下的<windows.h>。 C11提供了语言层面上的多线程&#xff0c;包含在头文件<thread.h…

Python中的异常处理与调试技巧

在Python编程中&#xff0c;异常处理&#xff08;Exception Handling&#xff09;和调试&#xff08;Debugging&#xff09;是两个至关重要的技能&#xff0c;它们帮助开发者识别并修复代码中的问题&#xff0c;确保程序的稳定性和可靠性。本文将详细介绍Python中的异常处理机制…

浅谈机器学习与深度学习的区别?

深度学习与机器学习是人工智能&#xff08;AI&#xff09;领域的两个重要分支&#xff0c;它们在数据处理、硬件依赖以及应用范围等方面有显著的区别。具体分析如下&#xff1a; 1. 数据处理 机器学习&#xff1a;机器学习通常需要较少的数据来训练模型&#xff0c;因为它使用…

在Windows下部署jar包,关闭命令提示符可以后台运行

前言 大多数情况下&#xff0c;都是选用Linux作为服务器部署服务&#xff0c;在Linux中通过以下命令运行 nohup java -jar xxxxx-1.0-SNAPSHOT.jar 但是有时由于其他原因&#xff0c;或本地测试&#xff0c;或云服务器使用Windows server等等&#xff0c;需要在Windows上面运…

matlab仿真 数字基带传输(下)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第六章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; clear all Fd1;%符号采样频率 Fs10;%滤波器采样频率 r0.2;%滤波器滚降系数 delay4;%滤波器时延 [num,den]rcosine(Fd,Fs,defau…

Python读取grib数据获取变量推荐姿势

前情提要 最近使用的EC和GFS预报数据给的都是grib2格式的&#xff0c;之前用惯nc格式的&#xff0c;python读取grib2数据的时候还走了些弯路&#xff0c;看到很多博客上给的教程其实不能满足我的需求&#xff0c;现在搞明白了分享一下 pygrib安装 第一个问题就是我电脑上pyg…

通信原理实验六:实验测验

实验六 实验测验 一&#xff1a;测验内容和要求 测试需要完成以下几个步骤&#xff1a; 配置好以下网络图&#xff1b;占总分10%&#xff08;缺少一个扣一分&#xff09;根据下面图配置好对应的IP和网关以及路由等相关配置&#xff0c;保证设备之间连通正常&#xff1b;占总…

领略诗词之妙,发觉生活之美。

文章目录 引言落霞与孤鹜齐飞,秋水共长天一色。野渡无人舟自横。吹灭读书灯,一身都是月。我醉欲眠卿且去,明朝有意抱琴来。赌书消得泼茶香,当时只道是寻常。月上柳梢头,人约黄昏后。最是人间留不住,朱颜辞镜花辞树。山中何事?松花酿酒,春水煎茶。似此星辰非昨夜,为谁风…

用Swagger进行后端接口测试的实战操作

目录 一.什么是Swagger&#xff1f; 二.Swagger的使用操作流程&#xff1a; 1.在pom.xml配置文件导入 Knife4j 的依赖&#xff1a; 2.在config配置类中加入 Knife4j 的相关配置并设置静态资源映射&#xff08;否则接口文档无法访问&#xff09;&#xff1a; 三.Swagger的四个…

redis构建集群时,一直Waiting for the cluster to join

redis构建集群时&#xff0c;一直Waiting for the cluster to join 前置条件参考 前置条件 这是我搭建的集群相关信息&#xff0c;三台虚拟机&#xff0c;分别是一主一从。在将所有虚拟机中redis服务器用到的tcp端口都打开之后&#xff0c;进行构建集群。但是出现上面的情况。 …

node.js包管理工具对比

1. NPM&#xff08;Node Package Manager&#xff09; 特点&#xff1a; 官方工具&#xff1a;由 Node.js 官方提供的默认包管理工具。命令行工具&#xff1a;常用命令包括 npm install、npm update、npm publish 等。NPM 注册表&#xff1a;提供了一个庞大的开源包生态系统&…

【llama3.1】ollama的使用--本地部署使用llama3.1模型

快速入门 安装完成ollama后,在命令行窗口输入 ollama run llama3 上图表示 Ollama 正在下载 llama3 任务所需的资源文件,并显示了当前的下载进度、速度和预计剩余时间。这是 Ollama 在准备运行 llama3 任务之前所需的步骤。 上面的步骤完成后,就可以在本地进行聊天了,…

Chart.js 环形图

Chart.js 环形图 介绍 Chart.js 是一个强大的 JavaScript 图表库&#xff0c;它允许开发者轻松地在网页上创建和自定义各种图表。环形图&#xff08;也称为饼图或甜甜圈图&#xff09;是 Chart.js 支持的一种图表类型&#xff0c;用于展示数据在整体中的占比关系。环形图通过…