STM32 IAP 升级功能
IAP
In Application Programming
可通过USB,CAN,UART,I2C,SPI等接口实现
IAP流程
Bootloader程序:接收升级程序,更新到flash指定地址;跳转到指定地址执行

STM32设置
①:为Bootloader预留0x10000空间
②:设置APP程序的起始地址

③:中断向量表的偏移量设置

④:生成bin文件
详见:https://blog.csdn.net/zhangxuechao
⑤:代码更新FLASH固件,执行FLASH代码
举例
//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.
}
else
{
printf("iap_load_app error 0x%x\r\n", *(vu32 *)appxaddr);
}
}
//执行FLASH代码
void iap_load_flash(void)
{
if((*(vu32 *)(FLASH_APP_ADDR + 4) & 0xFF000000) == 0x08000000) //判断是否为0X08XXXXXX.
{
iap_load_app(FLASH_APP_ADDR);//执行FLASH APP代码
}
else
{
printf("iap_load_flash error 0x%x\r\n", *(vu32 *)FLASH_APP_ADDR);
}
}
//更新FLASH固件
void update_flash(u8 *appbuf, u32 appsize)
{
if(appbuf == NULL)
{
return;
}
if((*(vu32 *)(appbuf + 4) & 0xFF000000) == 0x08000000) //判断是否为0X08XXXXXX.
{
iap_write_appbin(FLASH_APP_ADDR, appbuf, appsize); //更新FLASH代码
printf("固件更新完成!\r\n");
}
else
{
printf("update_flash error 0x%x\r\n", *(vu32 *)appbuf);
}
}
STM32 IAP 升级功能的更多相关文章
- STM32 IAP升级
STM32 IAP在线升级,用Jlink设置读保护后前5K字节是默认加了写保护的,导致IAP升级时擦除和写入FLASH不成功,可以做两个boot,前5k为第一个boot程序,上电时负责跳转到APP还是 ...
- STM32 IAP 升级官方资料汇总
整理了一下SMT32标准外设库进行IAP升级的官方demo: 标准库版本 STM32F10xxx in-application programming using the USART (AN2557) ...
- STM32 IAP+Ymodem功能实现(参考官方代码)
IAP:在线升级代码 ,通俗的讲就是通过USART,IIC,或者SPI,USB等等,方式,在程序中升级程序,一般用在远程升级,或者是在PCB板子都安装到模具之后还需要升级代码,这样我们就需要,通过IA ...
- 【转】stm32 IAP升级程序
一.什么是IAP,为什么要IAP IAP即为In Application Programming(在应用中编程),一般情况下,以STM32F10x系列芯片为主控制器的设备在出厂时就已经 ...
- IAP升级功能编写初期的一些困惑与疑问---完毕功能后的总结
IAP的源代码等资料我上传了,压缩包内有12个文件,,http://download.csdn.net/detail/f907279313/7524849(要积分的辛苦收集的你们就给点积分吧) 还有还 ...
- STM32 IAP 固件升级设计/U盘升级固件
源:STM32 IAP 固件升级设计/U盘升级固件 固件升级的基本思路是: 将stm32 的flash划分为两个区域: 1.Bootloader区:存放bootloader的代码,bootloader ...
- STM32 Bootloader基于ymodem传输协议串口IAP升级详解
硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 文章目录 1 预备知识 2 Bootloader 2.1 启动流程 2.2 校验跳转地址是否有效 ...
- STM32 IAP 在线升级详解(转)
源:http://blog.csdn.net/yx_l128125/article/details/12992773 (扩展-IAP主要用于产品出厂后应用程序的更新作用,考虑到出厂时要先烧写IAP ...
- STM32+IAP方案 实现网络升级应用固件
关注了这个概念有些日子了,这段时间总算有机会实战==网络升级应用固件,这里记录下遇到的问题,及解决方案. 原理与网上流传的串口作为传输手段 一致:不同之处,无非我这里使用了网络设备传输.==(lwip ...
随机推荐
- .Net Core权限认证基于Cookie的认证&授权.Scheme、Policy扩展
在身份认证中,如果某个Action需要权限才能访问,最开始的想法就是,哪个Action需要权限才能访问,我们写个特性标注到上面即可,[TypeFilter(typeof(CustomAuthorize ...
- PHP bcpow BC数学函数
定义和用法 bcpow - 任意精度数字的乘方 版本支持 PHP4 PHP5 PHP7 支持 支持 支持 语法 bcpow( string $left_operand , string $right_ ...
- vscode自动修复eslint规范的插件及配置
在开发大型项目中,经常都是需要多人合作的.相信大家一定都非常头疼于修改别人的代码的吧,而合理的使用eslint规范可以让我们在代码review时变得轻松,也可以让我们在修改小伙伴们的代码的时候会更加清 ...
- Python Web(二)
Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.Django-debug-toolbar django-debug-toolbar 是一组可配置的面板,可显示 ...
- Angular ElementRef详解
一.为什么要用ElementRef Angular 的口号是 - "一套框架,多种平台.同时适用手机与桌面 (One framework.Mobile & desktop.)&quo ...
- 【转载】作为Android开发者,你真的熟悉Activity吗?
学过android的人都知道,activity是最常用的四大组件之一,但你真的了解透彻activity了吗?接下来,本人将从activity的正常和异常生命周期.启动模式.IntentFilter匹配 ...
- volatile简记
volatile指出变量随时可能发生变化,与该变量有关的运算,不要进行编译优化,以免出错,也就是在使用变量时必须从它的地址中重新读取.
- TOMCAT修改默认端口(8080端口)
在工作中,有可能需要在一台服务器上同时部署两个或两个以上的tomcat(服务器性能够好), 那么就需要修改其中的一个的端口号才能使得两个同时工作,总共需要修改3个地方: 1.首先到安装目录(或者解压目 ...
- 使用python对整个网页进行截图
方法一.使用PyQt4的QtWebKit组件 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...
- python 1 默写用递归实现无限极分类 2 默写用树实现无限极分类
data=[ {"cat_id":3,"name":"沙河","parent_id":1}, {"cat_id ...