ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

STM32H750VBT6 Keil5烧录失败排查:Flash算法与选项字节配置指南

STM32H750VBT6 Keil5烧录失败排查:Flash算法与选项字节配置指南 1. 问题定位为什么偏偏是STM32H750VBT6报错STM32H750VBT6这颗芯片在Keil5上烧录失败报出Flash Download Failed - Cortex-M7几乎是每个从F1、F4系列转过来的工程师都会踩的坑。我第一次用H750做项目时编译一路绿灯点下载直接弹窗报错当时第一反应是Keil装坏了重装了两遍才发现问题根本不在Keil本身。先把这颗芯片的特殊性说清楚。STM32H750VBT6属于H7系列里的“Value Line”版本主打高主频低成本480MHz的Cortex-M7内核128KB的Flash1MB的RAM。注意这个128KB Flash它是整个问题的核心诱因之一。H7系列大部分型号是1MB或2MB Flash而H750只有128KB这个容量差异直接导致Keil默认的Flash算法和实际芯片不匹配。报错信息里的Cortex-M7也不是随便写的。Keil在下载时会先识别目标内核类型然后调用对应的Flash算法去擦写。H750的Flash控制器和F4、F7都不一样它用的是H7系列特有的Flash接口扇区划分、编程时序、电压要求都有区别。如果你在Keil里选的还是F4或者通用Cortex-M的算法下载器握手阶段就会失败直接抛出这个错误。还有一个容易被忽略的点H750的Flash在出厂时可能处于写保护状态或者选项字节Option Bytes里的读写保护位被设置过。尤其是买到的芯片如果是拆机件或者之前被烧录过其他程序选项字节很可能不是默认值。这种情况下即使Flash算法选对了下载依然会失败而且报错信息可能还是同一个。从实际排查经验来看这个报错背后通常对应四类原因Flash算法文件缺失或选错、下载器配置参数不对、芯片选项字节异常、Keil工程的目标器件型号选错。下面我会按排查顺序一步步拆解每个环节的操作细节和判断依据。提示遇到这个报错先别急着重装Keil90%的情况是配置问题重装解决不了任何事反而浪费时间。2. 第一步确认Keil工程里的器件型号选对了没有很多人拿到别人的工程直接打开就编译下载根本没注意工程里选的器件型号是什么。STM32H750VBT6和STM32H743VIT6在Keil的器件列表里是分开的虽然封装可能一样但Flash容量和算法完全不同。如果你选的是H743Keil会按1MB Flash去操作而H750只有128KB地址空间对不上下载必然失败。具体操作打开Keil5点工具栏的Options for Target按钮或者按快捷键AltF7进入Device选项卡。在搜索框里输入STM32H750VB确认选中的是STM32H750VBTx。注意后缀Tx代表封装类型VBT6对应的是LQFP100封装选VBTx就对了。选好之后点OKKeil会自动加载对应的器件支持包。如果你之前没装H7系列的Pack这里会提示缺失。这时候需要去Keil官网下载Keil.STM32H7xx_DFP包或者通过Pack Installer在线安装。我建议直接下载离线包安装在线安装有时候网络不稳定会卡住。装完Pack之后回到Device选项卡确认右侧的Flash信息显示的是128KB。如果显示的是1MB或2MB说明器件型号还是选错了。这一步看似简单但我见过太多人在这里翻车尤其是用别人工程模板的时候模板里选的可能是H743直接拿来用就出问题。还有一个细节Keil5的器件列表里H750有多个变体比如STM32H750VBTx、STM32H750IBKx、STM32H750XBHx等。VBT6对应的就是STM32H750VBTx不要选成IBKxBGA封装或者XBHxTFBGA封装。封装不同引脚定义和Flash算法可能也有差异。注意如果你在Device列表里搜不到STM32H750说明H7系列的Pack没装。去Pack Installer里找Keil::STM32H7xx_DFP安装最新版本即可。3. 第二步Flash算法配置的正确打开方式器件型号选对之后接下来要检查Utilities选项卡里的Flash算法配置。点Options for Target切到Utilities选项卡点Settings按钮进入Flash Download设置界面。这里能看到当前使用的Flash算法列表。对于STM32H750VBT6正确的算法应该是STM32H7x_128KB.FLM或者类似的H7系列128KB版本。如果你看到的是STM32F4xx_1024KB.FLM或者STM32H7x_2048KB.FLM那就是错的必须删掉重新添加。添加算法的操作在Flash Download界面点Add按钮在弹出的算法列表里找到STM32H7x_128KB相关的条目选中后点Add。如果列表里没有这个算法说明H7的Pack没装完整或者Pack版本太旧。我遇到过Keil5.30版本自带的H7 Pack里没有128KB算法的情况需要手动更新Pack到最新版。算法添加后检查RAM for Algorithm的起始地址和大小。H750的Flash算法需要占用一段RAM来运行通常起始地址是0x20000000大小0x10004KB就够了。如果这里设置得太小算法加载不进去下载也会失败。我一般设成0x20000000起始大小0x20008KB留足余量。还有一个关键点Programming Algorithm列表里如果有多个算法要确保只有H7 128KB这一个其他无关的算法全部删掉。Keil会按列表顺序尝试如果第一个算法不匹配可能直接报错而不去尝试后面的。我见过有人列表里同时有F4和H7的算法结果Keil用了F4的算法去操作H7直接失败。配置完成后点OK保存然后重新编译工程再点下载。如果这一步配置对了大部分情况下报错就会消失。如果还是报错继续往下排查。提示Flash算法文件.FLM存放在Keil安装目录的ARM\Flash文件夹下你可以手动去这个目录确认有没有STM32H7x_128KB.FLM文件。4. 第三步下载器配置与复位模式的选择Flash算法配好之后下载器Debugger的配置也很关键。在Options for Target的Debug选项卡里选择你实际使用的下载器比如ST-Link Debugger或者J-LINK/J-TRACE Cortex。选好后点旁边的Settings按钮进入下载器设置界面。在Debug标签页里Port一般选SWSWD模式Max Clock根据你的下载器质量来设。ST-Link V2正版可以设到4MHz甚至更高但如果是几十块钱的仿版建议降到1MHz或500KHz否则握手不稳定会导致下载失败。我实测过仿版ST-Link在4MHz下下载H750十次有三次失败降到1MHz后基本稳定。切到Flash Download标签页这里有几个选项需要特别注意Reset and Run勾上这个下载完自动复位运行省得手动按复位键。Erase Sectors勾上下载前擦除对应扇区。Program勾上执行编程。Verify勾上编程后校验确保数据写进去了。下面还有一个Reset下拉菜单选项有Autodetect、HW RESET、SYSRESETREQ、VECTRESET等。对于H750我建议选HW RESET或者SYSRESETREQ。Autodetect有时候会抽风识别不到正确的复位方式。VECTRESET只复位内核不复位外设某些情况下会导致Flash控制器状态异常下载失败。如果你用的是ST-Link还要注意Connect选项。在Debug标签页的Connect下拉里选under Reset或者pre-reset。H750在运行状态下SWD引脚可能被复用或者被看门狗干扰导致下载器连不上。选under Reset可以让下载器在芯片复位期间建立连接成功率更高。我自己的习惯是ST-Link SWD 1MHz under Reset HW RESET这套组合在H750上从来没出过问题。你可以直接抄这个配置。注意如果你用的是J-Link在Settings里要选正确的InterfaceSWD和Speed建议1000kHzJ-Link的复位方式选Normal即可。5. 第四步选项字节与读写保护的排查前面三步都确认无误后如果还是报Flash Download Failed那就要怀疑芯片的选项字节Option Bytes了。H750的选项字节里有两个关键位RDPRead Protection和WRPWrite Protection。如果RDP被设成了Level 1或Level 2或者WRP保护了某些扇区下载操作就会被硬件拒绝。排查方法用STM32CubeProgrammer连接芯片读取选项字节。如果RDP显示Level 1说明芯片被读保护了需要先解除保护。解除RDP Level 1会触发全片擦除芯片里的程序会全部丢失所以操作前确认没有需要保留的数据。RDP Level 2是不可逆的一旦设成Level 2芯片就彻底锁死只能换芯片。买到拆机H750的时候尤其要注意这一点。WRP的排查类似在CubeProgrammer里看WRP0、WRP1等寄存器的值。如果某些扇区被写保护了下载时写到这些扇区就会失败。解除WRP的方法是在CubeProgrammer里取消对应的保护位然后应用设置。还有一种情况芯片之前被烧录过其他程序那个程序在运行时会禁用SWD引脚或者进入低功耗模式导致下载器连不上。这时候需要用under Reset模式连接或者在芯片复位后的极短时间内建立连接。ST-Link的Connect under Reset就是干这个的。如果CubeProgrammer也连不上芯片那可能是硬件问题SWDIO和SWCLK接反了、复位引脚没接、供电不足、晶振没起振等。先用万用表量一下VDD电压是不是3.3VSWDIO和SWCLK对地有没有短路。硬件没问题再回来搞软件。我遇到过一次客户板子上的H750死活下载不了最后发现是BOOT0引脚被拉高了芯片从系统存储器启动而不是从Flash启动。把BOOT0接地后一切正常。所以硬件排查也不能忽略。提示STM32CubeProgrammer是ST官方的免费工具比Keil自带的下载功能更底层能直接操作选项字节和Flash寄存器排查硬件问题时非常有用。6. 第五步Keil版本与Pack兼容性的坑如果以上四步都排查过了还是不行那就要考虑Keil版本和Pack兼容性的问题了。Keil MDK从5.30版本开始对H7系列的支持才比较完善如果你用的是5.20或更早的版本H7的Pack可能装不上或者装上了也有bug。我建议用Keil MDK 5.36或更高版本。这个版本对H7系列的支持很稳定Flash算法也齐全。如果你还在用5.14或者5.20升级一下能省很多事。升级Keil不会影响已有的工程装完之后重新安装H7的Pack即可。Pack版本也很关键。Keil.STM32H7xx_DFP的版本号建议在2.7.0以上。旧版本的Pack里H750的Flash算法可能有bug比如擦除不干净、编程校验失败等。更新Pack的方法打开Pack Installer找到Keil::STM32H7xx_DFP点Update按钮。如果在线更新失败去Keil官网下载最新的Pack离线包手动安装。还有一个隐藏的坑Keil5同时装了C51和MDK的时候有时候会出现工具链冲突导致下载功能异常。表现是编译正常但下载时提示Target DLL has been cancelled。这个问题的根源是C51和MDK共用了一些DLL文件版本不匹配。解决办法是卸载C51或者把C51和MDK装在不同的目录下避免DLL冲突。如果你确实需要同时用C51和MDK可以试试这个方案先装MDK再装C51安装C51时选择不覆盖MDK的DLL。或者用绿色版的C51解压到独立目录手动配置环境变量。不过最省事的办法还是找一台专门的电脑跑MDK另一台跑C51省得折腾。最后还有一个常见问题Keil的license过期或者没激活。未激活的Keil在编译和下载时会有各种限制有时候就表现为下载失败。检查File-License Management确认license状态是Valid。如果是Expired用注册机重新生成一个即可。注意注册机要跟Keil版本匹配5.36的注册机不能用在5.38上。注意Keil的Pack和器件支持包是分开的装了H7的Pack不代表Flash算法就自动配好了还是要在Utilities里手动添加对应的算法。7. 常见问题速查表与排查流程把上面五步的内容整理成一张速查表遇到报错的时候按顺序排查基本能覆盖95%的情况。排查步骤检查项正确配置常见错误1Device型号STM32H750VBTx选成H743或F4系列2Flash算法STM32H7x_128KB.FLM用了F4或H7 2048KB算法3下载器配置SWD 1MHz under Reset时钟太高或复位模式不对4选项字节RDP Level 0, WRP全关RDP Level 1或WRP开启5Keil版本MDK 5.36Pack 2.7.0版本过旧或Pack缺失排查流程建议按这个顺序走先确认Device型号再看Flash算法然后查下载器配置接着用CubeProgrammer读选项字节最后考虑升级Keil和Pack。每一步确认无误后再进入下一步不要跳步。另外补充几个实操中遇到的特殊情况报错信息是Could not load file xxx.axf说明编译输出文件没生成先解决编译错误跟下载配置无关。报错信息是Target DLL has been cancelled通常是C51和MDK冲突或者下载器驱动没装好。下载成功但程序不运行检查BOOT0引脚是不是被拉高了或者复位电路有问题。下载时提示Cannot access memory芯片可能进入了低功耗模式用under Reset连接。我自己的经验是H750的下载问题90%出在Flash算法和选项字节这两块。把这两块搞明白剩下的都是小问题。如果你按上面的步骤走了一遍还是不行把Keil的报错截图和CubeProgrammer的连接日志发出来基本一眼就能定位问题。提示每次修改Options for Target之后记得重新编译一次再下载。Keil有时候会缓存旧的配置不重新编译的话下载用的还是旧参数。8. 实操心得几个让我少走弯路的习惯做H750项目这几年我养成了几个习惯分享出来供参考。第一个习惯新建工程的时候直接用STM32CubeMX生成Keil工程框架不要手动从零建。CubeMX生成的工程里器件型号、Flash算法、下载器配置都是自动配好的省得自己一个个填。生成之后在Keil里打开直接编译下载基本不会出问题。如果你用的是寄存器开发或者标准库CubeMX也能生成对应的启动文件和链接脚本拿来用就行。第二个习惯手边常备一个STM32CubeProgrammer遇到下载问题先用它连一下芯片。CubeProgrammer能连上说明硬件和下载器没问题问题在Keil配置连不上说明硬件或选项字节有问题。这个判断能帮你快速缩小排查范围。第三个习惯买H750芯片的时候尽量从正规渠道买全新原装。拆机件和翻新件的选项字节经常是乱的有的甚至被设了RDP Level 2买回来直接报废。我吃过一次亏一批芯片里有三成是锁死的退换货折腾了半个月。第四个习惯工程目录不要放在中文路径下。Keil对中文路径的支持一直有问题有时候编译能过下载就失败报错信息还莫名其妙。把工程放在纯英文路径下比如D:\Projects\H750_Demo能避免很多玄学问题。第五个习惯定期更新Keil和Pack。ST的H7系列还在不断出新型号旧版本的Pack可能不支持新芯片。保持Keil和Pack在较新的版本能省去很多兼容性排查的时间。但也不要追最新版新版本刚出来可能有bug等一两个月稳定了再升。最后说一个真实案例。之前有个朋友用H750做产品批量生产时发现有一批板子下载不了报的也是Flash Download Failed。他以为是Keil配置问题折腾了两天没搞定。后来用CubeProgrammer一读发现这批芯片的选项字节里WRP被开启了保护了前几个扇区。联系供应商才知道这批芯片是工厂测试后忘记解除写保护的。解除WRP后一切正常。所以批量出问题的时候优先怀疑芯片本身的选项字节而不是软件配置。这个问题的排查思路其实可以迁移到其他STM32型号上。F4、F7、G4、U5系列的下载失败排查逻辑大同小异都是器件型号、Flash算法、下载器配置、选项字节、工具版本这五个维度。把这五个维度摸透了以后遇到任何STM32的下载问题都能快速定位。
返回列表