• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

stm32 IAP升级 APP代码无法正常进入debug模式

Eagleson 2016-11-02 浏览量:3804
如题,f103RB的方案,升级功能已经OK了 但是 APP无法进入正常的debug,求解~
2 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 本帖最后由 MOP 于 2016-11-3 12:20 编辑

    Eagleson 发表于 2016-11-3 11:27
    你指的是这个吗?
    嗨,您有試著看看您在Debug時候,Memory視窗輸入FLASH的位址(0x8002000)看有沒有Data?


    看您應該是串口升級後才去Debug,而我方式是APP事先已經燒錄好在該位置了,若沒有Data,嘗試以下


    還有,我看你向量表還是沒改,我步驟裡有寫了

    3. APP使用者應用部分,首先在main函式中第一行加入
    NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x2000)
    或者修改system_stm32f10x.c中的
    #define VECT_TAB_OFFSET 0x2000
    有問題繼續提出:)
    • 发布于 2016-11-02
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:12
  • 本帖最后由 MOP 于 2016-11-3 03:07 编辑

    不知道您做到哪了?
    我再整理一下似乎比較清楚,有問題再提出來,這裡我隨便開一個專案做示例:)

    分為IAP本身跟APP使用者應用,分成兩次編譯和燒錄

    1. IAP部分,這個部分位址不需要更動的,因此
    #define ApplicationAddress    0x8002000
    修改APP啟動的地址,這要與APP使用者應用工程對應


    IROM1部分設定為原來的0x8000000,size改為0x2000


    Start一樣是0x08000000, Size改為0x00002000

    2. IAP專案工程部分設置完成,按下Download進行燒寫

    3. APP使用者應用部分,首先在main函式中第一行加入
    NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x2000);
    
    或者修改system_stm32f10x.c中的
    #define VECT_TAB_OFFSET 0x2000

    IROM1則改為0x8002000,size可以是此地址之後的所有區域,這裡我只設0x40000


    因為您要直接debug你的APP,所以燒錄也要修改,改為Start是0x08002000,size為0x00040000


    然後增加產生bin檔案的指令,格式如下

    C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin --output ./Objects/.bin ./Objects/.axf
    其中執行檔路徑是預設安裝路徑,這個檔案是用來使用Serial的modem來傳送的,debug的話直接先燒錄上去即可

    4. 完成這部分開始編譯

    然後進行燒錄的動作,完成

    5. 這樣您就可以直接debug了,因為APP也在對應的起始地址上,經過IAP跳轉後,會直接進到APP的mian函式









    • 发布于2016-11-03
    • 举报
    • 评论 0
    • 1
    • 0

  • 楼主你的IAP执行流程是什么样的?
    • 发布于2016-11-03
    • 举报
    • 评论 0
    • 1
    • 0

  • 问题找到了,IAP程序中有个需要串口接收字符 触发才能进入APP code 因为我测试板子没有按键,需要在超级终端键入字符才会有动作,忽略了这一点。感谢回答问题的各位亲~
    • 发布于2016-11-03
    • 举报
    • 评论 0
    • 1
    • 0

  • 其实最简单的是你去掉中断向量表地址的偏移就可以DEBUG了。。反正刷程序的功能已经实现了。
    • 发布于2016-11-02
    • 举报
    • 评论 0
    • 0
    • 0

  • MOP 发表于 2016-11-3 03:02
    不知道您做到哪了?
    我再整理一下似乎比較清楚,有問題再提出來,這裡我隨便開一個專案做示例


    谢谢回复~,我的实现步骤和您回复的是一样的,使用串口超级终端进行升级也可以了。但是APP的debug却无法正常进入APP的main函数
    • 发布于2016-11-03
    • 举报
    • 评论 0
    • 0
    • 0

  • fighter 发表于 2016-11-2 20:25
    其实最简单的是你去掉中断向量表地址的偏移就可以DEBUG了。。反正刷程序的功能已经实现了。 ...

    谢谢~,我想找出问题,因为之前有在其他项目里用过,是可以正常debug的
    • 发布于2016-11-03
    • 举报
    • 评论 0
    • 0
    • 0

  • 除了下载地址设置外,你还需要在程序内指定偏移。看看你的中断向量怎么设置的
    • 发布于2016-11-03
    • 举报
    • 评论 0
    • 0
    • 0

  • MOP 发表于 2016-11-3 11:57
    嗨,您有試著看看您在Debug時候,Memory視窗輸入FLASH的位址(0x8002000)看有沒有Data?



    您好的 我的测试代码 是stm32f103rb 是128K的flash 我的设置地址偏移的是0x10000
    这个是我的main函数的开始
    这个是system_stm32f10x.c 中的中断向量修改

    这个是在IAPdebug下 观察到的Memory 0x8010000地址的数据,也是对的








    • 发布于2016-11-03
    • 举报
    • 评论 0
    • 0
    • 0

  • MOP 发表于 2016-11-3 11:57
    嗨,您有試著看看您在Debug時候,Memory視窗輸入FLASH的位址(0x8002000)看有沒有Data?



    这个是仿真器的设置
    IAP的flash地址设置

    APP的flash地址设置



    • 发布于2016-11-03
    • 举报
    • 评论 0
    • 0
    • 0

  • 汐玥 发表于 2016-11-3 14:30
    楼主你的IAP执行流程是什么样的?

    就是 IAP例子的的超级终端的菜单选择,然后是等待按键输入,根据输入进入各个环节
    • 发布于2016-11-03
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

stm32 IAP升级 APP代码无法正常进入debug模式