一.硬件资源

  1. STM32F407VET6  flash:512K
  2. SIMCOM7600CE模块(MQTT)

二.软件情况

工程代码分两个来做,一个是BootLoader工程代码,一个是APP应用工程代码。

注意对flash进行分区,这里我分4个区域,bootloader区、APP1区(运行的程序)、APP2区(存储待更新的程序)、FLAG区(标志位+待更新程序字节数)数据。但是注意这4部分数据必须在不同的扇区,不能有两部分数据处于同一扇区,因为写地址如果非 0XFF,那么会先擦除整个扇区且不保存扇区数据。建议使用1024K flash,操作空间更大一点。

基础知识就不多说了,只提一下思路和关键点:

思路:设备上电复位,运行BootLoader代码,BootLoader代码主要是根据FLAG区判断是否需要远程更新,如果不需要,则跳转至APP1区,运行应用程序代码;如果需要,则读取flash中APP2区域的数据,写进APP1区,然后清空FLAG区,跳转APP1区运行。主程序主要就是接收服务器的更新代码,写进APP2区,置位FLAG,然后重启。

关键点:

1.BootLoader工程代码需要在MDK中设置程序地址,程序是从0X08000000开始运行的,占用了128K,所以设置如下图所示:

2.APP的设置。

APP起始运行地址0X08020000 以及flash大小128K

这里要注意,中断向量表的问题。在主程序初始化的时候,对中断向量表进行偏移:

//中断向量表偏移
    SCB->VTOR = FLASH_BASE | 0x20000;

3.这里我们远程烧写的是bin文件而不是hex文件,所以还需要设置MDK,生产bin文件。(具体路径根据你的MDK安装路径来写)

还有很多需要优化的地方,比如远程升级的时候传输中断怎么办,如何重回上一个版本,就不多说了。

补充:

1.烧写程序的时候,记得不要点击全部擦除。

2.原子哥的例程是根据串口来做的,里面有很多判断不适合4G升级,需要作出改动

3.BootLoader跳转前,一定要在最后的跳转函数前,DeInit之前初始化的外设以及关掉中断()。如下图:

4.由于我是使用了ucosII操作系统,发现程序跳转过来之后,会在操作系统启动的时候卡住,目前还在找原因,有待补充。(原因已经找到:接收服务器更新包的数组太大,导致HardFault_Handler,数组调小后正常,可以考虑分包接收数据)

5.经过测试,已经成功完成了服务器远程升级功能。

STM32F407(ucosII)利用4G模块进行IAP远程升级相关推荐

  1. STM32F407开发板的HTTP模式IAP远程升级之官方例程移植

    版权声明:本文为博主原创文章,转载请注明出处:https://blog.csdn.net/wbdxz/article/details/82859237 关于远程升级的模板建立,可以参考下面的博文 ST ...

  2. 使用4G模块连接到远程服务器?这个过程我不太理解

    有个疑问,我在开发产品的过程中, 使用4G模块连接到远程服务器?这个过程我不太理解 4G连接服务器:基带->基站----->服务器??????????? WIFI连接服务器:无线网卡–&g ...

  3. STC51单片机实现IAP远程升级过程分享

    STC51单片机实现IAP远程升级过程分享 1.STC内部ISP更新机制 2.了解51单片机IAP分区 3.IAP分区的调用流程与IAP部分源码: 4.IAP步骤总结 5.源码下载 关于STC单片机I ...

  4. STM32 10个工程篇:1.IAP远程升级(一)

    清晨一大早起来开始撰写STM32 10个例程篇的第一章即串口IAP远程升级,虽然网络上有很多免费和付费的STM32教程,但是仍然不断地说服自己沉住气.静下心写一份独一无二的,这份独一无二中也凝聚了一名 ...

  5. Qt下面利用4G 模块SIM7600发短信调试总结

    项目需要在基于Qt的界面下发送短信,选用4G模块SIM7600通过AT指令发送短信,和小伙伴调了一天多,终于可以了,下面简单总结一下调试过程中遇到的问题和学习到的经验,供大家参考,少走弯路. 1.在网 ...

  6. 利用WiFi模块实现MicroPython远程开发

      MicroPython在很多嵌入式平台上都有着应用,包括 STM32F40x,ESP32,ESP8266,PicoPy等.基于MicroPython语言开发嵌入式系统,可以遵循相同的开发环境,不用 ...

  7. 我的物联网大学【第十章】:不能远程升级的4G模块都是耍流氓

    X电(化名)曾经是共享充电宝的明星企业. 2017年10月,X电以2亿的估值,获得了天使轮融资3000万,开始迅速铺货抢占市场. 在每一个餐桌上放一个单机版本的充电宝,用户扫码付款即可充电. 第一批货 ...

  8. 10分钟实现,4G模块从零开始连接阿里云IoT

    大家好,我是程序员小哈,又到了知识分享时间,今天我给大家分享一个如何利用4G模块连接阿里云物联网平台,如果对你有所帮助的话,还请文末点赞支持一下,你的支持是小哈哥前进最大的动力. 模块简介 FS704 ...

  9. 远程升级stm32程序_STM32IAP远程升级带C#上位机

    关注"电子芯吧客" ,每周都有精彩文章推荐 在很多场景应用中需要我们的控制器能够实现远程升级,比如我之前做的一个项目中,项目的主要需求就是老师的电脑能够获取学生的实验设备的实验数据 ...

最新文章

  1. 一分钟带你了解什么是“复杂度” 算法上的O(1)、O(n)、O(logn) 这些都是什么❓❓
  2. 关于Redis缓存,这3个问题一定要知道!
  3. Vue+Openlayers实现显示图片并分优先级多图层加载
  4. JavaScript Blob对象
  5. Server Tomcat v8.0 Server at localhost was unable to start within 45 seconds. 报错详细
  6. 微软Windows Mobile智能手机GPRS上网设置教程(转)
  7. Tesla P4测试
  8. python 字典性质描述_卧槽!Python还有这些特性(2):奇怪的字典
  9. TensorFlow Lite发布重大更新!支持移动GPU、推断速度提升4-6倍
  10. python实现批量转换文件编码(批转换编码示例)
  11. Java的各种中文乱码解决方法
  12. 【bug】VUE:Cannot read property '_withTask' of undefined
  13. nero linux4 序列号,nero9序列号_可以永久使用的nero9序列号
  14. python 官方中文文档(在线)
  15. JavaScript循环数组
  16. KU FPGA DDR4 SDRAM仿真/板卡测试
  17. 微信小程序+.NET(五) 音频格式转换-从.mp3到.wav
  18. 基于android的理财软件,基于Android的理财系统APP的设计
  19. 百度新闻爬虫搜索引擎实战---爬虫篇(2)
  20. 【自用】ESP32-S3新板子 从零配置micropython环境(安装CH343驱动等)

热门文章

  1. Guava系列之Cache
  2. Shell中的括号、双括号、方括号和双方括号
  3. dns服务器地址显示fec0,dns的服务器地址是fec0
  4. 作为一名程序员该如何向别人提问题
  5. VRML---第五章(动画流程和交互功能)
  6. 包大师联手中国质检协会颁布奢品鉴定标准,助力产业规范化发展
  7. 计算机论文免费的数据库有哪些,计算机数据库论文范文
  8. ad7793编程c语言,TDLAS检测系统的激光器驱动电路.pdf
  9. 码农西游 | 写一本技术书可以赚多少钱
  10. Linux下的NVIDIA显卡驱动失踪