完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
最近在搞stm32的在线升级,网上资料也是挺多的。看了好多文档之后总算是理解了。现在自己再整理一遍。
个人觉得,如果要做IAP的话,首先得知道一些基础。 1、cotex m系列都是支持程序在flash里面运行的,里面由几个特别寄存器用来存sp(栈指针)和cp(程序跳转指针)。(程序跳转的时候需要用到) 2、cotex m 系统当发生硬件中断的时候,cp指针会被强制切换到(0x800 0004)flash里面的复位地址中,然后根据中断号进行指针偏移,这些中断入口的在启动文件(startup_stm32f070xb.s)。如果把寄存器设置设置成 SYSCFG->CFGR1 |= 0X03; 这样就意味这,硬件中断发送后pc指针被强制切换到0x200 0004(也就是sram里面)。cotex m4 有一个寄存可以设置中断发送后,pc指针直接强制切换到自定义的地址,但是M0是没有的。所以M0需要把程序的中断映射到sram里面,这样才能实现中断功能。keil 可以设置把生成的代码放到哪里,还有sram从哪里开始使用等。 3、keil生成的.hex文件其实是一个标准的下载文件,但并不是保存在flash里面运行的代码。保留在flash里面的运行代码是.bin文件。也就是说如果使用STM32 ST-LINK Utility,把flash里面的东西读出来和.hex文件是不一样的。因此在线升级(IAP)需要的是.bin文件。keil里面可以调用官方提供的cmd命令fromelf.exe 直接把.hex文件生成.bin文件。(如果把bin文件,直接拷到片内的flash 的0x800 0000 是可以直接运行的) 以下是有关操作: 第一:设置sp的和cp指针 __asm void MSR_MSP(u32 addr) { MSR MSP, r0 //set Main Stack value BX r14 //r14是lr寄存器,这个在c语言中程序跳转回使用lr留存跳之前的地址。其实也即是返回。 } if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈地址是否合法 jump2app=(iapfun)*(vu32*)(appxaddr+4); MSR_MSP(*(vu32*)appxaddr); //设置栈地址 jump2app(); //跳转效果等同汇编直接使用b xxxx 或者是ldr r15,#xxxx } else return ACK_FALSE; 第二:设置Keil的flash和sram的开始地址 第三:使用fromelf.exe生成对于的.bin文件 最后生成的.bin文件想个办法写道内部的0x8005000里面即可。这里有一个简单的验证方法。 先烧录bootloader程序,然后把app程序再烧录进去。在bootloader程序可以实现一个功能:把app的代码搬到片内的另外一个内存里面,然后再在烧录app程序的flash烧录其他的程序。重启的时候bootloader 把之前备份的代码重新搬移到app(0x8005000)里面如果能正常运行,这说明成功。 另外一种实现方法:用qt编写一个上位机串口工具,在bootloader里面初始化 串口,通过一定的协议把.bin文件烧录到片内的flash里面也可以。 需要注意的事情: 1、直接修改sp和cp指针跳转时,bootloader设置的外设寄存器是不会改动,直接就跳到app应用上了,所以这里能会导致app运行失败。所以建议使用bootloader执行系统复位,然后在不初始化任何外设的情况直接调转。这里可使用固定一个sram来存标志位,并设置该位置重启后不改动。设置语法如下 __attribute__((zero_init)) u32 ResetJampMask[2] __attribute__((section(".ARM.__at_0x20000100"))); |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1780 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1081 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1679 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
596浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
556浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 19:42 , Processed in 0.697234 second(s), Total 43, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号