基于STM32的IAP功能终于完成了,这里推荐几个好用的方法:
1、STM32有操作Flash的库文件好好用的,直接擦,写,读的话就直接强制指针读某个地址啦;
2、本人不会VC/VB写上位机PC端的接口软件不会,不然协议直接自己定了,但是不会也有不会的解决方法,就是利用PC超级终端里面自带的XModem协议啦,或者用SecureCRT软件也可以啦(官方下载最新版,然后你懂的,三下五除二PJ了);
3、写XModem本身不难,但是本着实用主义的理念,不想自己写了,直接在网站老外写的开源的C代码,移植一下,稍微修改即可,好简单啦;下载地址:3w.menie.org
哦,对了printf函数必不可少,这个网站里面也包含了该函数,也是很容易移植的啦;
4、然后就是STM32Flash分区,修改VECTOR偏移量啦,啥的,也很容易的撒,ST也提供了库函数修改Vector的偏移量: NVIC_SetVectorTable(NVIC_VectTab_FLASH, 20480); //修改偏移了20k flash空间(我的bootloader就是20k)
5、跳转函数编写:
这个参考某个工程啦:
/* Jump to Absolute Address.
*/
#if defined ( __CC_ARM )
__asm void BOOT_jump(uint32_t sp, uint32_t pc)
{
/* Set new MSP, PSP based on SP (r0)*/
msr msp, r0
msr psp, r0
/* Jump to PC (r1)*/
mov pc, r1
}
#else
void BOOT_jump(uint32_t sp, uint32_t pc)
{
(void) sp;
(void) pc;
/* Set new MSP, PSP based on SP (r0)*/
__asm("msr msp, r0");
__asm("msr psp, r0");
/* Jump to PC (r1)*/
__asm("mov pc, r1");
}
#endif
6、一切都ok啦,串口调试没有问题,直接可以升级啦;
(图片稍后奉上)
7、把串口掐断,加入两个RAK415模块。
效果依旧~115200bps;读写没任何压力~~ouye
|