文章目录[隐藏]
单片机物联网远程升级方案,直接上干货
一般消费级产品,为了性价比,选用的mcu,一般资源很有限,以stm32103c6t6为例 ram 20k rom64k,主要功能实现如下
MCU通过BOOT程序跳转到App主程序。BOOT程序实现引导跳转功能,App实现主程序业务功能。BOOT和App程序均存储在MCU内部Flash里面。
在keil中地址设置例如下图,地址必须连续,boot地址的结束是app程序的起始地址,必须预先规划好程序空间大小,比如boot
0x8000,32768字节,为32k,以此类推。
BootLoader
app
**跳转程序,校验栈顶指针,正确则跳转程序**
/* Test if user code is programmed starting from address "APPLICATION_ADDRESS" */
if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
{
/* Jump to user application */
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
/* Jump to application */
Jump_To_Application();
}
app中需要设置栈指针
int main(void)
{
SCB->VTOR = FLASH_BASE | 0x4000;
HAL_Init();
while(1)
{
}
}
防止升级错误卡死,上看门即可,按时喂狗…
版权声明:本文为CSDN博主「8421plus」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/iyy123IUU/article/details/122252970
单片机物联网远程升级方案,直接上干货
一般消费级产品,为了性价比,选用的mcu,一般资源很有限,以stm32103c6t6为例 ram 20k rom64k,主要功能实现如下
MCU通过BOOT程序跳转到App主程序。BOOT程序实现引导跳转功能,App实现主程序业务功能。BOOT和App程序均存储在MCU内部Flash里面。
在keil中地址设置例如下图,地址必须连续,boot地址的结束是app程序的起始地址,必须预先规划好程序空间大小,比如boot
0x8000,32768字节,为32k,以此类推。
BootLoader
app
**跳转程序,校验栈顶指针,正确则跳转程序**
/* Test if user code is programmed starting from address "APPLICATION_ADDRESS" */
if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
{
/* Jump to user application */
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
/* Jump to application */
Jump_To_Application();
}
app中需要设置栈指针
int main(void)
{
SCB->VTOR = FLASH_BASE | 0x4000;
HAL_Init();
while(1)
{
}
}
防止升级错误卡死,上看门即可,按时喂狗…
版权声明:本文为CSDN博主「8421plus」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/iyy123IUU/article/details/122252970
暂无评论