一.硬件资源

  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. 【智能家居篇】wifi网络结构(上)
  2. Web动画API教程:可爱的运动路径(Motion Path)
  3. Cucumber 入门一
  4. 凯斯西储大学计算机工程排名,[转载]凯斯西储大学排名及世界排名【研究生】...
  5. Redmi K40游戏增强版外观配置前瞻:价格成唯一悬念!
  6. 关于记录每天”要完成的事项“和”未完成事项“,(尤其是周末时,对未完成事项的记录一定要全)-----工作方式
  7. android调webview的方法,Android中的WebView详解
  8. shell学习之跳出循环
  9. catalina java opts_CATALINA_OPTS与JAVA_OPTS – 有什么区别?
  10. 从唐虞夏商宋五字的甲骨文本意来重温那段历史。
  11. pyechart可视化18式丨从柱形图的变化, 搞懂pyechart作图套路
  12. python 二维列表_python二维列表
  13. 程序员成为“备胎”的5年,我一直在等...(外包——字节跳动)
  14. 【论文笔记】UBR4CTR:User Behavior Retrieval for Click-Through Rate Prediction (SIGIR 20)
  15. 【运维工程师主要做哪些工作】运维工程师
  16. fabs () 函数
  17. 如何注册一个顶级域名?需要注意哪些事项?
  18. C语言一秒钟看懂for循环和while循环的用法?
  19. 【每天一个 Linux 命令】网络相关命令(ifconfig、route、ping、traceroute、netstat、ss、telnet、rcp、scp)
  20. 10 Java基础 多线程2

热门文章

  1. 云南python专业的好大学_云南只有云南大学值得上?这几所大学也很值得!
  2. 入职中国银行内审部门
  3. XSS漏洞总结之小试牛刀
  4. 记一次,继承出现的问题“cannot access its superclass”
  5. 三维图像处理_医学图像处理案例(六)——生成血管三维模型
  6. 如何将自己的树莓派打造成“渗透测试神器”
  7. 【Ardiuno】Ardiuno+MPU6050读取原始加速度并显示
  8. python源程序执行的方式有哪些_python源程序执行的方式有什么
  9. 这种蔬菜水果店管理技巧,简直就是王炸操作!
  10. 魔霸新锐5联想拯救者R9000(2021新版电脑)使用Vmware蓝屏问题