STM32远程更新

1 IAP 概述
1.1
工作原理
在应用中编程( IAP )是一种在现场通过 MCU 的通信接口(例如 UART,USB,CAN 和以太网
等)进行固件升级的方式。
当启动微控制器时,您可以选择让它进入 IAP 模式以执行 IAP 代码,或者进入正常模式来开
始执行应用代码。 IAP 代码和应用程序代码都存在于微控制器的嵌入式 Flash 中。通常 IAP
码被存储在 MCU Flash 的前几页,用户应用代码占据剩余的 Flash 区域。
下图说明了 IAP 操作流程:

1.2 可以通过tcp/ip,http,tftp等网络协议输出二进制固件

使用 TFTP 实现 IAP

2.1 TFTP 概述
简单文件传输协议 ( TFTP )是工作在 UDP 上的一种简单的文件传输协议。
文件传输是从 TFTP 客户端发起的, TFTP 客户端向 TFTP 服务器发送读或写请求。
当服务器确认请求后,文件数据传输开始。数据按固定大小的数据块发送 (如 512 字节的数
据块)。
必须在每个传输的数据块被接收端响应后,才能发送下一个数据块。这种回应机制通过随每
个数据块同时发送的数据块编号来实现。
数据块小于固定块大小表示文件传输结束。
2 说明了各类 TFTP 包的格式:

 

2.2 使用 TFTP 实现 IAP
IAP 实现包括一个基本的 LwIP TCP/IP 栈上的 TFTP 服务器。该服务器响应从远程 TFTP
客户端 ( PC )接收的 WRITE 请求。 TFTP READ 请求被忽略。
服务器将接收到的数据块写入 MCU Flash (在用户 Flash 区域),而不是将接收的文件写入
文件系统。
注: 在本实现中,数据块大小固定为 512 字节。
下面的流程图给出了使用 TFTP 实现 IAP 操作的过程。
2.3
使用软件
为了通过 TFTP IAP 进行测试,请确保遵循如下步骤:
1. STM3210C_EVAL 板上确保正确的跳线设置 (参见 2 )。
2. main.h 文件中,取消选项 “USE_IAP_TFTP” 的注释。根据需求,您还可以取消注释 /
注释其它选项,比如 “USE_DHCP” “USE_LCD”
3. 重新编译软件。使用生成的 map 文件,确保 IAP 代码区域 (从地址 0x0 开始)和开始
USER_FLASH_FIRST_PAGE_ADDRESS ( main.h 中定义 ) 的用户 Flash 区域之
间没有重叠。
4. 将程序下载到 STM32Flash 中并运行它。
5. 按住 Key 按钮的同时,按下并释放 Reset 键,进入 IAP 模式。
6. 若在 main.h 文件中定义了 “USE_LCD” LCD 屏幕上会显示消息,指示已经进入 IAP
式。如果采用了 DHCP main.h 文件中定义了 USE_DHCP ), LCD 屏幕上也会显示一
条消息,指示 DHCP IP 地址分配的成功或失败。
7. 分配完 IP 地址后 (动态或静态地址),用户可启动 IAP 进程。
8. PC 上,打开 TFTP 客户端(例如, TFTPD32 )并配置 TFTP 服务器地址( TFTPD32
中的主机地址)。
9. 选择一个二进制映像下载到 STM32 Flash 中 ( /project/binary 文件夹中提供了两个二进
制映像作为例子)。
10. TFTPD32 应用程序上点击 “Put” 按钮,启动一个文件写请求。
11. 如果定义了 USE_LCD IAP 操作的进度会显示在 LCD 上。
12. IAP 操作结束时,可以复位评估板来运行您刚才在 STM32 Flash 中编写的程序。

注意事项:

为了构建 IAP 映像 (将用 IAP 软件进行加载),请确保:
1.
向量表起始地址配置为用户 Flash 区域的起始地址。可以通过使用 std 库函数:
NVIC_SetVectorTable 实现。
2. 被编译 / 链接的软件必须从用户 Flash 区域起始地址开始运行。
3. 编译后的软件大小不超出总的用户 Flash 区域
AN2557 使用 STM32F10xxx UASRT 实现在应用中

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/23550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

04-240606Spark笔记

04-240606Spark笔记 1.行动算子-2 save相关算子: 格式: def saveAsTextFile(path: String): Unit def saveAsObjectFile(path: String): Unit def saveAsSequenceFile(path: String,codec: Option[Class[_ <: CompressionCodec]] None): Unit 例子: val rdd sc.makeR…

【Python报错】已解决NameError: name ‘Image‘ is not defined

解决Python报错&#xff1a;NameError: name ‘Image’ is not defined 在使用Python进行图像处理时&#xff0c;我们经常使用Pillow库&#xff08;PIL的一个分支&#xff09;。如果你在尝试创建或处理图像时遇到了NameError: name Image is not defined的错误&#xff0c;这通…

关于python包导入问题的重思考

将顶层目录直接设置为一个包 像这样&#xff0c;每一个文件从顶层包开始导入 这样可以解决我的问题&#xff0c;但是要注意的时&#xff0c;要避免使用出现上下级出现同名包的情况&#xff0c;比如&#xff1a; AutoServer--AutoServer--__init__.py--__init__.py这种情况下…

绿联云NAS一些探索(1):SSH、包管理器探测、安装docker-compose等

绿联云NAS一些探索SSH、包管理器探测、安装docker-compose等 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https:…

AI图书推荐:《如何利用ChatGPT在线赚钱》

这本书《如何利用ChatGPT在线赚钱》&#xff08;$100m ChatGPT_ How To Make Money Online With ChatGPT -- Sharp, Biily -- 2023 &#xff09;主要阐述如何利用ChatGPT这一强大的语言模型工具在互联网上创造收入。 以下是各章节内容的概要&#xff1a; **引言** - 介绍了Chat…

STM32F103单片机工程移植到航顺单片机HK32F103注意事项

一、简介 作为国内MCU厂商中前三阵营之一的航顺芯片&#xff0c;建立了世界首创超低功耗7nA物联网、万物互联核心处理器浩瀚天际10X系列平台&#xff0c;接受代理商/设计企业/方案商定制低于自主研发十倍以上成本&#xff0c;接近零风险自主品牌产品&#xff0c;芯片设计完成只…

编译等底层知识

目录 一. GCC命令语句大全 二. GCC编译4个阶段 三. makefile的使用 四. CMake 五. GNU工具链开发流程图 六. Keil中的地址段 七. 静态库和动态库 一. GCC命令语句大全 -c只编译源文件&#xff0c;生成目标文件&#xff08;.o 文件&#xff09;&#xff0c;不进行链接。…

CC++内存管理【new和delete操作符的详细分析】【常见面试题】

C/C内存管理 1.C/C内存分布 我们先来看一段代码&#xff0c;来了解一下C/C中的数据内存分布。 # include <stdlib.h>int globalVar 1; static int staticGlobalVar 1; // 比globalVar还要先销毁,同一个文件下后定义的先析构 // 全局变量存在 数据段&#xff08;静态…

VSCode+Vite+Vue3断点调试

目录 lunch.json创建 vite.config.ts 打断点运行 lunch.json创建 首先&#xff0c;点击VSCode左上角&#xff0c;甲壳虫运行的按钮&#xff0c;然后点击运行与调试&#xff0c;选择chrome浏览器&#xff0c;修改成一下配置。 { // 使用 IntelliSense 了解相关属性。 // 悬停…

codeforces round 949 div2

A Turtle and Piggy Are Playing a Game 题目&#xff1a; 思路&#xff1a;输出2的幂次b使得2^b为最大的不超过x的数 代码&#xff1a; #include <iostream>using namespace std;const int N 2e5 10;void solve() {int l, r;cin >> l >> r;if(r % 2) …

vscode 运行和调试

vscode使用断点 1.安装并激活扩展 Debugger for Chrome (弃用 --> JavaScript Debugger)Debugger for Firefox 2. 配置config文件 打开 config/index.js 并找到 devtool property。将其更新为&#xff1a; 如果你使用的是 Vue CLI 2&#xff0c;请设置并更新 config/in…

SpringBoot Redis读写与数据序列化 RedisTemplate 与 StringRedisTemplate 防转字节

介绍 RedisTemplate 对象在底层默认会转成字节&#xff0c;造成了内存的开销很大&#xff0c;这是他底层进行处理的,造成可读性差&#xff0c;如需要转成简单的字符串存储需要进行序列化的配置。 RedisTemplate 配置类 Configuration public class RedisConfig {Beanpublic …

OpenGL系列(五)纹理贴图

概述 OpenGL纹理是一种在三维图形中应用纹理映射的技术。纹理是一张图像&#xff0c;可以应用到三维模型的表面上&#xff0c;从而使得模型看起来更加真实和具有细节。通过纹理映射&#xff0c;可以将图像的像素值与三维模型的顶点进行匹配&#xff0c;从而为模型的表面增加细节…

Java并发编程之由于静态变量错误使用可能导致的并发问题

Java并发编程之由于静态变量错误使用可能导致的并发问题 1.1 前言1.2 业务背景1.3 问题分析1.4 为什么呢&#xff1f;1.5 修复方案2 演示示例源码下载 1.1 前言 我们知道在 Java 后端服务开发中&#xff0c;如果出现并发问题一般都是由于在多个线程中使用了共享的变量导致的。…

JVM相关:Java内存区域

Java 虚拟机&#xff08;JVM)在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。 Java运行时数据区域是指Java虚拟机&#xff08;JVM&#xff09;在执行Java程序时&#xff0c;为了管理内存而划分的几个不同作用域。这些区域各自承担特定的任务&#xff0c…

Day23 自定义对话框服务

​本章节实现了,自定义对话框服务的功能 当现有的对话框服务无法满足特定需求时,我们可以采用自定义对话框的解决方案,以更好地满足一些特殊需求。 一.自定义对话框主机服务步骤 在Models 文件夹中,再建立一个 IDialogHostService 接口类,继承自 IDialogService 对话框服…

绝对实用Linux命令行下的文件夹逐层创建术,从小白到大神的必学技能

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 基础篇&#xff1a;初识Linux文件系统 在深入了解如何在Linux中逐层创建文件夹之前&#xff0c;需要对Linux的文件系统有一个基本的认识。Linux文件系统以其树状结构而著称&#xff0c;其中/&#xff08;根目录&…

SIMBA方法解读

目录 预处理scRNA-seqscATAC-seq 图构建&#xff08;5种场景&#xff09;scRNA-seq分析scATAC-seq分析多模态分析批次整合多模态整合 图学习SIMBA空间中查询实体识别TF-target genes 预处理 scRNA-seq 过滤掉在少于三个细胞中表达的基因。原始计数按文库大小标准化&#xff0…

DDS自动化测试落地方案 | 怿星科技携最新技术亮相是德科技年度盛会

5月28日&#xff0c;怿星科技作为是德科技的重要合作伙伴亮相Keysight World Tech Day 2024。在此次科技盛会上&#xff0c;怿星科技不仅展示了领先的DDS自动化测试解决方案等前沿技术&#xff0c;还分享了在“周期短、任务重”的情况下&#xff0c;如何做好软件开发和测试验证…

前端开发之性能优化

本文章 对各大学习技术论坛知识点&#xff0c;进行总结、归纳自用学习&#xff0c;共勉&#x1f64f; 文章目录 1. [CDN](https://www.bootcdn.cn/)2.懒加载3.缓存4.图片压缩5.图片分割6.sprite7.Code Splitting8.gzip9.GPU加速10.Ajax11.Tree Shaking12.Resource Hints 1. CD…