当前位置: 首页 > news >正文

STM32 BootLoader设置

编写bootloader程序:

  1. 直接复制下面代码到自己程序中。

typedef  void (*iapfun)(void);				//定义一个函数类型的参数.  
iapfun jump2app; //设置栈顶地址
//addr:栈顶地址
__asm void MSR_MSP(u32 addr) 
{MSR MSP, r0 			//set Main Stack valueBX r14
}//跳转到应用程序段
//appxaddr:用户代码起始地址.
void iap_load_app(u32 appxaddr)
{ delay_ms(500);if(((*(vu32*)appxaddr)&0x2FF00000)==0x20000000)	//检查栈顶地址是否合法.{ debug("跳转到主程序\r\n");GPIO_RESET(USB_EN);delay_ms(500);jump2app=(iapfun)*(vu32*)(appxaddr+4);		//用户代码区第二个字为程序开始地址(复位地址)		/* 关闭全局中断*/__set_PRIMASK(1);/* 关闭滴答定时器,复位到默认值*/SysTick->CTRL = 0;SysTick->LOAD = 0;SysTick->VAL = 0;/* 设置所有时钟到默认状态 */HAL_RCC_DeInit();/* 关闭所有中断,清除所有中断挂起标志*/for(u8 i=0;i<8;i++){NVIC->ICER[i] = 0xFFFFFFFF;NVIC->ICPR[i] = 0xFFFFFFFF;}/*使能全局中断 */__set_PRIMASK(0);/* 在RTOS工程,这条很重要,设置为特权模式,使用MSP指针*/__set_CONTROL(0);MSR_MSP(*(vu32*)appxaddr);					//初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)jump2app();									//跳转到APP.}else{debug("栈顶地址不合法\r\n");}
}	

2 . 编写程序,接收应用程序的BIN文件,通过FLASH WRITE函数写入到目标扇区

3. 跳转到应用程序

iap_load_app((u32)0x08005000);	// 跳转到主程序

计算应用程序的大小:

  • 方法一:

        查看编译输出计算:

  • 方法二:

输出文件中找到.map文件,文件最后有计算结果

应用程序

  1. 设置程序存放的起始地址:
    需要计算APP程序大小和bootloader程序大小,根据芯片扇区,合理安排位置。
    如果0x80000000存放bootloader,需要计算出bootloader的大小,然后在后面地址存放应用程序。
    我的bootloader大小是19k多,留出20K的空间。在0x8005000的位置存放该应用程序。
  2. 修改KEIL设置如下,填写起始保存地址,计算出空间大小。

3. 

在main函数开始位置添加:

SCB->VTOR = ((u32)0x08005000);

4. 设置KEIL中自带的工具,编译工程,生成.bin文件

设置环境变量:

KEIL软件输入命令

fromelf.exe --bin -o  ..\MDK-ARM\$PROJECT$\$PROJECT$.bin   ..\MDK-ARM\$PROJECT$\$PROJECT$.axf

编译后生成下载所需的bin文件。

相关文章:

STM32 BootLoader设置

编写bootloader程序&#xff1a; 直接复制下面代码到自己程序中。 typedef void (*iapfun)(void); //定义一个函数类型的参数. iapfun jump2app; //设置栈顶地址 //addr:栈顶地址 __asm void MSR_MSP(u32 addr) {MSR MSP, r0 //set Main Stack valueBX r14 }//跳转到…...

django REST framework-使用与不使用的区别?

首先&#xff0c;来回顾一下传统的基于模板引擎的 django 开发工作流&#xff1a; 绑定 URL 和视图函数。当用户访问某个 URL 时&#xff0c;调用绑定的视图函数进行处理。 编写视图函数的逻辑。视图中通常涉及数据库的操作。 在视图中渲染 HTML 模板&#xff0c;返回 HTTP 响应…...

获取URL中的参数

获取URL中的参数 function getUrlParam(name) {var reg new RegExp("(^|&)" name "([^&]*)(&|$)");var r window.location.search.substr(1).match(reg);if (r ! null)return unescape(r[2]);return null; } 这个正则表达式就是一个URL路…...

一起学数据结构(9)——二叉树的链式存储及相关功能实现

目录 1. 二叉树的链式存储&#xff1a; 2. 二叉树的前序遍历&#xff1a; 3. 二叉树的中序遍历&#xff1a; 4. 二叉树的后序遍历&#xff1a; 5. 统计二叉树的结点总数 6.统计二叉树的叶子结点数&#xff1a; 7. 统计二叉树第层的结点数量&#xff1a; 8. 二叉树的销毁…...

vue 后端返回二进制流-前端通过blob对象下载文件-图片

前言 在实际开发中我们经常会遇见下载文件的场景&#xff0c;比如下载合同&#xff0c;下载文件 下载文件有2种方式&#xff0c;一种是后端返回二进制流&#xff0c;前端通过blob对象接受根据不同类型下载 还有一种把地址直接在浏览器新窗口打开浏览器打开pdf可以预览和下载&…...

vue el-dialog封装成子组件(组件化)

前言 实际开发过程中我们经常听见组件化开发&#xff0c;但在实际开发过程中&#xff08;没有人审查时&#xff09;怎么方便来 我们有时是因为时间不够&#xff0c;所以把所有代码写在一个页面。当业务逻辑复杂时可能会有1k多行 虽然不能要求自己写出高效复用性高的组件&…...

爬虫教程 一 requests包的使用

request 简介 requests 是一个常用的 HTTP 请求库&#xff0c;可以方便地向网站发送 HTTP 请求&#xff0c;并获取响应结果。 response.text 和response.content的区别 response.text 类型&#xff1a;str解码类型&#xff1a; requests模块自动根据HTTP 头部对响应的编码作…...

Aria2NG连接aria2-pro提示认证失败的处理办法

本文档适用于已经安装了aria2-pro和AriaNg的小伙伴~ 第一次登录管理端会提示”认证失败“ 这是因为aria设置了密码&#xff0c;需要在设置中配置上密码即可 配置完密码重新加载就可以正常使用啦 下载速度明显比以前快了很多 下载参考文档 Docker安装下载神器aria2并使用过程记…...

MYSQL 连接

高频 SQL 50 题&#xff08;基础版&#xff09; - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 1378. 使用唯一标识码替换员工ID SELECT COALESCE(unique_id, NULL) AS unique_id,name FROM Employees LEFT JOIN EmployeeUNI ON Employees.…...

SeaTunnel 换maven源,解决插件下载慢

SeaTunnel 是使用的mvnw命令,可以先执行一下install-plugin.sh然后终止 理论上应该可以直接执行mvnw,他就会去安装下载maven,目录就是下面的目录 然后去服务器目录修改 setting.xml文件,设置镜像源即可 /root/.m2/wrapper/dists/apache-maven-3.8.4-bin/52ccbt68d252mdldqsfsn…...

安卓14通过“冻结”缓存应用程序腾出CPU,提高性能和内存效率

本月早些时候&#xff0c;我们听说更新到安卓14似乎提高了谷歌Pixel 7和Pixel 6的效率——提高了电池寿命&#xff0c;并在这个过程中减少了热量的产生。现在看来&#xff0c;安卓14的增效功能细节已经公布。 安卓侦探Mishaal Rahman在X&#xff08;前身为Twitter&#xff09;…...

jupyter崩溃OOM,out of memory,jupyter代码写不进去,保存不了。

最近写一个比较长的数据处理代码&#xff0c;有快千行&#xff0c;然后经常代码没有写入&#xff0c;然后直接网页崩溃&#xff0c;给我干蒙了。我已经是jupyter版本的问题&#xff0c;弄了半天&#xff0c;弄完&#xff0c;还是有这个问题。然后就查了一下&#xff0c;发现是j…...

一文带你快速掌握爬虫开发中的一些高级调试技巧

文章目录 1. 写在前面2. Reply XHR&#xff08;重新发起请求&#xff09;3. copy as fecth&#xff08;修改参数请求&#xff09;4. copy()复制变量5. Web网页全屏截图6. 控制台安装使用npm7. 控制台中引用上次执行结果8. 控制台表展示对象数组 1. 写在前面 做过爬虫开发的人都…...

6.(vue3.x+vite)路由传参query与params区别

前端技术社区总目录(订阅之前请先查看该博客) 效果截图 一:路由传参有两种方式:params与query params与query区别 1:param,路由带“/”,query带“?” 2:query传过来的参数会显示到地址栏中 而params传过来的参数可以显示参数或隐藏参数到地址栏中(vue-router 4.1.4不…...

C++string的使用

CSDN的uu们&#xff0c;大家好。这里是C入门的第十六讲。 座右铭&#xff1a;前路坎坷&#xff0c;披荆斩棘&#xff0c;扶摇直上。 博客主页&#xff1a; 姬如祎 收录专栏&#xff1a;C专题 目录 1.构造函数 1.1 string() 1.2 string(const char* s) 1.3 string(const …...

闲着也是闲着,自己写歌东西玩一玩,碰碰脑子,简单快乐一点,双人出数的小游戏,后续还带补充

主旨就是每个人出一个数&#xff0c;目前限制两人&#xff0c;之后考虑多人&#xff0c;然后对其取差值&#xff0c;获取到一个结果&#xff0c;比对结果的奇偶数&#xff0c;还可以看下两人出同一个数的概率&#xff0c;反正概率上是一个比较稳定的。 当然自己想玩的活也可以做…...

牛客网 -- WY28 跳石板

题目链接&#xff1a; 跳石板_牛客题霸_牛客网 (nowcoder.com) 解题步骤&#xff1a; 参考代码&#xff1a; void get_approximate(vector<int>& v,int n) {//求约数&#xff0c;从2到sqrt(n)即可&#xff0c;原因看图解//这里一定要等于sqrt(n)&#xff0c;例如16…...

[正式学习java③]——字符串在内存中的存储方式、为什么字符串不可变、字符串的拼接原理,键盘录入的小细节。

一、字符串 1.字符串在内存中的存储方式 &#x1f525;在java中&#xff0c;内存中有两个地方可以存储字符串&#xff0c;一个是字符串池&#xff0c;一个是堆内存&#xff0c;串池中的字符串不会重复&#xff0c;而堆中的字符串每次都会开辟一块新的空间&#xff0c;因为维护…...

行情分析——加密货币市场大盘走势(10.18)

大饼昨日小幅度的下跌回调了&#xff0c;很快又上涨。目前看下来震荡向下刚刚开始&#xff0c;可以关注后续情况。大饼依然保持看空不做空&#xff0c;目前除了独立行情的币&#xff0c;就大饼非常强势。目前从MACD日线来看&#xff0c;还是保持多头趋势&#xff0c;预计明后两…...

高并发场景下常见的限流算法及方案介绍

应用场景 现代互联网很多业务场景&#xff0c;比如秒杀、下单、查询商品详情&#xff0c;最大特点就是高并发&#xff0c;而往往我们的系统不能承受这么大的流量&#xff0c;继而产生了很多的应对措施&#xff1a;CDN、消息队列、多级缓存、异地多活。 但是无论如何优化&…...

从手动压枪到智能辅助:探索罗技鼠标宏在PUBG中的进化之路

从手动压枪到智能辅助&#xff1a;探索罗技鼠标宏在PUBG中的进化之路 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 当你在绝地求生的激烈对枪中…...

pvr.iptvsimple技术解构:IPTV直播系统构建的底层逻辑与实践指南

pvr.iptvsimple技术解构&#xff1a;IPTV直播系统构建的底层逻辑与实践指南 【免费下载链接】pvr.iptvsimple IPTV Simple client for Kodi PVR 项目地址: https://gitcode.com/gh_mirrors/pv/pvr.iptvsimple 问题定位&#xff1a;IPTV直播系统的技术痛点与架构挑战 IP…...

5个宝藏级3D模型下载站:从GLB到Blender,一站式解决你的建模素材需求

1. 为什么你需要这些3D模型资源站&#xff1f; 作为一个在3D建模领域摸爬滚打多年的老手&#xff0c;我深知找素材的痛苦。记得刚入行时&#xff0c;为了找一个简单的沙发模型&#xff0c;我花了整整三天翻遍各种论坛和资源站。现在回头看&#xff0c;如果当时有人给我一份靠谱…...

突破语音转换技术瓶颈:Retrieval-based Voice Conversion全平台实战指南

突破语音转换技术瓶颈&#xff1a;Retrieval-based Voice Conversion全平台实战指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-ba…...

网络通信技术基础知识,网络通信技术数据包介绍

网络通信技术是关键技术之一&#xff0c;对于网络通信技术&#xff0c;我们应对其有所了解。为增加大家对网络通信技术的认识&#xff0c;本文将对网络通信技术的数据包结构和原理予以介绍。如果你对网络通信技术存在兴趣&#xff0c;不妨继续往下阅读哦。 在网络通信中, "…...

重塑机械键盘体验:ZMK固件的革新之旅与实践指南

重塑机械键盘体验&#xff1a;ZMK固件的革新之旅与实践指南 【免费下载链接】zmk ZMK Firmware Repository 项目地址: https://gitcode.com/gh_mirrors/zm/zmk 在机械键盘的世界里&#xff0c;固件如同键盘的灵魂&#xff0c;决定着它的响应速度、功能拓展性和个性化程度…...

从自动驾驶到AR眼镜:聊聊PSMNet这个双目立体匹配的‘老将’现在还能怎么用

PSMNet在2024年的技术重生&#xff1a;从经典立体匹配到轻量化落地的实战指南 六年前&#xff0c;当PSMNet在CVPR 2018上首次亮相时&#xff0c;其金字塔池化模块和堆叠沙漏3D CNN架构刷新了KITTI榜单的精度记录。如今&#xff0c;在Transformer大行其道的时代&#xff0c;这个…...

Qwen3.5-9B-AWQ-4bit部署教程:Docker容器内路径映射与模型加载权限配置

Qwen3.5-9B-AWQ-4bit部署教程&#xff1a;Docker容器内路径映射与模型加载权限配置 1. 引言 今天我们要探讨的是如何在Docker环境中部署Qwen3.5-9B-AWQ-4bit模型&#xff0c;这是一个支持图像理解的多模态模型。这个模型能够结合上传的图片与文字提示词&#xff0c;输出中文分…...

Linux系统CPU负载与使用率详解及性能监控

1. CPU负载与CPU使用率的本质区别在Linux系统监控和性能调优过程中&#xff0c;CPU负载和CPU使用率这两个指标经常被混淆使用。作为系统管理员&#xff0c;我曾多次遇到团队成员将这两个概念混为一谈的情况&#xff0c;这往往导致对系统性能问题的误判。让我们先从一个实际案例…...

超轻量级OpenClaw与LaTeX结合:学术文档自动化处理

超轻量级OpenClaw与LaTeX结合&#xff1a;学术文档自动化处理 科研工作者每天需要处理大量的文献整理、公式编辑和文档排版工作&#xff0c;传统手动方式耗时且容易出错。本文将展示如何用超轻量级OpenClaw实现学术文档的自动化处理&#xff0c;让LaTeX文档编写变得轻松高效。 …...