HAL库常见报错(2):烧录成功但是没有运行用户代码


无论是HAL库工程还是标准库工程,在刚刚拿到别人给的工程,烧录一直可以成功,但是不运行用户程序,现象如下:
在这里插入图片描述
这个工程的代码已经成功烧录了,但是就是不运行这个工程,运行的是芯片中原有的代码

问题分析:

  1. 仔细看了上图的烧录过程,看看它的编译信息,比我自己CUBEMAX生成的其他工程多出了一些信息,正常工程编译信息如下:
    在这里插入图片描述
    它多出了:After Build - User command #1: C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin --output=output\TC_APP_FW_USER_2_V102.bin STM32F103RB_Nucleo\TC_APP_FW_USER_2_V102.axf这个是IAP的功能,让工程生成BIN文件,用来做升级的。

    关于IAP的知识自行B站学习,这里不讲。
    学习视频:https://www.bilibili.com/video/BV1dC4y187JR?from=search&seid=16749691524608686385
    代码:http://www.ing10bbs.com/forum.php?mod=viewthread&tid=1458&extra=page%3D1
    (代码在硬石的F1里面,有基于HAL的)

  2. 只要知道这个是在flash中指定地址来运行代码的。因为我们的代码都是默认地址开始的(我们平时创建的都是采用默认地址开始运行,可以理解为BOOT工程),而这个工程其实就是在BOOT工程运行后跳转到的APP工程。

索嘎,那么我们改一下工程的启动地址就好了。

问题解决:

  1. 改地址。
    HAL库常见报错(2):烧录成功但是没有运行用户代码_第1张图片
    果然有问题,地址的起始不对。F1的正确的如下:(其他型号的用cubemax随便生成一个工程就知道啦)
    HAL库常见报错(2):烧录成功但是没有运行用户代码_第2张图片
  2. 还是改地址
    system_stm32f1xx.c中改VECT_TAB_OFFSET的值。
    HAL库常见报错(2):烧录成功但是没有运行用户代码_第3张图片
    问题解决。

• 由 青梅煮久 写于 2021 年 06 月 01 日

你可能感兴趣的:(嵌入式)