一、准备与简介
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”即可。