STM32F10X系列通用OTA bootloader移植与使用指南

2023-05-16

基于STM32F10X系列通用OTA bootloader原理、移植与使用全指南

    • 写在前面
      • 这几天我都做了什么呢?
      • 有什么感受?
    • 开始移植

写在前面

从2020.1.26到2020.1.30这5天,我的较多研究精力放在AVR和STM32的bootloader机制,做了一些阅读、实验、编写和移植的工作,最后才有了这篇文章,算是一个阶段成果汇报。
这里先简单总结磨叽一小下,接下来的小节我会尽可能详细的记录和讲解这几天的开发与研究过程。

这几天我都做了什么呢?

1.翻阅了一些AVR和STM32关于ROM存储、划分与烧写;向量表;应用跳转资料。
2.了解常用文件传输协议,并深入研究一种(我深入研究的Xmodem协议):
(1)查阅文献并解决一些疑惑和问题,查看Xmodem规范
(2)阅读基于AVR的Xmodem协议IAP更新bootloader源码
(3)阅读并完善Xmoden协议的java实现源码
(4)基于Windows超级终端与sscom/超级终端进行协议验证实验
3.做了一些OTA升级的上位机工作:
(1)使用WCH提供的CH34X android驱动库开发基于OTG的android下CH340T的驱动与串口通信demo
(2)将Xmodem协议移植到andrioid平台,加以封装并完善了bug。
(3)Windows与android利用串口基于Xmodem传输文件验证实验。
4.了解并使用相关工具:
超级终端、HEX22BIN转换工具、ICCAVR7.22和KEIL5等。
5.阅读了几个前人所写的优秀代码:
AVR@Xmodem、STM32@Ymodem等。
6.有了上述准备工作,最后着手制作基于STM32F10X系列通用OTA bootloader。

有什么感受?

一.bootloader本身并不难,难的是牵扯的东西很多。
协议,单片机,相关软件这些都得了解差不多才行。具体什么是差不多我也说不太精确,但我的感受是:
1.阅读代码时能主动提出几个问题并通过各种方式解决疑惑。
2.亲手至少做过一个验证实验。
3.能发现网上的不同文章间的区别,重点;能够看懂他们;甚至能够找出其中写的错误

二.网上的错误有时候很多
网上的错误有时候很多呦,而且大家一抄一,都采用的代码也可能有bug,我就碰到很多次了这种问题。
还有一些代码被做了一点改动,代码本身就有问题,改正了就能运行了,也不知道是故意的还是怎样,咱们不要往坏方向揣摩别人,自己做到合理采用网上的代码,保留一些质疑和验证的空间就好。(等哪天写一个勘误集锦?哈哈哈)
三.研究和开发要顺应潮流和时代
AVR可以说是最早可以自编bootloader的单片机了,但现在随着市场和应用的要求,它的使用越来越少了,这导致讲解资料和代码实例在网上的流失,有很多工具和软件已经不能在新版本windows上运行,能提供的功能也相对较少,这就给研究造成了一定的困难。
本开始想最先自编AVRbootloader的,后来转为先实现STM32的bootlader。

开始移植

移植的配置大多是都是在“Options for Target ‘Template’”选项,也就是顶部栏中魔术棒 的图标,主要分为两大步
第一大步:根据你的单片机型号修改相关容量宏与启动文件
(1)在第一栏“Device”当中
在这里插入图片描述
(2)设置ROM容量宏
在第六栏“C/C++”当中
在这里插入图片描述
可以这么认为:
flash容量<=32k 改为 STM32F10X_LD
64k<= <=128k 改为STM32F10X_MD
256<= <=512k 改为STM32F10X_HD
ROM容量怎么看(服务到家):
在这里插入图片描述
6:32K 8:64K
B:128K C:256K
D:384K E:512K

(3)选择合适的启动文件
在CORE当中按上面的ROM容量选择正确的
在这里插入图片描述

第二大步:为bootloader和app划分各自的ROM地址
(1)在第二栏“Target”当中
在这里插入图片描述
先解释名词:
IROM:internal rom 内部ROM,指的是集成到SoC内部的ROM
IRAM:internal ram 内部RAM,指的是集成到SoC内部的RAM
start就是ROM开始的地址,这里就是默认的0x08000000
(PS:0x8000000和0x08000000是一个东西,前面的零没用的,但数字后面的零有用呀!)
size就是你要给bootloader留多大的空间,这里是0x2500,也就是10240字节,10kB
size大小怎么取:
编译一下程序,在Build Output栏中有这样的行
在这里插入图片描述
Code为程序代码部分
RO-data 表示 程序定义的常量 const temp;
RW-data 表示 已初始化的全局变量
ZI-data 表示 未初始化的全局变量
Total RO Size (Code + RO Data)
Total RW Size (RW Data + ZI Data)
Total ROM Size (Code + RO Data + RW Data)
也就是说,将前三项加起来就是bootloader占用的rom大小,只要size比这个大就行了
(PS:一般size取整,我这里是10kb,远远够用了,也留了足够空间给app)

(2)在倒数第三栏“Linker”中选择

勾选Use Memory Layout from Target Dialog选项(选中这一项实际上是默认在Target中对Flash和RAM的地址配置)
在这里插入图片描述

(3)在倒数二栏“Debug”当中
在这里插入图片描述
Download Function 要按照我这个选
Start和size要按之前的start和size填写好

(PS:有人问这个RAM for Algorithm是什么:
RAM for Algorithm是用来在IRAM1区域划分一段空间,用来运行flash下载算法(可理解为一个程序),从而给MCU下载代码。但是这个空间只在下载代码的时候有用,下载完了代码以后,这段空间就可以被你的APP代码(你下载的代码)占用的,相当于释放了。这个保持默认就可以了)

(4)在common.h中填写正确的app启动地址(就是你的start+size)
在这里插入图片描述
这里操作完移植工作就基本结束啦,赶紧烧写一下看看bootloader能不能用吧:
bootloader使用串口1(PA9 TX ; PA10 RX)
波特率:115200 N 8 1
烧写协议:ymodem

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32F10X系列通用OTA bootloader移植与使用指南 的相关文章

  • 小车yolo机械臂(三)ROS消息订阅监听 rospy.Subscriber 订阅监听yolo python实现订阅/darknet_ros/bounding_boxes topic

    目录总览 小车yolo机械臂 xff08 一 xff09 ros下gazebo搭建小车 xff08 可键盘控制 xff09 安装摄像头仿真 加载yolo检测识别标记物体 小车yolo机械臂 xff08 二 xff09 机械臂仿真 ros下从
  • ESP32-CAM实现局域网/远程视频传输

    手上这个ESP32 CAM买回来已经放了一个学期了 xff0c 最近才开始玩 xff0c 试了试用它来实现视频传输 局域网的视频传输比较简单 xff0c 基本能正确把例程烧进去就可以了 xff0c 这篇文章主要记录一下远程视频传输的实现 E
  • Debian 9.5  中文输入问题

    刚安装完debian9 5 发现输入法无法切换 xff0c 网页显示不了中文 找设置找不到修改的地方 xff0c 于是上网查教程 一开始按照教程需要安装 xff1a fcitx ui classic xff0c fcitx ui light
  • Hive_基于Hive的网站日志分析

    文章目录 概述1 引出需要进行数据预处理的必要性 toc 2 使用RegexSerDe处理apache或者ngnix日志文件 toc 3 根据不同业务拆表 toc 3 1 需求分析3 2 拆表 4 数据清洗 toc 4 1 Hive自定义函
  • python如何判断用户输入回车键?--关于input()函数的前世今生

    前言 最近在写代码的时候 xff0c 需要判断一下用户是不是敲了回车键 xff0c 于是写出了这样的代码 xff1a span class token keyword if span span class token builtin inp
  • PyTorch版YOLOv4训练自己的数据集---基于Google Colab

    colab简介 Google Colaboratory是谷歌开放的一款研究工具 xff0c 主要用于机器学习的开发和研究 工具优势 xff1a Google Colab最大的好处是给广大的AI开发者提供了免费的GPU使用 你可以在上面轻松地
  • Efficientnet_pytorch训练自己的数据集,并对数据进行分类

    准备训练的数据集 相关代码已整理至github https github com whisperLiang efficientnet pytorch git 相关代码已整理至码云 xff1a https gitee com whisperl
  • 水下图像色彩还原(基于可见光衰减及图像去雾算法)

    参考源 参考论文 xff1a UnderwaterHazeLines BMVC2017 Github项目地址 xff1a https github com danaberman underwater hl git 对论文的一些重述 水下图像
  • 强化学习TD3算法笔记1——论文解读

    相关论文 TD3 xff1a TD3 Double DQN Double DQN DDPG DDPG TD3论文结构 摘要 xff1a 提出Actor Critic面对的问题 xff0c 概括了TD3算法和效果引言 xff1a 提出当前对于
  • Efficientnet_pytorch_cbam_gui

    大致说明 这是一个基于efficientnet模型的图像分类方案 模型融入了cbam注意力机制模块 xff0c cutmix CrossEntropyLabelSmooth auto augment等tricks帮助原生的effcientn
  • 可靠性udp传输大文件

    高级计算机网络大作业 可靠性udp传输大文件 实验数据zstd压缩1G文件 xff08 延迟100ms 丢包1 xff09 0 1G文件 xff08 延迟100ms 丢包1 xff09 0 01G文件 xff08 延迟100ms 丢包1 x
  • 一些奇怪问题的解决汇总

    vscode ssh远程连接 问题描述 xff1a Setting up SSH Host 192 168 78 133 details Initializing VS Code Server 一开始尝试了网络的各种方式 xff0c 比如删
  • 控制系统--系统结构图

    结构图基本单元 信号线 表示信号流向 引出点 表示信号引出 xff0c 被引出信号与原信号完全相同 或 从同一位置引出信号完全相同 比较点 将所有输入信号做代数运算 方框 表示信号经过传递函数为 H s
  • 字符串及处理之三: 使用TCHAR系列方案

    使用TCHAR系列方案编写程序 TCHAR是一种字符串类型 xff0c 它让你在以MBCS和UNNICODE来build程序时可以使用同样的代码 xff0c 不需要使用繁琐的宏定义来包含你的代码 TCHAR的引入 xff0c 主要是在Tch
  • Chrome解决“github.com拒绝了我们的访问请求”

    目录 1 网站查询特定IP 2 host文件修改 3 刷新DNS 如果你在Chrome访问github com时出现以下错误 xff1a 本博主之前的Chrome和Edge都无法访问github官网 xff0c 然后就来到了万能的C站找到了
  • STC12C5A60S2_LCD1602驱动

    文章目录 LCD1602 HLCD1602 cmain c LCD1602 H 代码如下 xff1a span class token macro property span class token directive hash span
  • 猿创征文|机器学习实战(8)——随机森林

    目录 1 随机森林 2 极端随机树 3 特征重要性 4 提升法 4 1 AdaBoost 4 2 梯度提升 机器学习实战 xff08 7 xff09 中我们已经提到 xff0c 随机森林是决策树的集成 xff0c 通常用bagging方法训
  • 总结2014——迷茫以及迷茫过后的坚持

    首先 xff0c 借用一句话和大家共勉 xff1a 少一些功利主义的追求 xff0c 多一些不为什么的坚持 xff01 xff01 不知不觉15年也快过了1个月了 xff0c 还是想着要为14年做一下总结 xff1a 记录一下自己的历程 今
  • 汇编总结:lea指令

    ea指令变种 按大小分类 leaw 2个字节 leal 4个字节 leaq 8个字节 lea的用法 leaq a b c d rax 首先lea指令是mov指令的变种 xff0c 据说 xff0c lea指令是x86体系结构中 xff0c
  • CMake语法—选项(option)

    CMake语法 选项 xff08 option xff09 1 选项 1 1 定义 1 2 说明 variable 选项名help text 描述 解释 备注value 选项初始化值 xff08 除ON而外全为OFF xff09 2 应用注

随机推荐

  • C++工程:总结 CMake 添加第三方库依赖方式git submodule、 find_library、FetchContent、CPM等

    CMake 已经成为了C 43 43 工程管理的主流方式 xff0c 功能非常强大 xff0c 现在大多数的 C 43 43 库都已经支持CMake xff0c 下面以 jsoncpp 为例 xff0c 介绍几种引入第三方库的方式 1 代码
  • 医学图像——DCMTK、VTK、ITK、RTK、SimpleITK

    1 引言 https github com SINTEFMedtek ITK VTK xff0c 相关童鞋应该很熟悉的 xff0c 而CTK是一个较新的界面库 xff0c 主要用于方便前面两个 TK的界面设计 xff0c 当然也可以作为通用
  • C++中的volatile

    volatile的本意是 易变的 volatile关键字是一种类型修饰符 xff0c 用它声明的类型变量表示可以被某些编译器未知的因素更改 xff0c 比如操作系统 硬件或者其它线程等 遇到这个关键字声明的变量 xff0c 编译器对访问该变
  • 3DTiles】关于GeometricError几何度量误差

    在 3DTiles 的官方文档中详细介绍了关于几何度量误差 Geometric Error 的一些理念和内涵 xff0c 概括来说可以翻译为如下定义 xff1a 几何度量误差 xff0c Geometric Error xff0c 简称 G
  • glPixelStorei 详解 包括像素传输

    3 glPixelStore 像glPixelStorei GL PACK ALIGNMENT 1 这样的调用 xff0c 通常会用于像素传输 PACK UNPACK 的场合 尤其是导入纹理 glTexImage2D 的时候 xff1a C
  • ESLint 简介

    ESLint简介 ESLint是一个用来识别 ECMAScript 并且按照规则给出报告的代码检测工具 xff0c 使用它可以避免低级错误和统一代码的风格 如果每次在代码提交之前都进行一次eslint代码检查 xff0c 就不会因为某个字段
  • IOS VasSonic 粗略见解

    因为项目需求需要在本地缓存html页面 xff0c 优化用户体验 了解到VasSonic 百度了下源码解析但是没有发现IOS的所以只有自己慢慢摸索了 一 类的简单关系 1 SonicEngine 引擎类 代理为 UIWebViewContr
  • axios的详细讲解

    一 axios的特性 axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端 xff0c 简单的理解就是ajax的封装 特性 xff1a 从浏览器中创建 XMLHttpRequests从 node js 创建
  • 无人机飞控算法-姿态估计-欧拉角-旋转矩阵-四元数

    无人机飞控算法 姿态估计 此系列记录了我理解的卡尔曼滤波从0到1的过程 xff0c 从姿态估计到位置估计 xff0c 我们从核心点一个个出发 xff0c 并结合实际模块的应用来一一揭开卡尔曼滤波的神秘面纱 提示 xff1a 在系列文章中 x
  • BMP格式详解

    介绍 数字图像在外存储器设备中的存储形式是图像文件 xff0c 图像必须按照某个已知的 公认的数据存储顺序和结构进行存储 xff0c 才能使不同的程序对图像文件顺利进行打开或存盘操作 xff0c 实现数据共享 图像数据在文件中的存储顺序和结
  • WinHex使用方法详解

    WinHex是由X Ways软件技术公司 xff08 官方网站http www x ways net xff09 开发的一款专业的磁盘编辑工具 xff0c 该工具文如其名 xff0c 是在Windows下运行的十六进制 xff08 hex
  • three.js流动线

    效果 xff1a 先看最基本的 function initThree el options options 61 options const t 61 this appInstance 61 this const width 61 el o
  • OpenGL之FBO(Frame Buffer Object)和多次离屏渲染

    第一次听到离屏渲染的时候觉得很高级 xff0c 遥不可及 xff0c 直到后来做高斯模糊的时候 xff0c 需要通过两次处理来节省性能 xff0c 一直玩一次渲染处理的我这时候才认识FBO xff0c 继而明白了离屏渲染 xff0c 今天抽
  • Android驱动(一)硬件访问服务学习之(四)Android应用程序APP编写

    硬件平台 xff1a tiny4412系统 xff1a Android 5 0 2编译器 xff1a arm linux gcc 4 5 1 xff08 一 xff09 Android通过JNI访问硬件 http blog csdn net
  • gl_FragCoord 的含义

    gl FragCoord 表示当前片元着色器处理的候选片元窗口相对坐标信息 xff0c 是一个 vec4 类型的变量 x y z 1 w xff0c 其中 x y 是当前片元的窗口坐标 xff0c OpenGL 默认以窗口左下角为原点 xf
  • RoboMaster机甲大师——视觉组——计算平台的选型与感想(主流几款)

    RoboMaster机甲大师 视觉组 计算平台 xff08 工控机 xff09 的选型与感想 xff08 主流几款 xff09 FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介 xff1
  • 如何在Linux命令行下发送和接收UDP数据包

    众所周知 在传输层有两个常用的协议 TCP 和 UDP 本文介绍在 Linux 命令行下 如何使用 nc 命令发送或接收 UDP 数据包 这些命令的用法对调试 UDP 通信程序将有所帮助 1 问题的提出 编写了一个使用 raw socket
  • 抽丝剥茧聊Kotlin协程之聊聊Job和SupervisorJob的区别

    1 前言 随着协程的普及 xff0c 协程知识越来越被面试官青睐 首先 xff0c 协程的面试题一般都很简洁 xff0c 一两句简单的话就能把问题描述清楚 xff0c 其次于面试官而言 xff0c 协程框架中精妙的数据结构与算法可以很好的考
  • Android 手机运行 JoyCon Droid 并且使用 Amiibo

    PS 整个过程耗时耗力 xff0c 经常会断开连接 xff0c 有些不想搞那么麻烦的人就不要搞了 xff0c 以免遭受刺激啊 xff0c 哈哈 前提 如果想使用并刷Amiibo xff0c 必须同时满足以下几个条件 xff1a 1 蓝牙版本
  • STM32F10X系列通用OTA bootloader移植与使用指南

    基于STM32F10X系列通用OTA bootloader原理 移植与使用全指南 写在前面这几天我都做了什么呢 xff1f 有什么感受 xff1f 开始移植 写在前面 从2020 1 26到2020 1 30这5天 xff0c 我的较多研究