STM32在线升级原理,和应用程序不正常运行

本文介绍了STM32设备的在线升级原理,强调引导代码在开机时的检查和跳转到应用程序过程。同时,讨论了在升级后应用程序在特定偏移地址运行时可能出现的中断问题,特别是中断处理函数代码量过大导致的问题。建议检查中断函数是否有长时间运行或大代码量的调用。
摘要由CSDN通过智能技术生成

为方便产品出厂后,用户可以通过外设接口如USB,USART对设备进行升级,通常会有一段引导代码,在开机的时候从Boot启动,启动通过与上位机通信是否需要升级,如果没有升级就直接跳转到APP空间,及一个超循环体中(无操作系),boot程序一般放在flash开始出0x08000000处,用户可以在此处放入boot代码,处理上位机发送过来代码段数据,通过操作flash将我们的APP放到指定偏移地址,烧写完毕后,可以自动跳转到对应的地址开始执行应用程序APP;应用程序如果通过在线烧写st-link烧写,需要将keil编译选项中的rom地址改为0x08002000,0x2000就是APP存放代码的偏移地址,并且还需要再代码中将我们的中断向量偏移到0x2000处;

NVIC_VectTableSet(NVIC_VECTTAB_FLASH, 0x2000);//将中断向量表初始化

从boot跳转到APP空间的函数可以参考如下代码段,在跳转前,必须先关闭掉所有可能产生中断的外设,如下面的定时器,因为在跳转后,app如果还未重新定义中断向量表,此时产生的中断就会让程序跑飞,必须关闭:

void Go_APP(void)
{
u32 JumpAddress;

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值