首先是IAP
STM32F103C8T6的flash是64k,每次擦除是1k
1、用串口接收APP的bin文件数据,然后写入内部的FLASH
//appxaddr是要跳转的地址 设置是0x0800500
//appbuf是串口接收到的app的bin文件数据
//appsize是bin的大小
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)
{
        u8 page = 0;
        u32 i =0;
        u16 *p = (u16 *)appbuf;
        page = FLASH_PagesMask(appsize);//得到要擦除的页数
        printf("\r\n要擦除的数据页数:%d\r\n",page);
        FLASH_Unlock();//解锁
        for(i = 0;i < page; i++)
        {
                CPU_IntDis();//关中断
                FLASH_ErasePage(appxaddr+i*Page_Size);//一次擦除1024字节
                CPU_IntEn();//开中断
                if(Flash_ReadHalfWord(appxaddr+i*Page_Size)!=0xffff)
                {
                        printf("\r\n擦除出错.................\r\n");
                }
        }
        for(i = 0;i < appsize;i=i+2)
        {
                FLASH_ProgramHalfWord(appxaddr + i,*p);//半字写入
                if((Flash_ReadHalfWord(appxaddr +i) & 0xff)!=appbuf[i])//判断写入的是否正确
                {
                        FLASH_Lock();
                        printf("\r\n写入错误\r\n");
                        return ;
                }
                p++;
        }
        FLASH_Lock();
}

上面是把接收到串口的数据写入flash,写入的数据是没有错误的,通过读flash和app的bin文件做了比较

2、下面是跳转函数

typedef  void (*iapfun)(void);                                //定义一个函数类型的参数.
iapfun jump2app; 
void iap_load_app(u32 appxaddr)//appxaddr是0x08005000
{
        if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)        //检查栈顶地址是否合法.
        { 
                jump2app=(iapfun)*(vu32*)(appxaddr+4);                //用户代码区第二个字为程序开始地址(复位地址)                
                MSR_MSP(*(vu32*)appxaddr);                                        //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
                jump2app();                                                                        //跳转到APP.
                
        }
}

串口接收发送都是采用中断
每次在跳转的时候就会进入HardFault_Handler,不知道错在什么地方

app的设置如下
1、在魔法棒中设置app的起始地址为0x08005000
2、设置中断向量表SCB->VTOR = FLASH_BASE | 0x5000;
然后程序里面就是一个很简单的LED的闪烁,

每次在接收完成,把数据写入到flash之后再进行跳转就会进入HardFault_Handler,不知道那里有错,

这是之前我发的帖子

错误的原因是:我虽然设置了起始地址,但是没选择如下图,所以map里面的地址一直没改变,use memory哪里默认的不是勾选,应该把哪里勾选

这样我的问题就解决了 ,有空再把bootloader的整体给写出来,,,这里个错误找了我3天时间 ,,好浪费啊  希望可以帮助到其他人

这样map就可以看到起始地址的改变了

用STM32F103C8T6的做IAP时,在跳转时一直进入HardFault_Handler 解决方法相关推荐

  1. 使用nginx做反代时遇到413 Request Entity Too Large的解决方法

    使用nginx做反代时遇到413 Request Entity Too Large的解决方法 参考文章: (1)使用nginx做反代时遇到413 Request Entity Too Large的解决 ...

  2. 打开一个网站会跳到另一个怎么办,解决方法是什么?

    当我们在搜索引擎上搜索自已公司网站打开却看到其他网址,看到这种情况肯定让人头痛不已,那我们如何解决呢? 第一.不要责怪搜索引擎: 第二.查找自身网站问题,因为一般都是在网站被挂马的情况才会出现这样的情 ...

  3. DEDECMS后台无法登陆并跳转回登陆界面的解决方法

    本文详细分析了DEDECMS后台无法登陆并跳转回登陆界面的解决方法.分享给大家供大家参考.具体方法如下: 一.问题: 网站已经运行了很久,前些天突然在登陆的时候提示密码不正确,而且不管怎么试,都是无法 ...

  4. xp系统提示rpc服务器不可用,XP更新系统时间时提示:RPC服务器不可用的解决方法...

    今天小编由于工作的原因,更改了XP系统的系统时间,用完之后,我们这里需要将他更换回来,但是又不想要自己手动去输入,这个时候,我们选择"Internet 时间"中的立即更新,报了一个 ...

  5. 3d缺少html文件,3dmax打开时显示缺少外部文件的原因及解决方法

    为什么每次打开3DMAX都显示缺少外部文件?在做3dmax模型贴图或者下载模型之后,经常会出现缺少外部文件的情况,这是怎么回事?遇到这一情况又该如何解决呢?接下来小编就给大家整理了用3dmax打开模型 ...

  6. linux红帽网页中文乱码解决,【linux学习笔记】安装redhat时中文显示乱码(小方框)解决方法...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 ------------------------------------- 防抽------------------------------------- ...

  7. 打包解决方案后,安装时提示只能在IIS5.1以上运行解决方法

    打包解决方案后,安装时提示只能在IIS5.1以上运行解决方法 参考文章: (1)打包解决方案后,安装时提示只能在IIS5.1以上运行解决方法 (2)https://www.cnblogs.com/wp ...

  8. Linux安装软件时缺少依赖包的简单较完美解决方法!

    Linux安装软件时缺少依赖包的简单较完美解决方法! 参考文章: (1)Linux安装软件时缺少依赖包的简单较完美解决方法! (2)https://www.cnblogs.com/xiaommvik/ ...

  9. oracle中“ORA-00060: 等待资源时检测到死锁” 或存储过程编译卡死 解决方法

    oracle中"ORA-00060: 等待资源时检测到死锁" 或存储过程编译卡死 解决方法 参考文章: (1)oracle中"ORA-00060: 等待资源时检测到死锁& ...

  10. jQuery $.post()返回类型为json时不进入回调函数的原因及解决方法

    jQuery $.post()返回类型为json时不进入回调函数的原因及解决方法 参考文章: (1)jQuery $.post()返回类型为json时不进入回调函数的原因及解决方法 (2)https: ...

最新文章

  1. MVC之Model转Json
  2. 安卓html5桌面提醒,HTML5桌面通知提示功能的实现
  3. Python 入门 Day4
  4. 美国服务器百度抓取耗时不稳定,百度或者其他搜索引擎抓取频次快慢的因素,还会受什么有影响?...
  5. KMyMoney:全体理财好管家
  6. webpack:js、css、es6装载与压缩配置-学习笔记
  7. WCF 非http寄宿IIS
  8. 再论C++之垃圾回收(GC)
  9. 第二季-专题3-汇编语言得玩转
  10. BNU 鸣人的查克拉
  11. 泰迪杯数据挖掘挑战赛—机器学习(二)
  12. 1688接口:item_search - 按关键字搜索商品
  13. 像素画,治愈系超萌!看了这个,我都心痒了
  14. 微商潮牌怎么引流?成功的人不是赢在起跑点
  15. 利用Linux的crontab实现定时执行python任务
  16. 深圳垃圾分类告诉你这些都是什么垃圾 不仅要会分还要分的准确才行
  17. 智能优化算法之灰狼优化算法(GWO)的实现(Python附源码)
  18. oracle数据库导入dmp文件
  19. 别再说你不会,规则引擎Drools了
  20. 百度排名批量查询_一篇文章讲透百度霸屏引流细节思路与极其简单的操作玩法...

热门文章

  1. 【docker】docker run命令详解
  2. Redis集群:sharding策略
  3. jQuery面试题-区别mouseover和mouseenter的不同之处(看了也许对你有好处)
  4. rocm平台_痛击NV CUDA!AMD ROCm开放计算平台瓜熟蒂落
  5. 字典删除多个键值对方法_Life is short,you need Python——Python序列(元组、字典、集合)...
  6. 思科bfd静态路由切换_思科路由器曝出两个严重零日漏洞,已被野外利用
  7. 数据中心空调施工工序工艺管理要点
  8. 重新考虑数据中心的冷却方案—水冷却或将再次兴起
  9. java documentlistener_java在DocumentListener中更改文档
  10. Java:Java编程实现导出二维码