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

基于stm32的蓝牙模块实验

蓝牙模块定长或不定长发送

头文件

#include "stdio.h"
#include "sys.h"#define UART2_RX_BUF_SIZE   128
#define UART2_TX_BUF_SIZE   64UART_HandleTypeDef uart2_handle;uint8_t uart2_rx_buf[UART2_RX_BUF_SIZE];
uint16_t uart2_rx_len = 0;
void bt_init(uint32_t bound);            /* 串口初始化函数 */
//void bt_send(char *send_buf,uint8_t size);
void bt_send(char * format,...);

1串口1初始化函数 

baudrate: 波特率, 根据自己需要设置波特率值

void bt_init(uint32_t baudrate)
{ uart2_handle.Instance = USART2;                     /*USART2*/uart2_handle.Init.BaudRate = baudrate;              /*设置波特率*/uart2_handle.Init.WordLength = UART_WORDLENGTH_8B;  /*字长为8位数据格式*/uart2_handle.Init.StopBits    = UART_StOPBITS_1;    /*设置一个停止位*/uart2_handle.Init.Parity     = UART_PARITY_NONE;    /*不设置校验位*/uart2_handle.Init.HwFlowCtl  = UART_HWCONTROL_NONE; /*无硬件流控制*/uart2_handle.Init.Mode       = UART_MODE_TX_RX;     /*收发模式*/HAL_UART_Init(&uart2_handle);}

2uart2接收缓冲区清除

void uart2_rx_clear(void)
{memset(uart2_rx_buf,0,sizeof(uart2_rx_buf));uart2_rx_len = 0;
}

3串口1中断服务函数

串口1中断服务函数

 在此使用接收中断及空闲中断,实现不定长数据收发

void USART2_IRQHandler(void)
{uint8_t receive_data = 0;/* 获取接收RXNE标志位是否被置位 */if(__HAL_UART_GET_FLAG(&uart2_handle, UART_FLAG_RXNE) != RESET) {if(uart2_rx_len >= sizeof(uart2_rx_buf))     /* 如果接收的字符数大于接收缓冲区大小, */uart2_rx_len = 0;                           /* 则将接收计数器清零 */HAL_UART_Receive(&uart2_handle,&receive_data, 1, 1000);/* 接收一个字符 */uart2_rx_buf[uart2_rx_len++] = receive_data; /* 将接收到的字符保存在接收缓冲区 */        }if(__HAL_UART_GET_FLAG(&uart2_handle,UART_F:AG_IDLE) != RESET){printf("bt:recv: %s\r\n", uart2_rx_buf);    /* 将接收到的数据打印出来 */__HAL_UART_CLEAR_IDLEFLAG(&uart2_handle);   /* 清除UART总线空闲中断 */
}
}

4通过蓝牙发送数据发送

1定长

void bt_send(char *send_buf,uint8_t size)
{HAL_UART_Transmit(&uart2_handle,(uint8_t *)send_buf,size,100);   
}

2不定长传输

void bt_send(char * format...)
{uint8_t send_buf[128] = {0};       /*初始化发送的数组*/va_list arg;                       /*创建一个参数列表va_list*/va_start(arg,format);              /*初始化一个va_list类型的变量*//*使用参数列表发送格式化输出到字符串*/va_sprintf((char *)send_buf,format,arg);va_end(arg);            /*用于清理va_list变量,结束可变参数的处理*//*这个函数允许用户将数据从用户指定的缓冲区发送到UART*/HAL_UART_Transmit(&uart2_handle,send_buf,sizeof(send_buf),100);
}

main

#include "sys.h"
#include "delay.h"
#include "uart1.h"
#include "bluetooth.h"int main(void)
{HAL_Init();stm32_clock_init(RCC_PLL_MUL9);bt_init(9600);printf("helloWorld!\r\n");uint16_t i = 0;while(1){bt_send("hello, bt1%d\r\n",i++);delay_ms(500);}
}

相关文章:

基于stm32的蓝牙模块实验

蓝牙模块定长或不定长发送 头文件 #include "stdio.h" #include "sys.h"#define UART2_RX_BUF_SIZE 128 #define UART2_TX_BUF_SIZE 64UART_HandleTypeDef uart2_handle;uint8_t uart2_rx_buf[UART2_RX_BUF_SIZE]; uint16_t uart2_rx_len 0; void b…...

C语言解决TopK问题

前言: 本文TopK问题是在数据量很大的前提下进行解决,当数据量足够大时,内存中存不下,只能存到文件硬盘中。当存到硬盘中,我们无法用建堆,一个一个pop取出最值的方式解决,因为我们没法在硬盘中去…...

磁盘存储链式结构——B树与B+树

红黑树处理数据都是在内存中,考虑的都是内存中的运算时间复杂度。如果我们要操作的数据集非常大,大到内存已经没办法处理了该怎么办呢? 试想一下,为了要在一个拥有几十万个文件的磁盘中查找一个文本文件,设计的…...

如何批量从sql语句中提取表名

简介 使用的卢易表 的提取表名功能,可以从sql语句中批量提取表名。采用纯文本sql语法分析,无需连接数据库,支持从含非sql语句的文件文件中提取,支持各类数据库sql语法。 特点 快:从成百个文件中提取上千个表名只需1…...

怎么把音频的速度调慢?6个方法调节音频速度

怎么把音频的速度调慢?调慢音频速度不仅可以帮助我们更好地捕捉细节,还能让我们在分析和学习时更加从容。这对于音乐爱好者来说,尤其有助于理解复杂的旋律和和声,使学习过程变得更加高效。而在语言学习中,放慢语速则能…...

K8s-services+pod详解1

一、Service 我们能够利用Deployment创建一组Pod来提供具有高可用性的服务。 虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题: Pod IP 会随着Pod的重建产生变化Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问 这样对于访问这…...

从RNN讲起(RNN、LSTM、GRU、BiGRU)——序列数据处理网络

文章目录 RNN(Recurrent Neural Network,循环神经网络)1. 什么是RNN?2. 经典RNN的结构3. RNN的主要特点4. RNN存在问题——长期依赖(Long-TermDependencies)问题 LSTM(Long Short-Term Memory&a…...

python:假的身份信息生成模块faker

前言 发现一个有趣的python模块(faker),他支持生成多个国家语言下的假身份信息,包含人名、地址、邮箱、公司名、电话号码、甚至是个人简历! 你可以拿它做一些自动化测试,或一些跟假数据有关的填充工作。 代…...

spring task的使用场景

spring task 简介 spring task 是spring自带的任务调度框架按照约定的时间执行某个方法的工具,类似于闹钟 应用场景 cron表达式 周和日两者必定有一个是问号 简单案例...

美畅物联丨剖析 GB/T 28181 与 GB 35114:视频汇聚领域的关键协议

我们在使用畅联云平台进行视频汇聚时,经常会用的GB/T 28181协议,前面我们写了关于GB/T 28181的相关介绍,​ 详见《畅联云平台|关于GB28181你了解多少?》。 ​最近也有朋友向我们咨询GB 35114协议与GB/T 28181有什么不同…...

uni-app 开发的应用快速构建成鸿蒙原生应用

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,它支持编译到 iOS、Android、小程序等多个平台。对于 HarmonyOS(鸿蒙系统),uni-app 提供了特定的支持,允许开发者构建鸿蒙原生应用。 一、uni-app 对 HarmonyOS 的支…...

代码随想录算法训练营| 669. 修剪二叉搜索树 、 108.将有序数组转换为二叉搜索树 、 538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树 题目 参考文章 思路:这题其实就是删除不符合上下边界的节点。注意:这里删除不符合上下边界节点时,这个不符合上下边界的节点的左或右子树可能存在符合上下边界的节点,所i有每次比较完之后,要继…...

Django模型实现外键自关联

Django模型实现外键自关联 1、场景 省市区、评论 2、模型models.py from django.db import models 资讯评论:资讯,用户,是否取消,时间class CommentInfomation(models.Model):info = models...

Android ViewModel

一问:ViewModel如何保证应用配置变化后能够自动继续存在,其原理是什么,ViewModel的生命周期和谁绑定的? ViewModel 的确能够在应用配置发生变化(例如屏幕旋转)后继续存在,这得益于 Android 系统的 ViewMod…...

优先算法1--双指针

“一念既出,万山无阻。”加油陌生人! 目录 1.双指针--移动零 2.双指针-复写零 ok,首先在学习之前,为了方便大家后面的学习,我们这里需要补充一个知识点,我这里所谓的指针,不是之前学习的带有…...

利用弹性盒子完成移动端布局(第二次实验作业)

需要实现的效果如下&#xff1a; 下面是首先是这个项目的框架&#xff1a; 然后是html页面的代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"wid…...

C# 字符串(string)三个不同的处理方法:IsNullOrEmpty、IsInterned 、IsNullOrWhiteSpace

在C#中&#xff0c;string.IsNullOrEmpty、string.IsInterned 和 string.IsNullOrWhiteSpace 是三个不同的字符串处理方法&#xff0c;它们各自有不同的用途&#xff1a; 1.string.IsNullOrEmpty&#xff1a; 这个方法用来检查字符串是否为null或者空字符串&#xff08;"…...

读书笔记 - 虚拟化技术 - 0 QEMU/KVM概述与历史

《QEMU/KVM源码解析与应用》 - 王强 概述 虚拟化简介 虚拟化思想 David Wheeler&#xff1a;计算机科学中任何问题都可以通过增加一个中间层来解决。 虚拟化思想存在与计算机科学的各个领域。 主要思想&#xff1a;通过分层将底层的复杂&#xff0c;难用的资源虚拟抽象为简…...

常见的负载均衡

1.常见的负载均衡服务 负载均衡服务是分布式系统中用于分配网络流量和请求的关键组件&#xff0c;它可以帮助提高应用程序的可用性、可扩展性和响应速度。以下是一些常用的负载均衡服务&#xff1a; Nginx&#xff1a;一个高性能的Web服务器和反向代理&#xff0c;广泛用于实现…...

利用sessionStorage收集用户访问信息,然后传递给后端

这里只是简单的收集用户的停留时间、页面加载时间、当前页面URL及来源页面&#xff0c;以做示例 <html><head><meta http-equiv"content-type" content"text/html; charsetUTF-8"/><title>测试sessionStorage存储用户访问信息<…...

GPT4All-Chat本地部署与性能优化深度解析

GPT4All-Chat本地部署与性能优化深度解析 【免费下载链接】gpt4all-chat gpt4all-j chat 项目地址: https://gitcode.com/gh_mirrors/gp/gpt4all-chat GPT4All-Chat是一款基于GPT-4架构的本地化AI对话应用&#xff0c;采用C和Qt框架构建&#xff0c;支持跨平台运行&…...

XueQiuSuperSpider技术深度解析:模块化爬虫架构与量化投资数据采集实现

XueQiuSuperSpider技术深度解析&#xff1a;模块化爬虫架构与量化投资数据采集实现 【免费下载链接】XueQiuSuperSpider 雪球股票信息超级爬虫 项目地址: https://gitcode.com/gh_mirrors/xu/XueQiuSuperSpider XueQiuSuperSpider是一款基于Java8函数式编程范式设计的雪…...

新手如何通过Taotoken控制台快速创建并管理自己的API Key

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 新手如何通过Taotoken控制台快速创建并管理自己的API Key 对于初次接触大模型服务的开发者而言&#xff0c;如何安全、便捷地获取和…...

3分钟解锁CAJ文件:如何将知网专属格式转换为可搜索PDF

3分钟解锁CAJ文件&#xff1a;如何将知网专属格式转换为可搜索PDF 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换&#xff0c;成功与否&#xff0c;皆是玄学。 项目地址: https://gitcode.com/gh…...

MegSpot视觉对比工具:3个专业级视觉分析难题的终极解决方案

MegSpot视觉对比工具&#xff1a;3个专业级视觉分析难题的终极解决方案 【免费下载链接】MegSpot MegSpot是一款高效、专业、跨平台的图片&视频对比应用 项目地址: https://gitcode.com/gh_mirrors/me/MegSpot 作为一名视觉内容创作者或质量检测人员&#xff0c;你是…...

任务1:验证中间件的4个【钩子】函数任务2:验证CBV,和FBV做比较

建设如下文件目录格式配置根项目 urls.py&#xff08;django_gate_demo/urls.py&#xff09;from django.contrib import admin from django.urls import path, includeurlpatterns [path(admin/, admin.site.urls),# 集成演示应用路由path(, include(app_demo.urls)), ]配置d…...

风云T9长续航正式上市,限时红包价仅10.99万元起售

5月16日&#xff0c;超长续航智享SUV——风云T9长续航正式上市&#xff0c;上市指导价为11.99万元-13.99万元&#xff0c;限时红包价10.99万元起售。新车秉持“智电全能&#xff0c;超级进阶”的理念&#xff0c;基于全球超15万用户真实需求&#xff0c;围绕设计、续航、智能、…...

免费AI编程助手搭建指南:基于本地大模型与开源工具链

1. 项目概述与核心价值最近在逛GitHub的时候&#xff0c;发现了一个挺有意思的项目&#xff0c;叫“Cursor-Ai-Free”。光看名字&#xff0c;可能很多朋友会以为这又是一个破解或者绕过付费限制的工具。但点进去仔细研究后&#xff0c;我发现它的定位和实现思路&#xff0c;其实…...

动力电池技术迭代:从能量密度到系统集成的多维竞争

1. 动力电池行业的“肌肉”意味着什么最近&#xff0c;行业里关于宁德时代又推出新产品的消息传得沸沸扬扬。作为在这个行业里摸爬滚打了十几年的老兵&#xff0c;每次看到这样的新闻&#xff0c;我的第一反应不是“又来了”&#xff0c;而是“这次他们想解决什么问题&#xff…...

如何快速上手专业3D点云标注工具:完整入门指南

如何快速上手专业3D点云标注工具&#xff1a;完整入门指南 【免费下载链接】labelCloud A lightweight tool for labeling 3D bounding boxes in point clouds. 项目地址: https://gitcode.com/gh_mirrors/la/labelCloud 在自动驾驶、机器人视觉和三维重建等领域&#x…...