IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 代号OneNET02 STM32+ESP8266 WIFI系列-第3节-修改应用程序STM32单片机通过ESP8266连接WIFI访问OneNET OTA服务器实现SOTA远程程序升级(2) -> 正文阅读

[嵌入式]代号OneNET02 STM32+ESP8266 WIFI系列-第3节-修改应用程序STM32单片机通过ESP8266连接WIFI访问OneNET OTA服务器实现SOTA远程程序升级(2)

第3节主要的任务是,将第1节的应用程序“ESP8266_ONENET_MQTT_V1.0_220927”和第2节的应用程序“OneNET02_OTA_ APP_V1.0”进行组合,也可以理解为,最终我需要能将第1节的应用程序通过我们在第2节里介绍的一样通过OneNET OTA服务器将程序进行远程升级实现STM32单片机控制ESP8266将采集的数据发送到OneNET云服务器显示。

第一步 认识应用程序理解空间分配: 如图1,为第2节实现的OTA远程升级的应用程序“OneNET02_OTA_ APP_V1.0”的主函数截图,可以看到图1的1位置定义了偏移地址,2位置设置一个FLASH的地址的值,3位置为重启STM32单片机。这三步非常重要是应用程序里必须要的。我这里说一个应用场景,STM32单片机里应用程序1也就是V1.0版本的实现每隔10S有STM32单片机通过ESP8266向云服务器上报数据,现在我需要将程序升级下,将间隔时间修改成每隔60秒,这个时候我该如何做呢,如果实现远程升级呢。

V1.0应用程序开机运行程序时执行了图1的1位置的代码,这个时候STM32单片机就自动跳转到0x08000000+0x7000的位置去执行,这个地址怎么理解呢?0x08000000是STM32F103CBT6芯片的FLASH首地址,0x7000转换为字节数就是28K,所以对于该芯片来说,应用程序存储在了FLASH的第28K开始的位置,我们知道这个芯片有128K的FLASH空间,那就说后面100K的存储空间可以用来存储应用程序。

图1

在第2节我们下载的测试程序“OneNET02_OTA_ APP_V1.0”的大小是12K多一点所以空间是够用的。也就说我们后面要升级的程序只要小于100K在STM32F103CBT6这款芯片都可以实现升级。那么从0x08000000开始到28K之前的FLASH空间用来做什么呢?对了,就是用来存储我们在第2节介绍的“OneNET02_OTA_ Boot Loader_V1.0”引导程序。

我想到这里大家应该对空间存储和远程程序写入有一个大概的印象了吧。单片机上电先从0x08000000开始执行“OneNET02_OTA_ Boot Loader_V1.0”引导程序,开始判断"第62K位置的值是0xFF07还是0x0000"(这个地址要根据自己应用程序的大小改变不能和应用程序共用一个空间),如果是0xFF07则直接跳转到0x7000执行从第28K地址开始存储的应用程序的代码。应用程序执行后在执行的时候如果接收升级命令比如我们程序里写的有按键按下,那么程序就会去执行图1的2位置在"第62K位置"写入0x0000,接着执行3位置控制STM32单片机重新上电,STM32重新上电后就可以进行升级了,升级完后再次重启单片机则可以执行升级后的应用程序。

第二步 设置bin文件生成:如图2 打开“ESP8266_ONENET_MQTT_V1.0_220927”程序,图2的按1 2 3位置的顺序 设置生成bin文件的命令和路径,这个路径怎么设置,这个很关键,下面我对这个路径进行一个比较简单的说明:
C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe ?--bin -o ?.\PROJECT\app1_user.bin ?.\Objects\PRO.axf
找到Keil安装路径下的fromelf.exe小工具,找到工程文件夹下的PROJECT文件夹下的Objects文件夹下的PRO.axf小工具,在工程文件夹下的PROJECT文件夹下的PROJECT的文件夹生成bin文件。按这个文字说明大家根据自己的“PRO.axf”所在的路径和要存放的bin路径以及Keil安装的位置进行修改。重新编译后可以看到图2的4位置编译信息多了一条提示信息,只有这个条信息生成了才算bin文件生成了。

图2?

打开文件找到“工程文件夹下的PROJECT文件夹下的PROJECT”如图3,可以看到生成的“app1_user.bin”文件,图3的位置可以到升级文件的大小为7K。

图3

第三步 修改程序:首先根据实际应用程序存储空间修改KEIL的设置,如图4,图4的3位置为应用程序的开始位置为,4位置为应用程序的存储上限位置。可以看到我设置的程序应用程序是从0x8007000开始执行,占用最大空间为0xB800(46K)。

图4

如图5为修改后的应用程序,图5的2位置为编译后的情况并生成了最新的bin文件,1位置为按键按下设置升级标志位,并重启STM32。

图5

第四步 服务器设置升级内容:在第2节已经下载了“OneNET02_OTA_ Boot Loader_V1.0”引导程序的STM32单片机控制板按下按键,通过USB转串口模块的RXD链接单片机的TXD引脚来监控单片机串口输出状态,如图6为单片机重启后程序进入升级状态的显示的情况,图6的1位置为AT指令设置ESP8266链接WIFI以及与OTA服务器链接,2位置为上报版本号,3位置为检测服务器是否有升级任务下发。具体的讲解第2节。

图6

如图7,添加升级包,可以看到图7的2位置是新添加的BIN文件,接着如第2节的讲解进行“验证升级”和“升级设备列表”的相关操作后。可以看到如图8,图8的1位置为串口监控的STM32从OTA服务器下载BIN文件的过程,每发一条信息下载128个字节,2位置为服务器上根据STM32单片机上报的下载进度并显示。可以看到图9为升级后的效果,图9的1位置OTA云服务器显示升级完成,图2为串口监控显示的应用程序已经开始执行并执行了通过ESP8266链接服务器的过程,接着3位置为上报数据的过程,具体的讲解看第1节。

图7?

图8

?图9

如图10,为程序升级后的效果,1位置为服务器接收到数据,2位置为串口监控的数据,可以看到这个效果和第1节里讲解的效果是一样的,不过我们这个程序不是通过下载器下载进去的,而是通过OTA服务器远程在线通过ESP8266的WIFI的方式下载进去的。

图10

希望我的文章能帮到大家,文章里涉及到的资料,可以 搜索 W/X公众号 “和我学单片机”回复“OneNET02”也可以获得源代码附件。


?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:58:04  更:2022-10-08 21:00:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:13:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码