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文件。

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

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

相关文章

解决容器内deepspeed微调大模型报错

解决容器内deepspeed微调大模型报错&#xff1a;[launch.py:315:sigkill_handler] Killing subprocess 问题描述&#xff1a;解决办法 问题描述&#xff1a; 在容器中用deepspeed微调百川大模型2时&#xff0c;出现上述错误&#xff0c;错误是由于生成容器时&#xff0c;共享内…

jetson Xavier NX安装PySide2

安装步骤 下载Qt5资源包&#xff08;完整资源包、基础资源&#xff0c;包二选一&#xff09; 完整资源包下载命令&#xff1a;wget http://master.qt.io/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz 基础包下载命令&#xff1a;wget http://master.qt.io/…

七个开发者不可不知的VS Code小技巧

本文就来分享 7 个极大提高开发效率的 VS Code 技巧&#xff01; 目录 1.固定滚动&#xff08;Sticky Scroll&#xff09; 2.命令面板&#xff08;Command Palette&#xff09; 3.自定义代码片段&#xff08;Custom Snippets&#xff09; 4.文件查找&#xff08;File Finde…

SpringBoot实现SSMP整合

一、整合JUnit 1、Spring 整合 JUnit 核心注解有两个&#xff1a; RunWith(SpringJUnit4ClassRunner.class) 是设置Spring专用于测试的类运行器&#xff08;Spring程序执行程序有自己的一套独立的运行程序的方式&#xff0c;不能使用JUnit提供的类运行方式&#xff09;Conte…

十个面试排序算法

一、 前言 最常考的是快速排序和归并排序&#xff0c;并且经常有面试官要求现场写出这两种排序的代码。对这两种排序的代码一定要信手拈来才行。还有插入排序、冒泡排序、堆排序、基数排序、桶排序等。面试官对于这些排序可能会要求比较各自的优劣、各种算法的思想及其使用场景…

Linux中网络排查命令traceroute

traceroute命令尝试跟踪IP数据包到某个Internet主机的路由&#xff0c;方法是使用一个小ttl(生存时间)启动探测数据包&#xff0c;然后侦听来自网关的ICMP超时回复&#xff0c;它以ttl为1开始探测&#xff0c;并将其增加1&#xff0c;直到获得ICMP port unreachable或TCP reset…

单例模式:饿汉式、懒汉式

一、单例模式 定义&#xff1a;一个类中的对象只能有一个&#xff0c;它在内存中只会创建一次对象的设计模式。 用法&#xff1a;在程序中如果多次用到同一个类中的方法进行操作时&#xff0c;在使用时就会创建多个对象。为了防止频繁创建对象造成内存资源浪费&#xff0c;就可…

Kotlin中的比较运算符

在Kotlin中&#xff0c;我们可以使用比较运算符进行值的比较和判断。下面对Kotlin中的等于、不等于、小于、大于、小于等于和大于等于进行详细介绍&#xff0c;并提供示例代码。 等于运算符&#xff08;&#xff09;&#xff1a; 等于运算符用于判断两个值是否相等。如果两个值…

[Python中常用的回归模型算法大全:从线性回归到XGBoost]

文章目录 概要保序回归&#xff1a;理论与实践多项式回归&#xff1a;探索数据曲线关系多输出回归的示例 概要 在数据科学和机器学习领域&#xff0c;回归分析是一项关键任务&#xff0c;用于预测连续型变量的数值。除了传统的线性回归模型外&#xff0c;Python提供了丰富多样…

一文带你GO语言入门

什么是go语言? Go语言(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go语言的主要特点包括:- 简洁和简单 - 语法简单明快,易于学习和使用 特点 高效 编译速度快,执行效率高 并发支持 原生支持并发,利用goroutine实现高效的并发…

小程序canvas层级过高真机遮挡组件的解决办法

文章目录 问题发现真机调试问题分析问题解决改造代码效果展示 问题发现 在小程序开发中需要上传图片进行裁剪&#xff0c;在实际真机调试中发现canvas层遮挡住了生成图片的按钮。 问题代码 <import src"../we-cropper/we-cropper.wxml"></import> <…

面试总结分享:25道数据库测试题

1&#xff09;什么是数据库测试&#xff1f; 数据库测试也称为后端测试。数据库测试分为四个不同的类别。数据完整性测试 数据有效性测试 数据库相关的性能 测试功能&#xff0c;程序和触发器 2&#xff09;在数据库测试中&#xff0c;我们需要正常检查什么&#xff1f; 通常&a…

在 CentOS 8.2 上安装 MySQL C/C++ 客户端库 libmysqlclient.so

添加 MySQL 官方 Yum 存储库&#xff1a; sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el8-3.noarch.rpm 安装 MySQL C/C 客户端库&#xff1a; sudo dnf install mysql-devel 这将自动安装所需的依赖项&#xff0c;并将 libmysqlclient 库及其头…

VBA技术资料MF71:查找所有空格并替换为固定字符

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

Typora +Picgo 搭建个人笔记

文章目录 Typora Picgo 搭建个人笔记一、Picgo Github 搭建图床1.基础设置2. 将配置导出&#xff0c;方便下次使用 二、Typora&#xff1a;设置 &#xff1a;1. 基本设置2. 导出自动提交3. 备份图片 Typora Picgo 搭建个人笔记 typora 下载地址&#xff1a; https://zahui.fan…

论文浅尝 | 深度神经网络的模型压缩

笔记整理&#xff1a;闵德海&#xff0c;东南大学硕士&#xff0c;研究方向为知识图谱 链接&#xff1a;https://arxiv.org/abs/1412.6550 动机 提高神经网络的深度通常可以提高网络性能&#xff0c;但它也使基于梯度的训练更加困难&#xff0c;因为更深的网络往往更加强的非线…

新业务场景如何个性化配置验证码?

验证码作为人机交互界面经常出现的关键要素&#xff0c;是身份核验、防范风险、数据反爬的重要组成部分&#xff0c;广泛应用网站、App上&#xff0c;在注册、登录、交易、交互等各类场景中发挥着巨大作用&#xff0c;具有真人识别、身份核验的功能&#xff0c;在保障账户安全方…

DH48WK 温控器参数设置

北京东昊力伟科技有限责任公司 温控仪、温度控制器 产品特点&#xff1a; 可外接温度传感器Pt100、Cu50、K、E、J、N、T、R、S、B兼容输入&#xff1b;PID控制输出、位式控制输出、继电器报警输出&#xff1b;控温能满足设定温度值的0.2℃&#xff1b;既可用于加热控制、也可…

CSP模拟58联测20 牵着她的手

题目大意 考虑所有 n n n行 m m m列的矩阵&#xff0c;矩阵中每个元素的值都在 1 1 1到 k k k之间。对于这样的矩阵 A A A&#xff0c;按照下面规则构造序列 x 1 , x 2 , ⋯ , x n m x_1,x_2,\cdots,x_{nm} x1​,x2​,⋯,xnm​&#xff1a; 对于 1 ≤ i ≤ n 1\leq i\leq n …

Sectigo OV通配符1590元

通配符SSL证书是一种特殊的SSL证书&#xff0c;它能够为多个域名提供加密保护&#xff0c;这种证书可以用于保护一个主域名及其所有子域名&#xff0c;适合子域名比较多的个人或者企事业单位使用。通配符SSL证书既节省了管理证书的时间&#xff0c;又减少了购买SSL证书的成本&a…