STM32 BootLoader设置

news2024/10/6 2:31:30

编写bootloader程序:

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

typedef  void (*iapfun)(void);				//定义一个函数类型的参数.  
iapfun jump2app; 

//设置栈顶地址
//addr:栈顶地址
__asm void MSR_MSP(u32 addr) 
{
	MSR MSP, r0 			//set Main Stack value
	BX 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.coloradmin.cn/o/1093390.html

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

相关文章

TikTok国际版 使用特网科技Bluestacks模拟器安装方法

特网科技Bluestacks模拟器主机 桌面自带Bluestacks模拟器 TikTok国际版Bluestacks模拟器搜索tiktot 登录google应用商店-安装TikTok 安装过程可能需要3-5分钟不等-配置过低可能会导致安装失败&#xff0c;建议升级更高内存。 安装完成-打开 安装成功APP-我的游戏查看 打开国际版…

phpcms_v9模板制作及二次开发常用代码

0:调用最新文章&#xff0c;带所在版块 {pc:get sql"SELECT a.title, a.catid, b.catid, b.catname, a.url as turl ,b.url as curl,a.id FROM v9_news a, v9_category b WHERE a.catid b.catid ORDER BY a.id DESC " num"15" cache"300"} {lo…

光电柴微电网日前调度报告

摘要 微电网是目前国内外应用较为广泛的一种绿色可再生能源&#xff0c;近几年我国微电网产业的发展十分迅速。然后&#xff0c;越来越多的微电网系统建立并网&#xff0c;微电网产生的电能受外界因素影响较大&#xff0c;具有一定的随机性和波动性&#xff0c;给并网后的电力系…

leetCode 72. 编辑距离 动态规划

72. 编辑距离 - 力扣&#xff08;LeetCode&#xff09; 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 编辑距离的应用场景&#xff1a;…

【内网攻击】DHCP协议概念——地址池耗尽攻击

目录 前言 DHCP 服务概念 1&#xff09;客户端发送DHCP Discovery广播包 2&#xff09;服务器响应DHCP Offer广播包 3&#xff09;客户机发送DHCP Request广播包 4&#xff09;服务器发送DHCP ACK广播包 部署DHCP服务器 dhcp地址池消耗攻击 攻击防御 前言 现在思考我们…

[论文分享] EnBinDiff: Identifying Data-Only Patches for Binaries

EnBinDiff: Identifying Data-Only Patches for Binaries [TDSC 2021] 在本文中&#xff0c;我们将重点介绍纯数据补丁&#xff0c;这是一种不会引起任何结构更改的特定类型的安全补丁。作为导致假阴性的最重要原因之一&#xff0c;纯数据补丁成为影响所有最先进的二进制差分方…

spring security 认证授权详解

spring security简介 Spring Security 是 Spring家族中的一个安全管理框架&#xff0c;它提供了更丰富的功能做认证授权 认证&#xff1a;当前用户有没有权限登录&#xff0c;是否为本系统用户授权&#xff1a;当前登录的用户有没有操作功能的权限 spring security的搭建 引入…

SqlServer安装教程

百度网盘地址: 链接&#xff1a;https://pan.baidu.com/s/1ntqoK9uVc6fBVTm7twh8kw 提取码&#xff1a;grdt 安装: 双击:SQLEXPRADV_x64_CHS.exe ,等待;点击计划,系统配置检查器,根据要求修改(我被要求重启了)点击安装,全新SQL Server独立安装或向现有安装添加功能,接受功能选…

颜色特征和sift算法结合的指示类交通标志识别

目录 摘 要...................................................................................... 3 第一章 绪论........................................................................ 6 1.1 研究课题背景...................................................…

fatal error C1083: 无法打开包括文件: “ta_libc.h”: No such file or directory

用python做交易数据分析时&#xff0c;可以用talib库计算各类指标&#xff0c;这个库通过以下命令安装&#xff1a; pip install TA-Lib -i https://pypi.tuna.tsinghua.edu.cn/simple windows安装时可能出现本文标题所示的错误&#xff0c;可按如下步骤解决&#xff1a; 1、去…

【Docker 内核详解】namespace 资源隔离(四):Mount namespace Network namespace

namespace 资源隔离&#xff08;四&#xff09;&#xff1a;Mount namespace & Network namespace 1.Mount namespace mount namespace 通过隔离文件系统挂载点对隔离文件系统提供支持&#xff0c;它是历史上第一个 Linux namespace&#xff0c;所以标识位比较特殊&#x…

云开发校园宿舍/企业/部门/物业故障报修小程序源码

微信小程序云开发校园宿舍企业单位部门物业报修小程序源码&#xff0c;这是一款云开发校园宿舍报修助手工具系统微信小程序源码&#xff0c;适用于学校机房、公司设备、物业管理以及其他团队后勤部&#xff0c;系统为简单云开发&#xff0c;不需要服务器域名即可部署&#xff0…

[HNCTF 2022 WEEK2]ez_ssrf题目解析

这题主要是引入ssrf这个漏洞攻击&#xff0c;本质上没有更深入的考察 本题是需要我们去伪造一个ssrf的请求头去绕过 题目开始给了我们信息让我们去访问index.php fsockopen函数触发ssrf fsockopen() 函数建立与指定主机和端口的 socket 连接。然后&#xff0c;它将传入的 bas…

nginx的location的优先级和匹配方式

nginx的location的优先级和匹配方式 在http模块中有server&#xff0c;server模块中有location&#xff0c;location匹配的是uri 在一个server中&#xff0c;会有多个location&#xff0c;如何来确定匹配哪个location niginx的正则表达式 ^ 字符串的起始位置 $ 字符串的…

Mybatis用Byte[]存图片,前端显示图片

前端页面 static下 也就是说byte[] 转成JSON字符串后,和用BASE64编码后是一摸一样的,那么SpringBoot会自动将实体类转JSON字符串,也就是说根本不需要Base64编码 注意:两个值并非一摸一样,一个多了个双引号 byte[]的值前后有个双引号 有一点点区别 一个有双引号,一个没有…

7.定时器

定时器资源 CC2530有四个定时器TIM1~TIM4和休眠定时器 TIM1 定时器1 是一个独立的16 位定时器&#xff0c;支持典型的定时/计数功能&#xff0c;比如输入捕获&#xff0c;输出比较和PWM 功能。定时器有五个独立的捕获/比较通道。每个通道定时器使用一个I/O 引脚。定时器用于…

NewStarCTF2023week2-Unserialize?

代码审计&#xff1a; 定义了一个eval类&#xff0c;该类下有一个私有变量cmd和公有成员函数destruct()&#xff0c;该函数在对象的所有引用都被删除或类被销毁时会自动调用&#xff1b; 调用该函数则会执行一个正则表达式进行正则匹配&#xff0c;过滤掉了一些常用命令和bas…

机器人技术研究现状

随着科技的不断进步&#xff0c;机器人技术在制造业中的应用越来越广泛。本文将综述机器人技术的研究现状&#xff0c;主要包括机器人控制技术、机器人感知技术、机器人智能化技术、柔性机器人技术、协作机器人技术以及云机器人技术六个方面。 一、机器人控制技术 机器人控制技…

2023年中国云计算软件市场规模、市场结构及市场份额情况分析[图]

云计算是分布式计算的一种&#xff0c;指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序&#xff0c;然后&#xff0c;通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算软件类型分为三类&#xff0c;即基础设施即服务、平台即服…

调试工具:应用程序验证器Application Verifier(配合WinDbg)

1.应用程序验证器&#xff08;Application Verifier&#xff09;简介 说明&#xff1a;Application Verifier是来自微软官方的一款应用程序验证工具&#xff0c;主要用于帮助用户检测和调试内存损坏、危险的安全漏洞、Run-time检测等&#xff1b;是一款辅助开发工具&#xff0…