你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F030 IAP升级完美解决  

[复制链接]
时光虫子 发布时间:2016-5-17 11:17
/***************
IAP程序跳转APP程序
#define APPLICATION_ADDRESS     (uint32_t)0x08003000
typedef  void (*pFunction)(void);

把用户程序写入FLASH地址后执行以下代码
//跳转APP //
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
Jump_To_Application = (pFunction) JumpAddress;
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
Jump_To_Application();   

6.png
编译器默认
***************/



/**************
APP程序
#define  APPLICATION_ADDRESS    ((uint32_t)0x08004400)
void IAP_Set(void)
{
   uint32_t i = 0;
/* Relocate by software the vector table to the internal SRAM at 0x20000000 ***/  
  /* Copy the vector table from the Flash (mapped at the base of the application
     load address 0x08003000) to the base address of the SRAM at 0x20000000. */      
  for(i = 0; i < 48; i++)
  {
    *((uint32_t*)(0x20000000 + (i << 2)))=*(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));
}
  /* Enable the SYSCFG peripheral clock*/
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

/* Remap SRAM at 0x00000000 */
  SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);

}
7.png
**************/
收藏 13 评论51 发布时间:2016-5-17 11:17

举报

51个回答
c_lass 回答时间:2016-5-20 09:57:21
楼主你好,可以共享一下你的bootload代码看看么,或者是你的参考资料
c_lass 回答时间:2016-5-23 19:42:21
楼主你好,我根据技术手册写的bootload,应用程序能跑起来,但是一进中断程序就死了,请问你有没有相关的经验指点下呢
xmshao 回答时间:2016-5-23 21:33:22
按照楼主说的应该差不多了。
注意在APP开始地方放那一段代码:
uint32_t i = 0;
/* Relocate by software the vector table to the internal SRAM at 0x20000000 ***/  
   /* Copy the vector table from the Flash (mapped at the base of the application
      load address 0x08003000) to the base address of the SRAM at 0x20000000. */      
   for(i = 0; i < 48; i++)
   {
     *((uint32_t*)(0x20000000 + (i << 2)))=*(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));
}
   /* Enable the SYSCFG peripheral clock*/
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

/* Remap SRAM at 0x00000000 */
   SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);

一个STM32F0 的IAP 应用话题
时光虫子 回答时间:2016-5-24 21:23:10
c_lass 发表于 2016-5-20 09:57
楼主你好,可以共享一下你的bootload代码看看么,或者是你的参考资料

我是用官方的IAP,我明天去公司上传分享
时光虫子 回答时间:2016-5-25 09:20:45
链接:https://pan.baidu.com/s/1nv8dAwp 密码:fc25

IAP升级DEMO

点评

赞!  发表于 2018-11-21 15:28
c_lass 回答时间:2016-5-25 11:41:06
楼主你好,我参考技术手册,那你的iap  和原子的iap对比,发现M0内核的芯片SCB寄存器组里没有中断向量表偏移寄存器,不能设置中断向量表偏移,,然后我写的BOOTLOAD 下进去,APP程序不进中断就能运行下去,一旦进了中断,PC就跳不回来了,程序死了,,,,  我根据你的代码,在app程序一开始就把存储在FLASH的app程序前48*4个字节复制到SRAM,把SRAM重映射到0x0000000, 应用程序没反应,好多问题啊,,,
c_lass 回答时间:2016-5-25 11:50:26
好像发现问题了,你app程序的SRAM起始地址是0x200000c0,0X20000000-0X200000BF是存储中断向量表,然后映射到0x00000000 里去吧,0x200000c0之后的空间作为应用程序的堆栈吧
c_lass 回答时间:2016-5-25 12:41:03
我的问题解决了,就是没有在SRAM这里设置起始地址为0x200000c0,楼主给力
c_lass 回答时间:2016-5-25 19:02:06
我也把我的IAP程序贡献出来给大家参考:我的bootload是上电五秒内检查是否有串口数据发送,有就更新应用程序,没有就闪烁LED  PB0 PB1,应用程序是闪烁LED PF7,如果usart发送0x05 那么PB0 PB1 也一起闪烁。应用程序要注意不能大于4K (我设置前4Ksram给bootload用)Bootload不能大于8K(自己在程序中定义的),Flash烧录这部分还有较大的优化空间,半字编程的时候要注意大小端,

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版