Keil 报错 L6236E:No section matches selector - no section to be FIRST/LAST 解决(以STM32F429为例)
报错核心原因:链接脚本
.sct指定了FIRST优先排布的段(一般是中断向量表段),链接器在所有目标文件中找不到对应的段,绝大多数场景是缺少启动文件导致。
常见原因
最常见原因:启动文件没加进工程检查startup_stm32f429xx.s是否在工程的 Source Group 里:
- 在 Keil 左侧工程树中看 Drivers/CMSIS/... 或 Application/MDK-ARM 分组下有没有 startup_stm32F429xx.s
- 如果没有:右键分组 → Add Existing Files → 找到对应文件添加进工程
重要提醒:文件存在磁盘文件夹 ≠ 已经加入 Keil 工程,CubeMX 经常生成了文件,但没有写入工程 uvprojx 索引。
四种获取、添加启动文件的方法
方法一:CubeMX 工程文件夹里其实有(优先查找)
CubeMX 生成工程时会把启动文件放在这个路径:
你的工程文件夹\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm\startup_stm32f429xx.s先打开工程所在文件夹,按文件名搜索startup_stm32f429xx。如果存在,直接Add Existing Files加进 Keil 工程就行。
方法二:从 STM32CubeF4 固件包复制
如果你电脑上装了 STM32CubeF4(CubeMX 下载固件时会存到本地,例如C:\Users\xxx\STM32Cube\Repository\STM32Cube_FW_F4),去这个路径拿文件:
\STM32Cube_FW_F4\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm\startup_stm32f429xx.s复制到你工程文件夹(建议放到 MDK-ARM 目录下),再添加进 Keil。
方法三:CubeMX 重新生成代码(根治方案)
如果工程里连 Drivers\CMSIS 文件夹都不完整,说明当初生成工程时出现异常。回到 CubeMX:
- Project Manager → Project 里确认 Toolchain 选的是 MDK-ARM V5
- Code Generator 标签页按需配置,关键是重新点击GENERATE CODE正常情况下,重新生成后的工程启动文件会自动就位。
方法四:从例程拷贝(兜底方案)
这个启动文件对于同型号芯片内容固定,找任意一份 F429 的 Keil 例程(正点原子、野火、开源 GitHub 工程等),把里面的startup_stm32f429xx.s拷贝过来使用。
添加启动文件后必做校验步骤
- 添加完成后,右键
startup_stm32f429xx.s→Options for File,勾选Include in Target Build;只加到工程树、不勾选编译,依然会报同样错误。 - 芯片型号严格匹配,必须使用
startup_stm32f429xx.s,不能混用 F407、F446 等其他型号启动文件。