stm32在线升级方案

article/2025/8/29 22:18:05

目录

下载固件流程:

Bootloader程序设计流程

普通工程改为APP工程的步骤


背景:当嵌入式软件需要固件升级时,有时需要拆卸设备,较为麻烦,为方便升级,提供远程升级的功能,可通过网络或其他通讯接口传输固件进行升级。

系统分为两大模块:Bootloader和APP应用程序,系统复位后先运行Bootloader程序,此程序负责升级APP应用程序。Bootloader执行结束后跳至APP应用程序。APP负责接受新的APP程序。

下载固件流程:

  1. 将待升级的新固件命名为mcu.bin后通过产品支持的方式传输的SD卡中,可以是通过网络tftp传输,或者can通信传输,也可以直接拷贝到SD卡,取决于app自身所含有的功能。必须保证固件是完整的、功能正常的,可用于升级的,若固件不完整将导致升级固件后设备无法正常启动。
  2. 传输好固件后,需要通过下发升级指令置起需要升级的标志,协议可以自定,该标志存储在backup ram的起始位置处,backup ram复位不会丢失,仅断电会丢失,置好标志后,延时一会进行复位。               

*(volatile int *)BKPSRAM_BASE = 1;

 

  1. 复位后将跳转到Bootloader的程序。

 

下载固件流程

Bootloader程序设计流程

  1. 读取升级标志位判断是否需要升级,若不需要升级直接跳转到app
  2. 若需要升级,打开sd卡里的mcu.bin文件,以512字节/包的方式进行固件对的读取和擦写,当读取的数据小于512字节,表明固件已经读取完毕,擦除完以后就可以跳转到app,使用新固件了。

普通工程改为APP工程的步骤

  1. 在keil工程里,需要修改app的flash起始地址和大小,默认起始地址是0x8000000,大小为0x100000,需根据flash的空间划分进行修改,例如Bootloader预留64k,那么app的起始地址就为0x8010000,Size改为:0xF0000。在keil里,打开Options for Target ‘target 1’对话框或者点击魔术棒,点击Target,找到IROM1,将0x8000000改为0x8010000,0x100000改为0xF0000

     

    1. 继续选择User标签页,勾选Run#1,在框里输入fromelf.exe --bin -o "$L@L.bin" "#L" ,该步骤是开启编译时生成bin文件
    2. 在main里,需要重映射中断向量表,使用如下语句
    SCB->VTOR = FLASH_BASE | 0x10000;  //偏移0x10000,需与步骤1中的工程配置保持一致
    1. 将升级标志清除,升级标志存储在backup ram里,需要先初始化一下,(stm32F7系列产品)添加并调用如下BKP_SRAM_Init函数进行初始化,再执行 *(volatile int *)BKPSRAM_BASE = 0xAAAABBBB;//清除升级标志,人为定义的特殊值,其值含义需与Bootloader一致。

void BKP_SRAM_Init(void)
{/* 电源接口时钟使能 (Power interface clock enable) */__HAL_RCC_PWR_CLK_ENABLE();/* DBP 位置 1,使能对备份域的访问 */HAL_PWR_EnableBkUpAccess();/* 通过将 RCC AHB1 外设时钟使能寄存器 (RCC_AHB1ENR) 中的 BKPSRAMEN 位置 1, 使能备份 SRAM 时钟 */__HAL_RCC_BKPSRAM_CLK_ENABLE();/* 应用程序必须等待备份调压器就绪标志 (BRR) 置 1,指示在待机模式和 VBAT 模式下会保持写入 RAM 中的数据。 */HAL_PWREx_EnableBkUpReg();
}


http://chatgpt.dhexx.cn/article/kpuHNpZd.shtml

相关文章

串口在线升级步骤

串口在线升级步骤 一、查看工程文件的Config.h 二、确定本地地址和目标地址 三、打开在线升级工具 四、配置串口参数 串口配置可以波查询代码与PC通讯的UART设置的参数。 五、填写本机地址和目标地址 本机地址为0xf3 243 主板目标地址为0xf5 245 PMT板目标地址为0x13 19 …

mariadb数据库在线升级版本

mariadb----在线版本升级 我之前的数据库版本号是5.5 一:备份数据库和数据库配置 mysqldump -u root -p --all-databases > /home/mydb.sql mv /etc/my.cnf /etc/my.cnf.bak 二:添加mariadb yum库 vim /etc/yum.repos.d/MariaDB.repo [mariadb] na…

FPGA远程固件在线升级

FPGA远程固件在线升级 1.摘要 对最近做的FPGA远程更新/在线升级做一个总结。一般在代码开发阶段,我们使用JTAG烧写代码,但当产品投入到实际使用过程中,难以再用JTAG进行固件更新。所以需要开发远程/在线更新的功能,即使用产品自…

固件在线升级流程

从事硬件开发,为了方便维护,免不了对模块进行固件升级,所以对于固件升级,简单整理了一下完整的在线升级的实现思路,该思路适用于所有带通讯总线的模块。 需要注意的是,需要额外的上位机配合。 下位机在线…

php 在线升级

php 在线升级 功能 目前已修改为通用解决方案 点击下方链接下载 此为最新优化过的版本 之后的贴图 说明 仅用来做思路参考 我就不再修改了 下面是思路解析思路一思路二升级程序服务器检测版本至此整个升级程序已经结束 感谢大家参考有任何问题都可以直接联系我咨询 一定不吝赐教…

软件在线升级系统设计

需求描述 一直用Qt开发PC版本的程序,常用的方法都是打包发布。目前开发的程序比较复杂,涉及到上百个独立的进程以及4000多个相关文件,采用原来的打包发布就变得很麻烦,第一改动比较频繁,打包次数过多;第二…

Nginx在线升级

1、查看当前nginx版本,nginx -v(小写v) 2、下载最新版本nginx包,nginx-1.23.1.tar.gz 3、解压tar -zxvf nginx-1.23.1.tar.gz 4、进入解压目录cd nginx-1.23.1.tar.gz 5、查看nginx当前配置,nginx -V注意这里是大写…

在线升级:OTA升级的原理和实现方式

目录 1、OTA 在线升级 2、实现方式 3、操作方式 3.1、后台式升级 3.2、非后台式式更新 4、STM32 的在线升级 4.1、划分 Flash 区域 4.2、实操1 - Flash空间地址的划分 4.3、实操2 - 设置工程 4.4、实操3 - 接收固件更新包 4.5、实操4 - 拷贝程序至Flash 4.6、实操5 - 跳转至 Ap…

halcon 彩色图转灰度图

read_image (Image, jiao1.bmp) //读取图像 get_image_size (Image, Width, Height) //获取宽高 dev_close_window () //关闭图形窗口 rgb1_to_gray (Image, GrayImage) //彩色图转灰度图 dev_open_window (0, 0, Width, Height, black, WindowHandle) //打开图形窗口 d…

Python中使用PIL快速实现灰度图

效果 原图 效果图 实现 新建文件夹grayImage,在此文件夹下新建gray.py from PIL import Image imgImage.open(1111.jpg) imgimg.convert(L) img.save(灰度图.jpg) 其中1111.jpg是原图,将其放在同目录下。 运行即可。 源码以及资源下载 https://do…

计算机灰度分析,计算机中的256级灰度图像

【建议1】使用GltraEdit软件观察字符“((Z20享有声望的学校联盟)”的内部代码. 以下说法正确 A. 字符“(”的内部代码占用两个字节 B. 字符“ Lian”的代码值的二进制表示形式是11010001 10101010 C. 图片中有5个ASCⅡ字符,其中字符“ 2”的代码值的十六进制表示为32 D. 字符“…

C++-灰度图上色GrayToColor

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 场景需求 最近有客户提出,想要将解包裹图像转化为有颜色的图像,具备更佳的视觉效果。解包裹图是一个floa…

灰度图与二值化

图像处理的灰度化和二值化 在图像处理中,用RGB三个分量(R:Red,G:Green,B:Blue),即红、绿、蓝三原色来表示真彩色,R分量,G分量,B分量的…

opencv学习5:cvtColor RGB图像转灰度图像原理

简介 将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围。而灰度图像是R、G、…

Matplotlib显示灰度图

引言 matplotlib中的imshow()函数不能自动显示灰度图像,这一点应该是众所周知的,需要调用cmap“gray"以进行设置,但是cmap"gray"实际上并不是如opencv中的imshow函数一样将单通道图显示为灰度图,私以为是引入了灰度…

python显示灰度图像,Python读取图像并显示灰度图的实现

python读取图像 原图: import cv2 # 利用opencv读取图像 import numpy as np # 利用matplotlib显示图像 import matplotlib.pyplot as plt img cv2.imread("./lena.png") #读取图像 # 显示图像 plt.imshow(img) plt.axis(off) plt.show() 效果: 问&#…

OpenCV灰度图

什么是灰度图&#xff1a; 百度百科 什么是灰度图 #include <opencv2/opencv.hpp> #include <iostream>using namespace cv; using namespace std;int main(int argc, char** argv) {Mat src Mat(4,4,CV_8UC3,Scalar(28,128,228));cout << src << en…

RGB图像转化为灰度图原理

RGB图像转化为灰度图原理 1 原理 利用MATLAB对RGB图像进行读取&#xff1a; imgimread(蒙娜丽莎.jpg);可以知道存储RGB图像数据为 256 256 3 u i n t 8 256\times256 \times3\quad uint8 2562563uint8&#xff0c;其中 256 256 256\times256 256256表示长和宽的像素个数&…

彩色图像转换灰度图像

数字图像 现在我们所接触到的图像绝大多数都是数字图像&#xff0c;图像数字化后&#xff0c;每个像素点就可以看作是一个小方格&#xff0c;每个小方格里面存储的就是图像的像素信息。如果把一副数字图像抽象出来&#xff0c;就是一个二维矩阵&#xff08;灰度图&#xff09;或…

Python灰度图像彩色化

1️⃣作业要求 给定一幅灰度图像&#xff0c;使用任意方法将其变成一幅彩色图像&#xff0c;并尽量使得添加的色彩显得较为真实。 2️⃣核心代码 这里我们是直接调用了eccv16和siggraph17的模型&#xff0c;运行程序时会自动下载这两个model文件&#xff0c;然后经过对图像的…