0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

开发者案例|GC211实现MCU开发和OTA升级

机智云 2022-10-31 16:18 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文以依托 GC211 和秉火开发板,讲述如何实现MCU开发和OTA升级。用户如果将开发了的产品发布上线销售,后期需要更新固件和程序,就需要用到远程OTA固件升级,就能对已发布的产品进行远程升级。01硬件材料1.机智云4G模组GC211,此模组采用中移模组ML302,支持网络,移动,联通,电信4G网络,可前往机智云官方和淘宝店铺购买。
e7fcc0dc-5732-11ed-b116-dac502259ad0.png2.秉火【F103开发板-指南者】

02云端开发

2.1、云端部署
创建新产品,可根据自己需求选择。
e94b2c26-5732-11ed-b116-dac502259ad0.png

添加如下数据点,可根据自己需求

e98ccb22-5732-11ed-b116-dac502259ad0.png
生成STM32F103代码下载备用
e9e6fba6-5732-11ed-b116-dac502259ad0.png03硬件部分说明3.1 关于STM32启动ARM7/ARM9 内核的控制器在复位后,CPU 会从存储空间的绝对地址0x000000 取出第一条指令执行复位中断服务程序的方式启动,即固定了复位后的起始地址为0x000000(PC =0x000000)同时中断向量表的位置并不是固定的。然而,Cortex-M3 内核启动有3 种情况:1、通过boot 引脚设置可以将中断向量表定位于SRAM 区,即起始地址为0x2000000,同时复位后PC 指针位于0x2000000 处;2、通过boot 引脚设置可以将中断向量表定位于FLASH 区,即起始地址为0x8000000,同时复位后PC 指针位于0x8000000 处;3、通过boot 引脚设置可以将中断向量表定位于内置Bootloader 区;Cortex-M3 内核规定,起始地址必须存放堆顶指针,而第二个地址则必须存放复位中断入口向量地址,这样在Cortex-M3 内核复位后,会自动从起始地址的下一个32 位空间取出复位中断入口向量,跳转执行复位中断服务程序。对比ARM7/ARM9 内核,Cortex-M3 内核则是固定了中断向量表的位置而起始地址是可变化的。总结一下STM32 的启动文件和启动过程。
首先对栈和堆的大小进行定义,并在代码区的起始处建立中断向量表,其第一个表项是栈顶地址,第二个表项是复位中断服务入口地址。然后在复位中断服务程序中跳转C/C++标准实时库的main 函数,完成用户堆栈等的初始化后,跳转.c 文件中的main 函数开始执行C 程序。假设STM32被设置为从内部FLASH 启动(这也是最常见的一种情况),中断向量表起始地位为0x8000000,则栈顶地址存放于0x8000000处,而复位中断服务入口地址存放于0x8000004 处。当STM32 遇到复位信号后,则从0x80000004 处取出复位中断服务入口地址,继而执行复位中断服务程序,然后跳转main函数,最后进入mian 函数。3.2OTA 需求分析我们将建立两个工程,分别是Bootloader 还有APP,我们将Bootloader下载到FLASH 空间0x8000000 地址处,那么STM32 启动后会首先执行我们的Bootloader 程序,然后就可以按照我们意愿实现OTA 了。►FLASH区间划分
根据需求,我们将STM32F103VET6 这个芯片Flash 空间划分出4 个区域:Bootloader、FLAG、APP、APP_BAK。四个区间作用描述如下: Bootloader: 存储Bootloader 固件,MCU 上电后首先运行该固件。
 FLAG: 存储有关升级的相关标志位,Bootloader 和APP 都需要操作该区域。
升级标志位(2B)
固件大小(4B)
MD5加密数据(16B)
 APP:存储用户程序固件。
 APPBAK: 临时存储云端下发的新固件,升级固件的一个过渡存储区。
STM32F103VET6分区方案如下图所示:
ea1b045a-5732-11ed-b116-dac502259ad0.png
3.3 BOOTLOADER分区部分
3.3.1 Bootloader程序流程
Bootloader 的主要职能是在有升级任务的时候将 APPBAK 分区里面的固件拷贝到 APP 区域。当然,这期间需要做很多的工作,比如升级失败的容错等等。具体的流程可以参考图示。需要注意的是,在校验 MD5 正确后开始搬运固件数据期间,MCU 出现故障(包括突然断电),MCU 应发生复位操作(FLAG 区域数据未破坏),复位后重新开始执行 Bootloader,从而避免 MCU 刷成板砖。
ea313270-5732-11ed-b116-dac502259ad0.png
3.3.2 Bootloader程序配置
为了方便构架,此处我采用cubemx构建项目,生成keil工程。
创建STM32F103VE项目
ea58134a-5732-11ed-b116-dac502259ad0.png配置外部时钟
eace39d0-5732-11ed-b116-dac502259ad0.png配置时钟72M
eb087ed8-5732-11ed-b116-dac502259ad0.png
配置debug为serisl wire
eb22e4d0-5732-11ed-b116-dac502259ad0.png配置串口4为BootLoader的日志打印口。
eb797142-5732-11ed-b116-dac502259ad0.png生成keil代码添加驱动flash.c,gagent_md5.c和app.c以及对应的组,如何添加此处不过多介绍(基础的软件操作),只提供文件路径。
eb9a69c4-5732-11ed-b116-dac502259ad0.pngebc2f0e2-5732-11ed-b116-dac502259ad0.pngebecb7b0-5732-11ed-b116-dac502259ad0.pngec06db40-5732-11ed-b116-dac502259ad0.pngec8790dc-5732-11ed-b116-dac502259ad0.png
驱动文件的编写以及函数介绍我此处不过多介绍,可以在原文地址的附件进行下载源文件,也可以在文章末尾复制代码。重点代码讲解Main.c添加头文件#include "app.h"eca95c80-5732-11ed-b116-dac502259ad0.png主函数添加APP_Process();ecf273ac-5732-11ed-b116-dac502259ad0.png根据自己分区大小设置区域,我的是18K,2k,54k,54k
ed1bbce4-5732-11ed-b116-dac502259ad0.png
3.3.3Bootloader编译设置
按照 Bootloader 流程编写好代码,需要我们对 KEIL 工程做相应配置,需要注意的是编译的 Bootloader 固件大小不超过最大可允许的 18KB。Keil 编译器需要设置如下:
ed4322f2-5732-11ed-b116-dac502259ad0.pngFlash 烧写地址设置有效
ed905ad6-5732-11ed-b116-dac502259ad0.png设置ST-LINK按块擦除 FLASH 区间和烧写程序
eda9dcc2-5732-11ed-b116-dac502259ad0.pngede23e1e-5732-11ed-b116-dac502259ad0.pngee7027a6-5732-11ed-b116-dac502259ad0.png编译烧录程序,到此BootLoader编写烧录完成。eea77f58-5732-11ed-b116-dac502259ad0.png
3.3.4APP程序分区部分
固件接收流程
做好 BOOTLOADER 工作后,我们开始写 APP 分区的代码。APP 分区固件的编写要注意硬件版本号和软件版本号,软件版号作为升级迭代很重要的标志。需要注意的是,中断向量地址偏移的定义,这个地方需要我们尤其注意,我在开发过程中在这个地方排查了好长时间。STM32 标准库默认中断向量地址偏移为0x0,但是我们APP 实际的偏移是0x5000。如果不修改,APP 也可以正常加载运行,但是不会相应中断。所以,我们需要根据实际APP 下载的起始地址,对中断向量地址偏移做定义。ef0153c0-5732-11ed-b116-dac502259ad0.png
3.4 CUBEMX部署
解压云端生成的代码,由于生成的代码是STM32F103c8的,我们需要通过CUBEMX转换成STM32F103VET6的代码来适应我们的秉火开发板,创建一个新的cubeMX项目,导入自动代码的CUBEMX工程.
ef1480d0-5732-11ed-b116-dac502259ad0.png目录保存在解压代码所在的路径。
ef481080-5732-11ed-b116-dac502259ad0.png修改时钟树为72M,注意需要同BootLoader时钟。
ef8bddba-5732-11ed-b116-dac502259ad0.png根据项目需求以及我们自己创建的数据点,我们需要控制RGB灯,蜂鸣器,DHT11,在此处我们需要对引脚进行初始化。
efbaf8a2-5732-11ed-b116-dac502259ad0.png配置RGB灯,采用定时器输出PWM控制。
f034e2d4-5732-11ed-b116-dac502259ad0.png有源蜂鸣器,和默认代码按键2冲突,修改按键2的GPIO为PB15
f04a7bf8-5732-11ed-b116-dac502259ad0.png
3.5 配置温湿度传感器DHT11
为每个单独的文件生成.C.H文件,方便调用头文件
f0bd669a-5732-11ed-b116-dac502259ad0.png生成KEIL的代码
f0eb4a6a-5732-11ed-b116-dac502259ad0.png到此我们就完成了项目的构建。3.6 编译器设置
因为硬件FLASH 空间限定,我们需要对APP 的固件大小做严格的限制。本方案,
针对秉火开发板 我们可允许的最大固件为54KB。需要升级的新固件同样最大可支持54KB。
1、设置FLASH 固件下载地址
f108b320-5732-11ed-b116-dac502259ad0.png2、配置中断向量偏移地址设置
f15e659a-5732-11ed-b116-dac502259ad0.png3.重新构建工程,添加相关头文件。
f172623e-5732-11ed-b116-dac502259ad0.png4.添加flash.h,flash.h, gagent_md5.c, gagent_md5.h, app.c文件到项目
f1d0ae84-5732-11ed-b116-dac502259ad0.png5. 在mian.c里面添加一下头文件
f20dc5a8-5732-11ed-b116-dac502259ad0.png在main.c里面添加如下代码
f22a2d38-5732-11ed-b116-dac502259ad0.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    19265

    浏览量

    405336
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    GD32 MCU开发者社区正式上线,连接技术创新的每一种可能

    兆易创新GigaDevice 宣布GD32 MCU开发者社区已正式上线。在智能化与数字化持续发展的今天,芯片产业不断迈向智能化、场景化和生态化,开发者生态正在成为驱动技术创新与产业落地的重要力量
    的头像 发表于 05-25 10:02 343次阅读

    DGUS2升级OTA升级等功能开发更加便捷!

    为满足越来越多的OTA升级应用需求,迪文科技发布DGUS2_V71版本固件,优化OTA升级、数据备份相关功能开发接口,简化
    的头像 发表于 05-14 17:57 251次阅读
    DGUS2<b class='flag-5'>升级</b>,<b class='flag-5'>OTA</b><b class='flag-5'>升级</b>等功能<b class='flag-5'>开发</b>更加便捷!

    建言有礼 | RA 生态社区再次升级,共筑更懂开发者的 RA 家园!

    亲爱的RA/RZ开发者、工程师、合作伙伴们:大家好!陪伴大家走过无数项目日夜、沉淀海量技术干货的瑞萨RA生态社区(www.ramcu.cn),即将再次升级!为了让升级后的社区更贴合您的开发
    的头像 发表于 04-15 17:43 805次阅读
    建言有礼 | RA 生态社区再次<b class='flag-5'>升级</b>,共筑更懂<b class='flag-5'>开发者</b>的 RA 家园!

    迅为电子RK3568+RK3588开发板资料焕新升级!多维度优化助力开发者效率提升

    迅为电子RK3568+RK3588开发板资料焕新升级!多维度优化助力开发者效率提升
    的头像 发表于 03-26 15:06 852次阅读
    迅为电子RK3568+RK3588<b class='flag-5'>开发</b>板资料焕新<b class='flag-5'>升级</b>!多维度优化助力<b class='flag-5'>开发者</b>效率提升

    一文吃透RK平台OTA升级开发:从逻辑到调试的完整指南

    ,能让开发者高效解决固件更新、功能迭代等问题。本文将从升级逻辑、核心技巧、调试要点到问题排查,全方位拆解 RK 平台 OTA 升级开发,附关
    的头像 发表于 02-09 16:26 1011次阅读
    一文吃透RK平台<b class='flag-5'>OTA</b><b class='flag-5'>升级</b><b class='flag-5'>开发</b>:从逻辑到调试的完整指南

    NSSine™ MCU如何重塑数字电源与电机开发 | 纳芯微首次亮相RT-Thread开发者大会

    在刚结束的2026RT-Thread20周年庆典暨开发者大会,“芯片与生态”论坛上,纳芯微电子市场总监宋昆鹏带来了一场聚焦于高实时性控制的技术分享,向开发者深度解析了其NSSine系列实时控制MCU
    的头像 发表于 01-26 12:07 1721次阅读
    NSSine™ <b class='flag-5'>MCU</b>如何重塑数字电源与电机<b class='flag-5'>开发</b> | 纳芯微首次亮相RT-Thread<b class='flag-5'>开发者</b>大会

    2025华为开发者大赛暨开发者年度会议成功举办

    开发者大赛总决赛、CEO圆桌、主论坛大咖分享、分论坛技术演讲、开发者展区&CodeLabs等多元议题,推动云开发工具链、智能体开发、具身智能等前沿技术实战应用,助力
    的头像 发表于 12-31 13:32 1204次阅读

    2025开源鸿蒙开发者激励计划正式启动

    11月21日,2025开放原子开发者大会盛大启幕,聚焦“AI共智,开源共享”主题,吸引了来自全球的开发者、企业技术领袖、社区维护及高校科研力量参会。作为大会的重要组成部分,开源鸿蒙技术分论坛同期
    的头像 发表于 11-27 14:44 930次阅读

    RT-Thread睿擎开发者网站重磅升级 | 产品动态

    技术赋能,体验焕新尊敬的开发者,我们很高兴地宣布RT-Thread睿擎开发者网站已完成全面升级!本次升级基于全新的vuepress-theme-plume框架重构,带来更卓越的性能表现
    的头像 发表于 11-12 17:29 1684次阅读
    RT-Thread睿擎<b class='flag-5'>开发者</b>网站重磅<b class='flag-5'>升级</b> | 产品动态

    华为云与开发者共赢AI未来

    ,与开发者共赢”主题演讲,详细阐述了华为云生态的最新进展,并宣布华为开发者空间全面升级,全新集成多种AI原生应用开发能力。
    的头像 发表于 09-20 15:58 1928次阅读

    NVIDIA DRIVE AGX Thor开发者套件重磅发布

    这款由 NVIDIA DriveOS 7 驱动的开发者套件能够帮助开发者们打造出更安全的智能汽车和交通解决方案。
    的头像 发表于 09-04 11:20 1759次阅读

    曙光网络SugonRI开发者社区正式上线

    在人工智能与工业深度融合的大潮中,工业软件正在成为推动产业升级的关键引擎。为了让更多开发者快速掌握工业级编程技术、共享行业实践成果,曙光网络正式推出开发者社区——曙睿(SugonRI)开发者
    的头像 发表于 09-04 09:58 1266次阅读

    技术笔记 | Ubuntu 系统 OTA 升级全流程详解

    开启、命令使用到实战案例与问题排查,为开发者提供一套可直接落地的操作指南一、recovery配置updateEngine支持因OTA升级过程中需要进入到recov
    的头像 发表于 07-31 08:32 1570次阅读
    技术笔记 | Ubuntu 系统 <b class='flag-5'>OTA</b> <b class='flag-5'>升级</b>全流程详解

    矽速科技正式入驻 RuyiSDK 开发者社区,共建 RISC-V 开发者生态!

    近日,深圳矽速科技正式入驻RuyiSDK开发者社区,携手社区共同推动RISC-V技术的发展与广泛应用,为开发者提供一个更加便捷高效的开发环境。关于RuyiSDKRuyiSDK是中国科学院软件研究所
    的头像 发表于 07-10 11:00 1488次阅读
    矽速科技正式入驻 RuyiSDK <b class='flag-5'>开发者</b>社区,共建 RISC-V <b class='flag-5'>开发者</b>生态!

    HDC 2025开发者主题演讲精彩回顾

    开发者解决方案升级等内容,同时多位生态伙伴分享基于HarmonyOS的最新开发实践,为开发者提供切实可行的创新思路,进一步推动鸿蒙生态的繁荣发展。会上还举行了HarmonyOS极客马拉
    的头像 发表于 07-09 11:20 1579次阅读