嵌入书-不吃葱花 2023-11-17 16:55 采纳率: 0%
浏览 13
已结题

STM32 IAP升级问题

问题:使用STM32F103RCT6,将其划分四个区域,boot-APP1-APP2-存储区,boot区起始地址0x08000000,APP1区起始地址0x08002000,APP2区起始地址0x08020000,存储区起始地址0x0803E000。目前的情况是这样的,使用IAP升级将APP2的bin文件覆盖APP2区,然后跳转APP2,不能使用,此时跳转地址为APP2的地址,然后我将keil中的地址选项选择第二个区,编译烧录,可以正常使用,且升级的数据从J-flash读取和烧录读取的数据一样,地址也没有差别,但通过IAP升级就是不运行。

  • 写回答

17条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-11-17 16:56
    关注
    获得0.60元问题酬金

    引自强大而免费的微信小程序:皆我百晓生

    问题分析:

    根据描述,您正在使用STM32F103RCT6芯片进行IAP(In-Application Programming)升级。您将芯片的存储区分成了四个区域:boot、APP1、APP2和存储区,并且成功将APP2的bin文件覆盖了APP2区域。但是在跳转到APP2后,无法正常运行。但是当您使用J-Flash将APP2区域的数据读取并烧录到第二个区域时,程序能够正常运行。

    以下是可能导致问题的一些原因和解决方案:

    1. 代码逻辑错误:

    在IAP升级后跳转到APP2时,可能存在代码逻辑错误导致程序无法正常运行。请确保APP2的代码正确且适应新的运行环境。检查以下可能的问题:

    • 是否将中断向量表正确地重定向到APP2的起始地址?
    • 是否正确设置APP2区域的堆栈指针?

    请检查以上部分的代码和设置,确保没有错误。

    2. 代码移植问题:

    使用J-Flash进行烧录时,可能会自动将代码移植到正确的位置,从而导致APP2在第二个区域正常运行。但是,使用IAP升级时,您可能需要手动执行一些代码移植操作。确保在升级后正确地设置APP2的起始地址、重定向中断向量表等。

    请参考以下步骤来设置APP2的起始地址和重定向中断向量表:

    1.在APP2的代码中添加一个向量表数组,将其命名为__Vectors(可以在代码的开头定义)。

    uint32_t __Vectors[] __attribute__((section(".isr_vector"))) = {
        // 向量表的内容,包括复位向量和中断处理函数入口
    };
    

    2.在代码中手动设置APP2的起始地址为APP2区域的起始地址。

    // 假设APP2区域起始地址为0x08020000
    #define APP2_START_ADDRESS 0x08020000
    
    // 在代码中设置堆栈指针和重定向中断向量表到APP2的起始地址
    void BootToApp2(void)
    {
        // 设置堆栈指针
        __set_MSP(*(volatile uint32_t*)APP2_START_ADDRESS);
    
        // 重定向中断向量表
        SCB->VTOR = APP2_START_ADDRESS;
    
        // 跳转到APP2
        void (*app2_reset_handler)(void) = (void (*)(void))(APP2_START_ADDRESS + 4);
        app2_reset_handler();
    }
    

    3.在IAP升级后,调用BootToApp2()函数来跳转到APP2。

    // 在IAP升级完成后的代码中调用BootToApp2()函数
    BootToApp2();
    

    确保在升级后的代码中执行了以上步骤,以正确设置APP2的起始地址和重定向中断向量表。

    3. IAP升级问题:

    检查您的IAP升级代码,确保它能够正确地在APP2区域进行烧录。可能需要检查以下要点:

    • 确保在IAP升级过程中,已经正确地将APP2的bin文件写入到APP2区域(0x08020000)。
    • 确保在升级过程中,没有发生数据损坏或写入错误。

    请提供您的IAP升级代码,以便我们更好地帮助您检查问题。

    希望以上分析和解决方案能够帮助您解决问题。如果您仍然遇到困难,请提供更多的详细信息和相关代码,以便我们能够更进一步地帮助您。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月25日
  • 赞助了问题酬金15元 11月17日
  • 创建了问题 11月17日

悬赏问题

  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解
  • ¥15 有偿请教计算电磁学的问题涉及到空间中时域UTD和FDTD算法结合的
  • ¥15 three.js添加后处理以后模型锯齿化严重