STM32F103C8T6蓝牙OTA教程

news2024/11/24 22:36:46

在这里插入图片描述
在这里插入图片描述

一、准备与简介

1. 准备材料

  文章使用的软硬件并不局限,下述仅作参考,文章的所有使用的工程可在文末获取(百度网盘+Github)

1)STM32F103C8T6核心板

2)下载器(PWLINK)

3)蓝牙透传模块(HC-04)

4)软件:Keil5 MDK+ SecureCRT(支持Ymodem协议传输的终端仿真软件)

在这里插入图片描述

2.OTA简介

  OTA:Over-The-Air,即通过无线通信网络进行固件或件的升级和更新的技术手段。通过OTA,用户可以通过无线网络直接下载和安装最新的软件版本,而无需连接到电脑或使用数据线进行更新[数据来源:CSDN-C知道模型训练的大型语言模型]。对单片机而言,简单的说就是我们无需使用各种下载器进行程序下载,借助无线的方式,我们可以实现远程升级MCU的固件。

3. IAP简介

  IAP: In Application Programming,是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级,写到这里,结合上面的OTA,大家可以猜到,我们本次教程就是在IAP的基础上通过蓝牙串口透传实现OTA。

二、IAP升级

1. Bootload

1)简介

  实现IAP技术的核心是一段预先烧写在单片机内部的IAP程序,也就是BOOTLOAD(引导加载程序,),我们不再像以往那样,对MCU进行整片数据的擦除,而是分为Bootload和APP两个部分(内存容量大的可以再划分备份区等,鉴于STM32F103C8T6的资源空间,暂时划分这两个区)。
在这里插入图片描述

2)Bootload工程下载

  首先我们需要下载STM32官网的IAP 升级的Bootload工程: 意法半导体STMicroelectronics:使用USART进行STM32F10xxx应用内编程-下载
在这里插入图片描述
填写自己的相关信息:
在这里插入图片描述
然后在我们的个人邮箱中就可以收到下载连接:
在这里插入图片描述
下载后解压文件,打开MDK工程:
在这里插入图片描述

3)Bootload工程修改

由于我使用的是MDK5,可以点击第一项来适应旧版工程:
在这里插入图片描述
首先是编译检查:
在这里插入图片描述
选择设备为STM32F103C8T6:
在这里插入图片描述
  由于STM32F103C8T6的内存是中等容量大小,我们还需要在下面进行修改,将阴影处的“xxxHD_VL”内容更换为“xxxMD”:

在这里插入图片描述
选择自己的烧录器,比如我使用的是PWLINK,就选择CMSIS-DAP,大家根据自己的LINK填写:
在这里插入图片描述

下面也是根据自己的烧录器选择:在这里插入图片描述
然后将bootload改小一点:
在这里插入图片描述
应用地址也调整一下,注意:这个地址在后面APP工程中会用到,需要对应一致,记住这个0x8005000:
在这里插入图片描述
再次编译:
在这里插入图片描述
然后连接下载器和STM32,编译烧录下载:
在这里插入图片描述
[此步骤可省略]然后我们通过串口助手查看串口信息:波特率选择115200,出现如下界面即可。
在这里插入图片描述
等我们有了APP固件,我们就可以使用SecureCRT进行固件传输了,接下来讲解APP部分。

2. APP

1)简介

  APP区就是我们用户自己自定义的具体功能区,起始地址从Bootload之后,利用bootload将跳转到APP区,这里不过多介绍,只要保证bootload的跳转地址是APP的起始地址即可。

2)工程搭建

  应用层就比较随意,这里我们以串口打印为例,串口打印的方法相信大家也都比较熟悉,这里默认大家有用一个串口打印的工程,或者文末下载我使用的这个工程,是一个基于正点原子标准库协议的一个简单串口发送的工程,大家可以用自己的任意工程,但是工程不要太大,避免超出STM32 APP的存储大小:
在这里插入图片描述

3)APP地址

这里的一个重点就是,地址需要与Bootload中APP的地址一致:
在这里插入图片描述

4)生成bin文件

  还有一个重点是,IAP升级时,我们用SecureCRT软件通过串口利用Ymodem协议传输.bin固件文件,所以首先我们需要在编译后生成bin文件:
在下图添加:

$K\ARM\ARMCC\bin\fromelf.exe --bin --output=@L.bin !L

在这里插入图片描述
再次编译:

在这里插入图片描述
在这里插入图片描述
接下来我们就可以使用SecureCRT进行IAP升级了。

3.串口IAP升级

在这里插入图片描述

1)安装SecureCRT软件

SecureCRT软件大家自行下载安装,网上资源很多

2)新建串口终端

首先点击快速连接:
在这里插入图片描述
选择串口:
在这里插入图片描述
选择自己的串口以及波特率115200:
在这里插入图片描述
点击连接后,按下STM32F103C8T6的复位按钮:
在这里插入图片描述
然后在键盘中按下数字1(SecureCRT不提供回显)
在这里插入图片描述
然后选择Ymodem传输:
在这里插入图片描述
然后选择上面生成的APP固件bin文件:
在这里插入图片描述
在这里插入图片描述
可以看到传输速度很快,然后按下“3”即可运行APP:
在这里插入图片描述
为了体现APP固件变化,这里我们修改一下APP程序:
在这里插入图片描述
然后编译生成固件:
在这里插入图片描述
按上述操作输入数字1,然后选择固件发送:
在这里插入图片描述
到这里我们就完成了串口IAP的固件升级,接下来我们使用蓝牙完成无线升级,也就是OTA。

三、蓝牙OTA

1. 简介

  在IAP升级中,我们可以看到,实际的bin文件是用串口进行发送的,那么,我们将STM32的串口连接一个蓝牙串口透传模块,然后PC机的蓝牙连接模块的蓝牙,就可以借助蓝牙将数据发送给STM32的串口了。
在这里插入图片描述

2.蓝牙配置

理论上任意支持蓝牙透传的模块均可,我是用的是HC-04蓝牙模块:
在这里插入图片描述
大家也可以选择其他蓝牙模块,这里主要注意的是两点

1) 波特率配置为115200

在这里插入图片描述

2)进入透传模式

我使用的这款HC04,波特率配置的AT指令为“AT+BAUD=115200”

在这里插入图片描述如果大家使用的其他蓝牙模块,请按照自己的模块使用手册进行配置。

3)引脚连接

在这里插入图片描述

4)PC蓝牙配对

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3、蓝牙OTA

1)新建连接

在这里插入图片描述
在这里插入图片描述
接下来我们可以重复IAP升级的那些操作,例如,按下数字3直接运行:
在这里插入图片描述
修改MDK工程,更新固件:
在这里插入图片描述

然后按下复位,发送数字1,选择自己的固件并上传:
在这里插入图片描述
在这里插入图片描述
  可以看到固件已经更新,到这里,蓝牙OTA的功能已经实现,我们使用的是SecureCRT软件通过串口以Ymodem协议的方式传输bin文件,感兴趣的大家可以尝试自己编写PC或Android上位机来完成Ymodem固件的发送。


  本期内容就到这里,如果在操作过程中有任何问题,可以在公众号"IOT趣制作"内留言,本期内容所有相关资料已上传,回复关键字“BLEOTA”或“0809”即可。

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

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

相关文章

Vscode 常用操作教程

一、语言换成中文 这是我们可以直接点击左边栏第四个图标搜索插件 chinese ,也可以直接ctrlshiftp快捷键也会出来如图所示图标,出来chinese 插件之后选择安装install,安装完成之后重新ctrlshiftp会出现如图所示页面 找到我的鼠标在的地方对应的中文,此时…

【工作中问题解决实践 十二】使用@JsonTypeInfo实现请求数据对象多态

最近在处理接口请求进行数据写入的一个case时,我希望上游只使用我一个写入接口去实现不同类型的数据写入,而上游的数据写入Model是各不相同的,这就要求我接口的一个对象可以应对上游不同类型对象的写入请求。关于Jackson的概念不再赘述&#…

SQL进阶--SQL的常用技巧

一、ORDER BY FIELD() 自定义排序逻辑 排序 ORDER BY 除了可以用 ASC 和 DESC,还可以通过**ORDER BY FIELD(str,str1,...)**自定义字符串/数字来实现排序。这里用 order_diy 表举例,结构以及表数据展示: 二、CASE 表达式 「case when then el…

UI设计师个人工作感悟5篇

UI设计师个人工作感悟一 工作一年了,结合我自身谈谈UI设计的重要性。现在主流的论坛建站程序有两种 Phpwind 和Discuz(Phpwind被阿里巴巴收购 Discuz被腾讯收购这两个论坛程序都是开源免费的),利用这两种程序我都分别建立过论坛,我第一次用的…

7-15 然后是几点

有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。 读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时…

高效解决在pycharm环境下的UserWarning: loaded more than 1 DLL from .libs这类问题

文章目录 问题解决方案Plan APlan B 解决! 问题 这说明因同时存在多个动态链接库而存在冲突,所以需要删除其中一个 解决方案 Plan A Plan B 如果Plan A没用,就重装numpy,因为这个库就是numpy的 pip uninstall numpy pip insta…

zabbix-6.4 监控 MySQL

目录 1、rpm安装zabbix_agentd服务 2、编写zabbix_agentd.conf文件 3、编写模板文件 4、创建mysql用户并赋权限 5、创建.my.cnf文件 6、将规则添加到SELinux策略中 注意: 若模板无法读取.my.cnf 信息,从而导致监控报错,可以尝试修改模…

使用Python将文本转换为语音的简易应用

正文: 在本篇博客中,我们将介绍如何使用Python编写一个简单的应用程序,将文本转换为语音。我们将使用pyttsx3库进行文本到语音的转换,并通过pygame库来播放生成的语音。 C:\pythoncode\new\text2speech.py 首先,我们…

ReentrantReadWriteLock

关于读写锁状态的存取 // ReentrantReadWriteLock.Sync static final int SHARED_SHIFT 16; static final int SHARED_UNIT (1 << SHARED_SHIFT); static final int MAX_COUNT (1 << SHARED_SHIFT) - 1; static final int EXCLUSIVE_MASK (1 <&l…

小白到运维工程师自学之路 第七十三集 (kubernetes应用部署)

一、安装部署 1、以Deployment YAML方式创建Nginx服务 这个yaml文件在网上可以下载 cat nginx-deployment.yaml apiVersion: apps/v1 #apiVersion是当前配置格式的版本 kind: Deployment #kind是要创建的资源类型&#xff0c;这里是Deploymnet metadata: #metadata是该资源…

快手商品详情数据API 抓取快手商品价格、销量、库存、sku信息

快手商品详情数据API是用来获取快手商品详情页数据的接口&#xff0c;请求参数为商品ID&#xff0c;这是每个商品唯一性的标识。返回参数有商品标题、商品标题、商品简介、价格、掌柜昵称、库存、宝贝链接、宝贝图片、商品SKU等。 接口名称&#xff1a;item_get 公共参数 名…

JS实现树形结构、一维数组以及map之间的转换

const treeData[ {id:1, name:中国, children:[ {id:11,name:河南省,children:[{id:111,name:南阳市,children:[{id:1111,name:淅川县,children:null}]},{id:112,name:郑州市,children:[{id:1121,name:中牟县,children:null}]}] }, {id:22,name:广东省,children:[{id:221,name:…

【【verilog典型电路设计之流水线结构】】

verilog典型电路设计之流水线结构 下图是一个4位的乘法器结构&#xff0c;用verilog HDL 设计一个两级流水线加法器树4位乘法器 对于流水线结构 其实需要做的是在每级之间增加一个暂存的数据用来存储 我们得到的东西 我们一般来说会通过在每一级之间插入D触发器来保证数据的联…

创建Azure资源锁

锁的介绍 在Azure中&#xff0c;资源锁是一种用于保护订阅、资源组或者单个资源的机制。它可以防止对受锁定的资源进行删除或修改操作&#xff0c;帮助确保资源的连续可用性和安全性。 Azure中的资源锁可以分为两种类型&#xff1a; 删除锁&#xff08;CanNotDelete&#xf…

实现Excel数据复制分录信息粘贴到金蝶单据体中

>>>适合KIS云专业版V16.0|KIS云旗舰版V7.0|K/3 WISE 14.0等版本<<< 实现Excel数据复制分录信息粘贴到金蝶单据体分录中,在采购订单|采购入库单|销售订单|销售出库单等类型单据中,以少量的必要字段在excel表格中按模板填列好,很方便快捷地复制到金蝶单据表体…

三分钟完美解决你的C盘内存过大爆红

一、清理回收站 二、清理桌面 建议一 不要在桌面放太多图标或者文件会占用过多的内存,可以放到其他盘建议二、 将位置移动到别的盘 三、手动删除下载文件与缓存文件 日常使用中会通过Windows下载各种文件资料到电脑中&#xff0c;它默认也是直接下载在C盘中的。如果我们在以…

ssm+JSP的乡镇自来水收费系统源码和论文PPT

ssmJSP的乡镇自来水收费系统源码和论文PPT014 开发工具&#xff1a;idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具&#xff1a;navcat,小海豚等 开发技术&#xff1a;java ssm tomcat8.5 一、课题背景与意义 随着我国经济建设迅速发展&#xff0c;乡镇规模日益扩大&am…

RK3568 HDMI接口

一.简介 HDMI接口&#xff0c;中文全称为高清多媒体接口。是一种全数字化视频以及声音发送接口&#xff0c;能够发送没有压缩的音频以及视频信号。HDMI接口可以使用在机顶盒、DVD播放机等设备商。除此之外&#xff0c;HDMI接口还可以同时发送音频以及视频信号&#xff0c;简化…

22款美规奔驰GLS450更换AMG GLS63原厂刹车卡钳系统,刹车效果强悍无比

AMG出品的大六活塞卡钳及大直径开孔刹车碟&#xff0c;所组成的制动套件。这套AMG出品的卡钳为制动生产名厂BREMBO为其代工&#xff0c;刹车碟是高锻钢锻造&#xff0c;耐高温耐用性能较高且打孔设计。

什么是事务,并发带来的事务问题以及事务隔离级别(图文详解)

一、什么是事务&#xff1f; 简单说就是逻辑上的一组操作&#xff0c;要么都执行&#xff0c;要么都不执行。 举个例子&#xff0c;假如小明要给小红转账100元&#xff0c;这个转账会涉及到两个关键操作&#xff1a;①将小明的余额减少100元。 ②将小红的余额增加100元 。但…