stm32 烧写下载失败 Error: Flash Download failed - "Cortex-M3"

问题:Error: Flash Download failed  -  "Cortex-M3"


Load "10\\10.axf" 
Set JLink Project File to "G:\vs\keil\test\10\MDK-ARM\JLinkSettings.ini"
* JLink Info: Device "STM32F103ZE" selected.
 
JLink info:
------------
DLL: V4.98e, compiled May  5 2015 11:00:52
Firmware: J-Link ARM V8 compiled Jan 31 2018 18:34:52
Hardware: V8.00
S/N : 20080643 
Feature(s) : RDI,FlashDL,FlashBP,JFlash,GDBFull 
 
* JLink Info: Found SWD-DP with ID 0x1BA01477
* JLink Info: Found SWD-DP with ID 0x1BA01477
* JLink Info: Found Cortex-M3 r1p1, Little endian.
* JLink Info: FPUnit: 6 code (BP) slots and 2 literal slots
* JLink Info: CoreSight components:
* JLink Info: ROMTbl 0 @ E00FF000
* JLink Info: ROMTbl 0 [0]: FFF0F000, CID: B105E00D, PID: 001BB000 SCS
* JLink Info: ROMTbl 0 [1]: FFF02000, CID: B105E00D, PID: 001BB002 DWT
* JLink Info: ROMTbl 0 [2]: FFF03000, CID: B105E00D, PID: 000BB003 FPB
* JLink Info: ROMTbl 0 [3]: FFF01000, CID: B105E00D, PID: 001BB001 ITM
* JLink Info: ROMTbl 0 [4]: FFF41000, CID: B105900D, PID: 001BB923 TPIU-Lite
* JLink Info: ROMTbl 0 [5]: FFF42000, CID: B105900D, PID: 101BB924 ETM-M3
ROMTableAddr = 0xE00FF003
 
Target info:
------------
Device: STM32F103ZE
VTarget = 3.287V
State of Pins: 
TCK: 0, TDI: 1, TDO: 1, TMS: 0, TRES: 1, TRST: 1
Hardware-Breakpoints: 6
Software-Breakpoints: 8192
Watchpoints:          4
JTAG speed: 4000 kHz
 
Erase Done.
Programming Failed!
Error: Flash Download failed  -  "Cortex-M3"
Flash Load finished at 10:15:22


解决方法:

1.


2.



3.



### 编译错误 L6236E 的原因分析 该错误 `L6236E: No section matches selector - no section to be FIRST/LAST` 表明链接器无法找到匹配的选择器定义中的任何部分。通常情况下,这种问题发生在 `.sct` 文件配置不正确或者缺少必要的启动文件时[^1]。 具体来说,在 STM32 开发过程中,如果工程中未包含合适的启动文件(通常是 ST 官方提供的 `.s` 文件),就会触发此错误。这些启动文件负责初始化硬件并设置堆栈指针等重要参数。如果没有它们,链接器将找不到用于标记内存区域的第一节或最后一节的位置[^4]。 --- ### 解决方案 #### 方法一:检查并添加启动文件 确认项目中是否已包含适合目标芯片的启动文件(如 `startup_stm32fxxx.s`)。如果没有,则需从官方库下载对应版本的启动文件,并将其加入到 Keil 工程中。完成这一步后重新编译即可消除错误。 #### 方法二:修改 Scatter File 配置 打开 HAL_06_LCD.sct 文件,确保其内容符合实际需求。以下是典型的 scatter file 结构: ```plaintext LR_IROM1 0x08000000 0x00080000 { ; load region size_region ER_RO 0x08000000 0x00040000 { ; execution region RO base_address length *.o (RESET, +First) ; *(InRoot$$Sections) ; .ANY (+RO) ; } RW_IRAM1 0x20000000 0x00020000 { .ANY (+RW +ZI) } } ``` 重点在于 `(RESET, +First)` 这一部分,它指定重置向量表应位于闪存起始地址处。如果此处缺失或被误配,也可能引发上述错误[^2]。 #### 方法三:验证工具链版本兼容性 有时,Keil MDK 版本过旧可能导致某些功能不可用或行为异常。建议升级至最新版 MDK-Arm Pack 和设备支持包,从而获得更好的稳定性和更全面的功能支持[^3]。 --- ### 示例代码调整后的 Scatter File 假设我们正在处理基于 Cortex-M 系列微控制器的应用场景,可以尝试以下修正过的散列表达式作为参考: ```plaintext LR_IROM1 0x08000000 0x000C0000 { /* Load Region */ ER_CODE 0x08000000 0x000BFFFF { /* Execution Region */ *.o (Vectors, +FIRST) /* Vector Table at beginning of flash */ *.o (.text) /* Code sections */ *.o (.rodata) /* Read-only data */ } RW_IRAM1 0x20000000 UNLIMITED { /* RAM Section */ *.o (.data) /* Initialized variables */ *.o (.bss) /* Zero-initialized variables */ } } ``` 注意这里特别强调了 Vectors 节点必须放置于最前端位置以便引导 CPU 正确执行初始指令序列。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值