STM32:使用蓝牙模块

news/2024/6/3 1:35:47 标签: 网络, 蓝牙, stm32, 嵌入式开发

一、蓝牙概要       

        蓝牙是一种常见的无线通信协议,通常用于短距离通信。蓝牙分为经典蓝牙和低功耗蓝牙(BLE)。经典蓝牙通常用于需要持续传输数据的设备,比如蓝牙耳机等。低功耗蓝牙通常用于只需要间歇性传输数据的设备,比如运动手环。

        蓝牙通信通常分为主机和从机,通常我们的单片机设备被当作从机,手机等终端设备作为主机。在建立蓝牙通信前,从机要向外广播自己的信息。

        蓝牙通信协议比较复杂,比如在低功耗蓝牙中就包含GAP广播协议,GATT协议等知识点。在学习单片机的过程中,可以使用BT24蓝牙串口透传模块,该模块的作用可以讲复杂的蓝牙协议简化为”串口透传“。所谓串口透传,就是将STM32发送给其的数据原封不动地转发给与其连接的设备。并且可以将主机发送的数据通过串口转发给STM32.。

        注意:连接模块时,地线接地线(GND),5V接5V,TX与RX交叉连接

二、准备工作

        在终端输入命令控制红绿小灯亮灭

1.首先我们在CubeIDE将蓝牙模块连接的USART3设置为异步模式。蓝牙模块的默认波特率为9600,在参数设置界面中找到波特率参数修改成9600

2.为USART3开启中断

3.并且为USART3开启DMA通道

4.设置红绿蓝小灯为GPIO_OUTPUT。

5.保存并生成代码。.

6.参考如下连接的代码,将huart2的相关变量改成huart3的相关变量。具体实现见最后

STM32:串口轮询模式、中断模式、DMA模式和接收不定长数据-CSDN博客

三.使用BLE调试功能调试代码

       通常使用蓝牙调试助手来调试代码。或者用 nRF Connect 也行。但是在学习环境上可以在波特律动 串口助手 进行调试。

四、主要代码。

/* USER CODE BEGIN PV */
uint8_t  recvDate[20];
/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_DMA_Init(void);
static void MX_USART3_UART_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
	if(huart == &huart3){
		 //把接收到的数据,发给终端进行打印
		 HAL_UART_Transmit_DMA(&huart3,recvDate,Size);
		 GPIO_PinState pinstate= GPIO_PIN_RESET;
		 if(recvDate[1] == '1'){
			 pinstate = GPIO_PIN_SET;
		 }
		 if(recvDate[0] == 'R'){
			 HAL_GPIO_WritePin(redLED_GPIO_Port, redLED_Pin, pinstate);
		 }else if(recvDate[0] == 'B'){
			 HAL_GPIO_WritePin(blueLED_GPIO_Port,blueLED_Pin, pinstate);
		 }else if(recvDate[0] == 'G'){
			 HAL_GPIO_WritePin(greenLED_GPIO_Port,greenLED_Pin, pinstate);
		 }
		 //继续接收即将要接收的数据
		  HAL_UARTEx_ReceiveToIdle_DMA(&huart3, recvDate, sizeof(recvDate));
		  //关闭DMA传输过半中断
		  __HAL_DMA_DISABLE_IT(&hdma_usart3_rx,DMA_IT_HT);
	}
}


http://www.niftyadmin.cn/n/5136339.html

相关文章

分治法求解棋盘覆盖问题

分治法求解棋盘覆盖问题 如何应用分治法求解棋盘覆盖问题呢?分治的技巧在于如何划分棋盘,使划分后的子棋盘的大小相同,并且每个子棋盘均包含一个特殊方格,从而将原问题分解为规模较小的棋盘覆盖问题。 基本思路 棋盘覆盖问题是…

传统汽车总线CAN(FD) LIN学习大纲

由于主要从事车载以太网方面,反而传统汽车总线协议了解的不多,先总结下CAN(FD)、LIN总线的内容目录,作为学习大纲使用。需要的转发、收藏!!! CAN(FD)总线系列…

YugaByteDB -- 全新的 “PostgreSQL“ 存储层

文章目录 0 背景1 架构1.1 Master1.2 TServer1.3 Tablet 2 读写链路2.1 DDL2.2 DML2.3 事务 3 KEY 的设计4 Rocksdb 在 YB 中的一些实践总结 0 背景 YugaByteDB 的诞生也是抓住了 spanner 推行的NewSQL 浪潮的尾巴,以 PG 生态为基础 用C实现的 支持 SQL 以及 CQL 语…

七人拼团模式:颠覆你的购物观念,499元产品让你赚翻天!

七人拼团模式是一种创新的消费模式,通过聚集消费者的购买力,让消费者能够以更优惠的价格购买到优质的商品。下面我们以499元的产品为例,详细介绍七人拼团模式的玩法规则和收益计算。 玩法规则: 消费者购买499元的指定产品后&…

【二分】专题练习

题目列表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 从普及开始。。。。 P8647 [蓝桥杯 2017 省 AB] 分巧克力 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目大意: 把n块巧克力分成k块,每块都是正方形,要求边长最大。 这题答案具…

数据结构单链表的实现(C语言)

目录 1.实现的接口和功能2.代码块 1.实现的接口和功能 //打印链表 void SLTPrint(SLTNode** phead); //头插 void PushFont(SLTNode** phead, SLTDataType x); //尾插 void PushBack(SLTNode** phead, SLTDataType x); //头删 void PopFont(SLTNode** phead); //尾删 void Pop…

2023-在mac下安装Homebrew的国内镜像

mac安装Homebrew的国内镜像 尝试使用其他下载源:GitHub 可能会受到访问限制,尝试使用其他镜像或下载源。您可以使用清华大学、中科大或阿里云的 Homebrew 镜像,以提高下载速度和可靠性。例如,可以使用阿里云的镜像来安装 Homebre…

洛谷 B2009 计算 (a+b)/c 的值 C++代码

目录 题目描述 AC Code 切记 题目描述 题目网址&#xff1a;计算 (ab)/c 的值 - 洛谷 AC Code #include<bits/stdc.h> using namespace std; int main() {int a,b,c;cin>>a>>b>>c;cout<<(ab)/c<<endl;return 0; } 切记 不要复制题…