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

Stm32_标准库_14_串口蓝牙模块_手机与蓝牙模块通信_实现模块读取并修改信息

由手机向蓝牙模块传输时间信息,Stm32获取信息并将已存在信息修改为传入信息

测试代码:

#include "stm32f10x.h"    // Device header
#include "Delay.h"
#include "OLED.h"
#include "Serial.h"uint16_t num = 0;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
char News[100] = ""; 
uint8_t flag = 1;/*初始化通用定时器TIM2*/
void Timer_Init(void){RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//APB1外设开启TIM_InternalClockConfig(TIM2);//选择内部时钟/*初始化时基单元*/TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;//ARR自动重装TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;//psc预分频器TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;//高级计时器内容直接给零//记录1s TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);//刚初始化完就会进中断TIM_ClearFlag(TIM2, TIM_FLAG_Update);//消除中断标志位//使能更新中断TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);/*配置中断*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//选择组2NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;//定时器2在NVIC内的通道NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStructure);TIM_Cmd(TIM2, ENABLE);//启动定时器
}
unsigned char time[] = {22, 59, 30};
unsigned int date[] = {2023, 12, 31};
char month[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
void Show_Time(void){OLED_ShowNum(1,1,time[0], 2);OLED_ShowString(1, 3, ":");OLED_ShowNum(1,4,time[1], 2);OLED_ShowString(1, 6, ":");OLED_ShowNum(1,7,time[2], 2);
}
void Show_Date(void){OLED_ShowNum(2,1,date[0], 4);OLED_ShowString(2, 5, "/");OLED_ShowNum(2,6,date[1], 2);OLED_ShowString(2, 8, "/");OLED_ShowNum(2,9,date[2], 2);
}
void Time_Control(void){time[2] = time[2] + 1;if(time[2] >= 60){time[2] = 0;time[1] = time[1] + 1;if(time[1] >= 60){time[1] = 0;time[0] = time[0] + 1;if(time[0] >= 24){time[0] = 0;date[2] = date[2] + 1;if(date[2] >= month[date[1]] + 1){date[2] = 1;date[1] = date[1] + 1;if(date[1] >= 13){date[1] = 1;date[0] = date[0] + 1;if(date[0] >= 9999){date[0] = 2023;}}}}}}}void TIM2_IRQHandler(void){//定时器2的中断函数,名字固定if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET){TIM_ClearITPendingBit(TIM2, TIM_IT_Update);//清除标志位Time_Control();}}void month2_Control(void){//判别闰平年 if((date[0] % 4 == 0 && date[0] % 100 != 0 )|| date[0] % 400 == 0) month[2] = 29;else month[2] = 28;
}void Get_Hc05News(void){uint32_t i = 0, j = 0;while(j < 10000){//等待中断while(Serial_GetRxFlag() == 1){//查看标志位并清除News[i] =  Serial_GetRxData();//传入数据i ++;j = 0;flag = 0;//标志传入了新数据}j ++;}
}void Array_NewsClear(void){//恢复数组初始化uint16_t i = 0;for(i = 0; i < 100; i ++) News[i] = '\0';
}uint8_t StringLength(char * a){//计算数组长度函数uint8_t length = 0;uint8_t i = 0;while(a[i] != '\0'){i ++;length ++;}return length;
}uint8_t Check(char *a, uint8_t length){if(length == 5 | length == 10){return 1;}return 0;
}int main(void){OLED_Init();//初始化OLEDTimer_Init();//开启计时器Serial_Init();//开启串口while(1){ Get_Hc05News();//时刻等待蓝牙传入数据if(flag == 0){//蓝牙传入了数据//恢复标志位if(Check(News, StringLength(News)) == 1){//若查看数据没有错误OLED_ShowString(3, 1, "TRUE");OLED_ShowString(4, 1, News);Array_NewsClear();}else{OLED_ShowString(3, 1, "FALSE");OLED_ShowString(4, 1, News);Array_NewsClear();}flag = 1;}}
}

目前遇到的主要问题是OLED显示数字需要耗费时间,导致蓝牙模块传入信息不能及时抢占CPU导致数据漏传入,解决方法是修改蓝牙模块中断为更高级中断


待完善…

相关文章:

Stm32_标准库_14_串口蓝牙模块_手机与蓝牙模块通信_实现模块读取并修改信息

由手机向蓝牙模块传输时间信息&#xff0c;Stm32获取信息并将已存在信息修改为传入信息 测试代码&#xff1a; #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h" #include "Serial.h"uint16_t num…...

UDP 的报文结构

UDP的报文结构&#xff1a; 其中前面的源端口号和目的端口号&#xff0c;UDP长度和UDP检验和&#xff0c;它们都是2个字节。 那么什么是UDP长度呢&#xff0c;它指的是后面的数据的长度&#xff0c;换算单位也就是64kb&#xff0c;因此一个数据报&#xff08;数据&#xff09;最…...

torch.hub.load报错urllib.error.HTTPError: HTTP Error 403: rate limit exceeded

在运行DINOv2的示例代码时&#xff0c;需要载入预训练的模型&#xff0c;比如&#xff1a; backbone_model torch.hub.load(repo_or_dir"facebookresearch/dinov2", modelbackbone_name) torch.hub.load报错“urllib.error.HTTPError: HTTP Error 403: rate limit…...

测试左移右移-理论篇

目录 前言一、浅解左移1.什么是测试左移&#xff1f;1.1对产品1.2对开发1.3对测试1.4对运维 二、浅解右移1.1对产品1.2对开发1.3对测试1.4对运维 三、总结 前言 测试左移右移&#xff0c;很多人说能让测试更拥有主动权&#xff0c;展示出测试岗位也是有很大的价值&#xff0c;…...

【TensorFlow2 之015】 在 TF 2.0 中实现 AlexNet

一、说明 在这篇文章中&#xff0c;我们将展示如何在 TensorFlow 2.0 中实现基本的卷积神经网络 \(AlexNet\)。AlexNet 架构由 Alex Krizhevsky 设计&#xff0c;并与 Ilya Sutskever 和 Geoffrey Hinton 一起发布。并获得Image Net2012竞赛中冠军。 教程概述&#xff1a; 理论…...

Python进阶之迭代器

文章目录 前言一、迭代器介绍及作用1.可迭代对象2. 迭代器 二、常用函数和迭代器1.常用函数2.迭代器 三、总结结束语 &#x1f482; 个人主页:风间琉璃&#x1f91f; 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注…...

Vue鼠标右键画矩形和Ctrl按键多选组件

效果图 说明 下面会贴出组件代码以及一个Demo&#xff0c;上面的效果图即为Demo的效果&#xff0c;建议直接将两份代码拷贝到自己的开发环境直接运行调试。 组件代码 <template><!-- 鼠标画矩形选择对象 --><div class"objects" ref"objectsR…...

【MySQL JDBC】使用Java连接MySQL数据库

一、什么是JDBC&#xff1f; 理解API的概念 API&#xff1a;Application Programing Interface -- 应用程序编程接口写好一个程序&#xff0c;这个程序需要给别人提供哪些功能&#xff1f;这些功能就是通过一些 函数/类 这样的方式来提供的。例如 Random、Scanner、ArrayList..…...

字节码学习之常见java语句的底层原理

文章目录 前言1. if语句字节码的解析 2. for循环字节码的解析 3. while循环4. switch语句5. try-catch语句6. i 和i的字节码7. try-catch-finally8. 参考文档 前言 上一章我们聊了《JVM字节码指令详解》 。本章我们学以致用&#xff0c;聊一下我们常见的一些java语句的特性底层…...

Godot C#连接信号不能像GDScirpt一样自动添加代码

前言 我网上找了好久&#xff0c;发现Godot 对于C# 的支持还有待增强 使用c#脚本有办法像gds那样连接节点自带信号时自动生成信号吗&#xff1f; 百度贴吧 Godot C# How To, Episode 9. Signals With Parameters | Godot Mono 解决方案 把信号拉长&#xff0c;看他的属性 修…...

快速自动化处理JavaScript渲染页面

在进行网络数据抓取时&#xff0c;许多网站使用了JavaScript来动态加载内容&#xff0c;这给传统的网络爬虫带来了一定的挑战。本文将介绍如何使用Selenium和ChromeDriver来实现自动化处理JavaScript渲染页面&#xff0c;并实现有效的数据抓取。 1、Selenium和ChromeDriver简介…...

通过API接口进行商品价格监控,可以按照以下步骤进行操作

要实现通过API接口进行商品价格监控&#xff0c;可以按照以下步骤进行操作&#xff1a; 申请平台账号并选择API接口&#xff1a;根据需要的功能&#xff0c;选择相应的API接口&#xff0c;例如商品API接口、店铺API接口、订单API接口等&#xff0c;这一步骤通常需要我们在相应…...

(vue3)大事记管理系统 文章管理页

[element-plus进阶] 文章列表渲染&#xff08;带搜索&到分页&#xff09; 表单架设&#xff1a;当前el-form标签配置一个inline属性&#xff0c;里面的元素就会在一行显示了 中英国际化处理&#xff1a;App.vue中el-config-provider标签包裹组件&#xff0c;意味着整个组…...

springboot 使用RocketMQ客户端生产消费消息DEMO

创建springboot项目省略 项目依赖 注意&#xff1a;当前客户端版本是 5.1.3 &#xff0c;安装的rocketmq服务的版本要与其对应 <properties><java.version>11</java.version><rocketmq-client-java-version>5.1.3</rocketmq-client-java-version&…...

第三章 内存管理 四、连续分配管理方式

目录 一、内存空间的分配与回收 1、连续分配管理方式 &#xff08;1&#xff09;、单一连续分配 优点&#xff1a; 缺点&#xff1a; &#xff08;2&#xff09;、固定分区分配 分区大小相等&#xff1a; 分区大小不等&#xff1a; &#xff08;3&#xff09;、动态分区…...

npm install报--4048错误和ERR_SOCKET_TIMEOUT问题解决方法之一

一、问题描述 学习vue数字大屏加载动漫效果时&#xff0c;在项目终端页面输入全局下载指令 npm install -g json-server 问题1、报--4048错误 会报如下错误 operation not permitted......errno: -4048code:EPERMsyscall: mkdir......The operation was reiected by your op…...

合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&#xff0c;合并后数组…...

自动泊车系统设计学习笔记

1 概述 1.1 自动泊车系统研究现状 目前对于自动泊车系统的研究方法通常有两种实现方式&#xff1a; 整个泊车操作可以分为四个阶段&#xff1a;第一阶段车辆向前行驶进行车位识别&#xff0c;第二阶段车辆行驶到准备泊车时的待泊车区域&#xff0c;第三阶段车辆按照规划好的…...

基于Java的家电销售网站管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域…...

设计模式~备忘录模式(memento)-22

目录  (1)优点&#xff1a; (2)缺点&#xff1a; (3)使用场景&#xff1a; (4)注意事项&#xff1a; (5)应用实例&#xff1a; 代码 备忘录模式(memento) 备忘录模式&#xff08;Memento Pattern&#xff09;保存一个对象的某个状态&#xff0c;以便在适当的时候恢复对…...

从零构建:基于FreeRTOS与LVGL的低功耗智能手表实战指南

1. 项目背景与核心目标 第一次接触智能手表开发是在三年前&#xff0c;当时市面上开源的方案要么功能简陋&#xff0c;要么功耗高得离谱。作为一个嵌入式老鸟&#xff0c;我决定自己动手搞一套真正可用的低功耗方案。经过多次迭代&#xff0c;最终选择了FreeRTOSLVGL这个黄金组…...

ABAP开发避坑指南:绕过SAP GUI安全弹窗的5种编程方案实测

ABAP开发实战&#xff1a;5种绕过SAP GUI安全弹窗的编程方案深度解析 引言&#xff1a;SAP GUI安全机制的困境与突破 在SAP系统的日常开发与运维中&#xff0c;频繁出现的"系统试图创建文件"安全弹窗堪称ABAP开发者的噩梦。这种设计初衷为保护本地文件安全的机制&…...

Materials Studio8.0在CentOS7.9环境下的安装与配置指南

1. 环境准备与系统检查 在CentOS 7.9上安装Materials Studio 8.0之前&#xff0c;我们需要确保系统环境满足最低要求。我遇到过不少因为环境配置不当导致的安装失败案例&#xff0c;这里分享几个关键检查点&#xff1a; 首先检查主机名是否包含特殊字符。Materials Studio对主机…...

GME-Qwen2-VL-2B助力AIGC内容创作:自动为图片生成创意文案与故事

GME-Qwen2-VL-2B助力AIGC内容创作&#xff1a;自动为图片生成创意文案与故事 你有没有过这样的经历&#xff1f;面对一张精心拍摄的照片&#xff0c;却怎么也憋不出几句像样的文案。或者&#xff0c;看着一张充满故事感的图片&#xff0c;脑海里思绪万千&#xff0c;落到笔尖却…...

深入解析BUCK、BOOST与Charge Pump电路的设计与应用

1. 开关电源基础&#xff1a;为什么需要BUCK、BOOST和Charge Pump&#xff1f; 刚入行那会儿&#xff0c;我总觉得电源设计就是个"变压器加整流桥"的事&#xff0c;直到某次项目里把12V电池直接怼到3.3V的MCU上——随着一缕青烟升起&#xff0c;我才明白电压转换这门…...

OpenClaw权限管理:Qwen3-VL:30B飞书助手分级控制方案

OpenClaw权限管理&#xff1a;Qwen3-VL:30B飞书助手分级控制方案 1. 为什么需要权限管理 当我第一次在团队内部署OpenClaw飞书助手时&#xff0c;很快就遇到了一个现实问题&#xff1a;不同部门的同事对AI助手的操作需求差异巨大。财务组需要处理报销单据识别&#xff0c;研发…...

5分钟完成专业级黑苹果配置:OpCore Simplify终极简化指南

5分钟完成专业级黑苹果配置&#xff1a;OpCore Simplify终极简化指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾经为黑苹果配置的复杂性…...

部署开源的Minecraft服务器智能运维管理系统 Minecraft-Rcon-Manage 自存简易教程

项目地址&#xff1a;Minecraft-Rcon-Manage 前言 笔者最近寻找一款能实现Minecraft服务器RCON远程访问的工具&#xff0c;找到了这个目前正在持续更新、功能丰富的开源项目Minecraft-Rcon-Manage&#xff0c;但实际部署过程中发现作者提供的教程博客无法正常访问&#xff0c…...

SPIRAN ART SUMMONER优化指南:如何调整参数让生成的图片更符合预期

SPIRAN ART SUMMONER优化指南&#xff1a;如何调整参数让生成的图片更符合预期 1. 理解SPIRAN ART SUMMONER的核心参数 SPIRAN ART SUMMONER作为一款基于Flux.1-Dev模型的图像生成工具&#xff0c;其参数设置直接影响最终输出效果。与普通AI绘画工具不同&#xff0c;它融入了…...

GStreamer性能优化指南:在Jetson TX2上实现4K视频低延迟处理(基于NVMM内存)

GStreamer性能优化指南&#xff1a;在Jetson TX2上实现4K视频低延迟处理&#xff08;基于NVMM内存&#xff09; 在嵌入式视觉和实时视频处理领域&#xff0c;NVIDIA Jetson TX2凭借其强大的GPU和专用硬件加速单元&#xff0c;成为工业级应用的理想选择。但要将这块开发板的性能…...