STM32IAP的使用关键点

所谓IAP其实就相当于一个小小的bootloader 用来更新程序的

很多产品基本都是程序做好后就直接在产线烧录一次就OK了,但是,但是BUG有时候是无可避免的,经常有产品装好后又要重新拆外壳 取下板子重新上烧录架烧的惨痛经历,所以,这种情况下IAP就很有必要了,只要一个对外的接口就能在线更新了,常用的是     USB   口,当然要是一定要用串口的话也是可以的 硬件上麻烦一些而已,下面就是例程

typedefvoid(*pFunc     ti   on)(void);

pFunc  TI onJump_To_Applica  TI on;

unsignedlongJumpAddress;

if(!Check_Whether_En     te   r_UpdateMode())//这个函数是自定义的通过判断按键决定进入bootloader还是APP应用

{

if(((*(__IOuint32_t*)FLASH_START_ADDR_NORMAL_FIRMWARE)&0x2FFE0000)==0x20000000)//检查栈顶指针

{

/*Jumptouserapplica  TI on*/

JumpAddress=*(__IOuint32_t*)(FLASH_START_ADDR_NORMAL_FIRMWARE+4);//取出APP的RESET地址

Jump_To_Applica  TI on=(pFunction)JumpAddress;//将地址传给函数指针

/*Initializeuserapplication‘sStackPointer*/

__set_MSP(*(__IOuint32_t*)FLASH_START_ADDR_NORMAL_FIRMWARE);//设置栈顶指针

Jump_To_Application();//跳入APP

}

}

FLASH_START_ADDR_NORMAL_FIRMWARE这个地址是APP起始地址

这就是IAP的基本思路如果不进入APP的话就进入IAP进行代码更新IAP里在添加USB的处理到了这里IAP的程序就基本完成了

上面例程的APP地址我设的是0x08003000;那APP工程的程序基地址也要设为0x08003000FLASHSIZE也要相应的减去0x3000

 STM32IAP的使用关键点_设计制作_制造/封装

到了这里还有一点要注意的,我们都知道一般情况     STM32   复位后从0x08000000开始取指,中断向量从0x08000004开始第一个为RESET向量 那APP工程的中断向量就不能如此了 APP的向量地址要从0x08003000开始,这点比较容易被忽略掉,不过也可能是我自己比较傻的问题,说不定大部分人都懂了就我还蒙在鼓里 如下图

 STM32IAP的使用关键点_设计制作_制造/封装

35
172
0
55

相关资讯

  1. 1、机床使用寿命是关键提高铸件质量是我国机床行业当务之急4104
  2. 2、揭秘!游戏设计师如何巧妙地规避VR晕动症1839
  3. 3、4家减速器上市公司发布业绩公告:1家被ST1家净利大增93.34%150
  4. 4、浅谈一种基于嵌入式PC的PIII计算机系统设计与实现4122
  5. 5、2019年全球液晶电视面板预计供需比为7.2%,显示供过于求4907
  6. 6、电力物联网智慧路灯充电桩传感器技术应用方案2750
  7. 7、C语言嵌入式系统编程中软件架构的问题2151
  8. 8、交流电机线圈重绕的方法步骤829
  9. 9、我国首个大气环境监测卫星“大气一号”下半年出厂3266
  10. 10、市场信息三则:来自造船、光伏、工业机器人631
全部评论(0)
我也有话说
0
收藏
点赞
顶部