串口IAP介绍

一、STM32编程方式

(1)在线编程(ICP,in circuit programming)

系统存储器:留给ST写启动程序代码,启动程序代码通过串口1接口实现对闪存存储器的编程。

(2)在程序中编程(IAP,in application programming)

二、FLASH结构

三、 STM32F4 正常运行流程图

  • STM32的内部闪存(FLASH)地址起始于Ox08000000,般情况下,程序文件就从此地址开始1写入。
  • Ox08000004开始存放中断向量表。
  • 当中断来临,STM32的内部硬件机制亦会自动将PC指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断服务程序。
  • ①STM32复位后,从O×08000004地址取出复位中断向量的地址,并跳转到复位中断服务程序。
  • ②在复位中断服务程序执行完之后,会跳转到我们的main函数
  • ③main函数执行过程中,如果收到中断请求(发生重中断),此时STM32强制将PC指针指回中断向量表处。
  • ④根据中断源进入相应的中断服务程序
  • ⑤在执行完中断服务程序以后,程序再次返回main函数执行

四、IAP升级应用程序过程

  • 1)检查是否需要对第二部分代码(实际的应用程序代码)进行更新
  • 2)如果不需要更新则转到4
  • 3)执行更新操作
  • 4)跳转到第二部分代码执行

我们将第一个项目代码称之为Bootloader程序,第二个项目代码称之为APP程序,他们存放在STM32 FLASH的不同地址范围,一般从最低地址区开始存放Bootloader,紧跟其后的就是APP程序(注意,如果FLASH容量足够,是可以设计很多APP程序的)

五、IAP代码书写

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "stmflash.h"
#include "iap.h" 

iapfun jump2app; 
u32 iapbuf[512]; 	//2K字节缓存 

//appxaddr:应用程序的起始地址
//appbuf:应用程序CODE.
//appsize:应用程序大小(字节).
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)
{
	u32 t;
	u16 i=0;
	u32 temp;
	u32 fwaddr=appxaddr;//当前写入的地址
	u8 *dfu=appbuf;
	for(t=0;t<appsize;t+=4)
	{						   
		temp=(u32)dfu[3]<<24;   
		temp|=(u32)dfu[2]<<16;    
		temp|=(u32)dfu[1]<<8;
		temp|=(u32)dfu[0];	  
		dfu+=4;//偏移4个字节
		iapbuf[i++]=temp;	    
		if(i==512)
		{
			i=0; 
			STMFLASH_Write(fwaddr,iapbuf,512);
			fwaddr+=2048;//偏移2048  512*4=2048
		}
	} 
	if(i)STMFLASH_Write(fwaddr,iapbuf,i);//将最后的一些内容字节写进去.  
}

//跳转到应用程序段
//appxaddr:用户代码起始地址.
void iap_load_app(u32 appxaddr)
{
	if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)	//检查栈顶地址是否合法.
	{ 
		jump2app=(iapfun)*(vu32*)(appxaddr+4);		//用户代码区第二个字为程序开始地址(复位地址)		
		MSR_MSP(*(vu32*)appxaddr);					//初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
		jump2app();									//跳转到APP.
	}
}		 
#ifndef __IAP_H__
#define __IAP_H__
#include "sys.h"  


typedef  void (*iapfun)(void);				//定义一个函数类型的参数.   
#define FLASH_APP1_ADDR		0x08010000  	//第一个应用程序起始地址(存放在FLASH)
											//保留0X08000000~0X0800FFFF的空间为Bootloader使用(共64KB)	  


void iap_load_app(u32 appxaddr);			//跳转到APP程序执行


void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 applen);	//在指定地址开始,写入bin
#endif

六、APP程序的生成步骤

1设置APP程序的起始地址和存储空间大小

2设置中断向量表偏移量,设置SCB->VTOR的值即可。

SCB->VTOR = 0x08000000|0x10000;

3设置MDK编译后运行fromelf.exe,生成.bin文件.通过在MDK User选项卡,设置编译后调用fromelf.exe,根据.axf文件生成.bin文件,用于IAP更新。

fromelf --bin -o "$L@L.bin" "#L"

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python接口自动化pytest框架安装

1、创建一个requirements.txt文件夹 2、输入内容&#xff1a;如下图 pytest pytest-html pytest-xdist pytest-ordering pytest-rerunfailures pytest-base-url allure-pytest3、在terminal中输入安装命令&#xff1a;pip install -r requirements.txt 安装成功 4、在termina…

飞书很好,但赢不了,只能裁员

心碎飞书 3 月 26 日&#xff0c;字节跳动旗下产品飞书的 CEO 谢欣发布全员信&#xff0c;正式宣布进行新一轮的组织调整&#xff0c;即裁员。 内部全员信如下&#xff1a; 我有不少朋友是在字节跳动&#xff0c;甚至就在 Lark 的。 同时我也因为会经常和一些平台的运营小伙伴有…

Kimi 200万字爆火,通义加码1000万,阿里笑而不语

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 我怎么感觉Kimi是一个“网红”产品呢?在没有任何预兆情况下&#xff0c;国产AI大模型Kimi突然爆火&#xff0c;最近我在很多平台上看到了Kimi的广告&#xff0c;感觉到处都在吹这个产品。 看见上面的新闻了吧&a…

抓包工具charles修改请求和返回数据

数据篡改的主要使用场景&#xff1a; &#xff08;1&#xff09;mock场景&#xff0c;mock入参和返回值参数&#xff0c;实现mock测试 &#xff08;2&#xff09;安全测试&#xff0c;对于支付金额等比较重要的字段&#xff0c;可以修改请求参数来进行安全测试 1.首先选择要…

2024春招小红书前端面试题分享

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

DNS协议 是什么?说说DNS 完整的查询过程?

一、是什么 DNS&#xff08;Domain Names System&#xff09;&#xff0c;域名系统&#xff0c;是互联网一项服务&#xff0c;是进行域名和与之相对应的 IP 地址进行转换的服务器 简单来讲&#xff0c;DNS相当于一个翻译官&#xff0c;负责将域名翻译成ip地址 IP 地址&#…

表格中的状态类型值(tag)

一&#xff1a;数字转换为简单的中文值 ** 不用转换直接用find()方法&#xff1a;在statusList里找&#xff1b; **lastHandleCode是对应的获取到的每行数据的code值&#xff1b; vue: <el-table-column label"执行状态" align"center"><templat…

MBR分区挂了机器起不来的两种方法解决方法

当MBR分区挂了机器起不来&#xff0c;可以试试下面的两种方法 场景1&#xff1a;开机启动&#xff0c;起不来&#xff0c;发现MBR挂了&#xff0c;但分区表还在 实验方法&#xff1a; 破坏mbr引导 MBR:44864分区表数据512bytes 首先模拟MBR损坏 然后重启&#xff0c;可以看到…

【Redis】快速入门 数据类型 常用指令 在Java中操作Redis

文章目录 一、简介二、特点三、下载与安装四、使用4.1 服务器启动4.2 客户端连接命令4.3 修改Redis配置文件4.4 客户端图形化界面 五、数据类型5.1 五种常用数据类型介绍5.2 各种数据类型特点 六、常用命令6.1 字符串操作命令6.2 哈希操作命令6.3 列表操作命令6.4 集合操作命令…

怎么创建百科人物的词条?百度百科词条创建

百度百科中&#xff0c;创建一个属于自己的词条&#xff0c;不仅是个人荣誉的象征&#xff0c;更是对其生平事迹的官方记录&#xff0c;能够让更多人了解和记住一个人的成就。那么&#xff0c;如何创建一个高质量的百科人物词条呢&#xff1f;本文伯乐网络传媒将详细解答这一问…

方案公司在当前形势下,该如何发展?

什么是方案公司&#xff1f;方案公司的简单说就是帮助第三方厂家把产品做出来&#xff0c;并从中收取部分的研发费用及提成。 方案公司的存在意义&#xff0c;帮助企业节省成本&#xff0c;降低研发风险&#xff0c;不用雇佣那么多人去研发一个新产品&#xff0c;特别是对中小企…

CPU设计实战-外设接口介绍与测试

GPIO 内置寄存器&#xff0c;BASE地址由外设所在设备接口处决定&#xff0c;这样就可以确定每个寄存器的地址&#xff1b; 要使用输出先要使能&#xff0c;要用中断也先要使能&#xff1b; 测试实验-数码管驱动 数码管与GPIO的输出接口连接 编写汇编语言 1.使能输出端口 2…

LangChain入门:3.调用OpenAI的聊天机器人-入门

内容 本次入门内容是调用OpenAI的聊天机器人功能。 实现原理是使用OpenAI提供的API&#xff0c;通过向其发送请求来生成回复文本。 首先&#xff0c;导入ChatOpenAI类&#xff0c;这个类是用于实现与OpenAI聊天机器人交互的。 pip install langchain-openai2. 编写调试代码 …

07、JS实现:用回溯法实现数组全排列的算法(一步一步剖析,很详细)

回溯法实现数组全排列的算法 Ⅰ、回溯法实现数组全排列&#xff1a;1、题目描述&#xff1a;2、解题思路&#xff1a;3、实现代码&#xff1a; Ⅱ、小结&#xff1a; Ⅰ、回溯法实现数组全排列&#xff1a; 1、题目描述&#xff1a; 给定⼀个 没有重复 数字的序列&#xff0c;…

Pillow教程06:将图片中出现的黄色和红色,改成绿色

---------------Pillow教程集合--------------- Python项目18&#xff1a;使用Pillow模块&#xff0c;随机生成4位数的图片验证码 Python教程93&#xff1a;初识Pillow模块&#xff08;创建Image对象查看属性图片的保存与缩放&#xff09; Pillow教程02&#xff1a;图片的裁…

律甲法务OA平台:信鸥科技引领法律行业新篇章

随着信息技术的飞速发展&#xff0c;法律行业也迎来了数字化转型的重要时刻。在这个信息化、智能化的时代&#xff0c;如何运用科技手段提升法律服务的质量和效率&#xff0c;成为法律行业亟待解决的问题。信鸥科技&#xff0c;作为业界的佼佼者&#xff0c;凭借其深厚的技术积…

flask_Restful数据解析参数设置

add_argument 方法参数详解 add_argument方法可以指定这个字段的名字&#xff0c;这个字段的数据类 型等&#xff0c;验证错误提示信息等&#xff0c;具体如下&#xff1a; default&#xff1a;默认值&#xff0c;如果这个参数没有值&#xff0c;那么将使用这个参数 指定的默认…

CTR之Session行为序列建模用户兴趣:DSIN

在前面的文章中&#xff0c;DIN模型 在用户行为序列建模中引入注意力机制来强调加权与target item相关的行为&#xff0c;以实现动态的兴趣表征&#xff1b;而DIEN模型 则在DIN的基础上加入时间性信息&#xff0c;使用注意力机制的GRU来挖掘用户兴趣的演变。 而今天的这篇文章…

labelme自动标注工具的安装和python代码修改

labelme嵌入SAM和EfficientSAM自动标注模型 目录: 1.labelme windows环境下安装python版本labelme 2.labelme.exe直接安装 3.labelme生成exe 4.labelme python代码修改 labelme自动标注使用方法 编辑/Create AI-Polygon 自动分割,直接生成分割图,标注为point,完成标注后…

如何用AI写作工具输出高质量内容?

随着人工智能技术的不断发展&#xff0c;AI写作工具正逐渐成为现代写作者的得力助手。它们能够通过智能算法分析大量的数据&#xff0c;生成高质量的文章内容&#xff0c;极大地提高了写作效率。但是&#xff0c;如何正确地使用这些AI写作工具输出高质量的内容&#xff0c;仍然…