🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。
  
📌 特别说明:
文中问题案例来源于真实生产环境与公开技术社区,并结合多位一线资深工程师与架构师的长期实践经验,经过人工筛选与AI系统化智能整理后输出。文中的解决方案并非唯一“标准答案”,而是兼顾可行性、可复现性与思路启发性的实践参考,供你在实际项目中灵活运用与演进。
  
欢迎你 关注、收藏并订阅本专栏,与持续更新的技术干货同行,一起让问题变资产,让经验可复制,技术跃迁,稳步向上。

📢 问题描述

详细问题描述如下:stm32CubeAI无法部署:部署到cubeai里并设置完引脚后generate code就会出现图1这样的报错,如果停止生成,返回则会像图2这样。如果继续生成然后点小锤子则会出现图三这样的error:ai platform.h: No such file or directory。如图四,ai_platform.h确实在这些文件夹中。

如下是相关报错截图:

📣 请知悉:如下方案不保证一定适配你的问题!

  如下是针对上述问题进行专业角度剖析答疑,不喜勿喷,仅供参考:

✅️问题理解

你这套现象其实是两件事叠在一起了(截图 1/2/3/4 刚好串成一条链):

  1. CubeMX 生成代码时弹警告(图1)
    提示 X-CUBE-AI 10.1.0Main Config 里还有参数没配好/不对——而你图2右下角也显示 analysis status: error
    ➡️ 这意味着:Cube.AI 的“Analyze/生成网络代码+runtime 配套”并没有成功完成,继续生成有概率生成出“半成品工程”。

  2. 编译时报错(图3)
    fatal error: ai_platform.h: No such file or directory
    而你图4里看到的 ai_platform.h,很可能是 IDE 的“包含关系树/索引显示”(它会把 include 到的头文件挂在下面),不等于编译器真的把该目录加入了 include path
    ➡️ 本质就是:编译器当前的 -I include 搜索路径里,没有包含 ai_platform.h 所在的目录(或者生成不完整,runtime 的 include 目录没正确加入工程)。

所以要解决:

  • 先把 X-CUBE-AI 的 Analyze 变成 OK(否则工程生成不完整)
  • 再把 ai_platform.h 所在目录加入编译 include path(否则永远找不到)

✅️问题解决方案

🟢方案 A:把 Cube.AI “Analyze error” 修到 OK,再重新 Generate(最推荐、最根治)

你图2已经显示 analysis status: error,这一步不修,后面很容易一直各种缺文件/缺路径。

A1)强制按正确顺序来一次:

  1. CubeMX → X-CUBE-AI → 选你的网络(network tab)

  2. 确认 Model 指向 quantized_model.tflite(路径尽量短、纯英文、别放桌面/中文目录)

    • 推荐放:C:\stm32\models\quantized_model.tflite
  3. Analyze

  4. 观察底部状态必须变成 OK(不再是 error)

  5. Generate Code

A2)如果 Analyze 还是 error(高频原因)

  • 路径/权限/长度问题(Windows 高发):把工程路径移到短路径,比如:
    C:\stm32\proj\your_proj\
  • X-CUBE-AI 包/版本不匹配或安装不完整:在 CubeMX 里确认 X-CUBE-AI 10.1.0 已正确安装(必要时卸载重装/升级到同一套版本)
  • 模型不被支持/模型结构异常:换一个官方 demo tflite 先试(验证链路),再回头查自己的 tflite

小技巧:CubeMX 里一般能看到 Analyze 的日志输出(或者在工程生成目录里有 log)。日志里如果出现 “cannot run stm32ai / python / permission / path” 之类,基本就是上面这些原因。

🔵方案 B:编译器 include path 没配到 Cube.AI runtime(直接导致 ai_platform.h 找不到)

你图3报错行是:../X-CUBE-AI/App/network.h:22:10 #include "ai_platform.h"
这说明 ai_platform.h 其实属于 STM32Cube.AI runtime 的头文件,通常在类似目录(不同版本略有差异):

  • Middlewares/ST/AI/Inc
  • Middlewares/ST/AI/AI/include
  • 或 Cube.AI pack 下的 Drivers/BSP/Components/…(少见)

你需要做的是:把“包含 ai_platform.h 的那个目录”加进工程的 include 路径。

B1)先确认 ai_platform.h 的真实物理路径(非常关键)
请在 IDE 里对 ai_platform.h 右键 → Open Containing Folder / 在资源管理器中显示,记下它真实在哪个目录。

很多同学以为它在 X-CUBE-AI\App 里,其实常常是在 Middlewares/ST/AI/...

B2)把该目录加到 include path(按你的 IDE 选一种):

  • STM32CubeIDE(最常见)
    Project Properties → C/C++ Build → Settings → MCU GCC Compiler → Includes
    把包含 ai_platform.h 的目录加进去(例如):

    • ${workspace_loc:/${ProjName}/Middlewares/ST/AI/Inc}
    • ${workspace_loc:/${ProjName}/Middlewares/ST/AI/AI/include}
  • Keil MDK
    Options for Target → C/C++ → Include Paths
    加入同样的目录。

  • IAR
    Project → Options → C/C++ Compiler → Preprocessor → Additional include directories

B3)验证(一定要做)
重新编译时打开 verbose(或看编译命令行),确认出现了 -I...AI...include 之类路径。
然后再编译,ai_platform.h 就不会再 missing 了

🟡方案 C:你在 CubeMX 里生成了代码,但 IDE 工程没同步更新(路径没刷新)

这个也很常见:CubeMX 生成了文件,但你的 IDE 工程(.cproject/.uvprojx)没有更新 include 路径

✅ 处理办法:

  • CubeIDE 用户:建议直接在 CubeIDE 内打开 .ioc,用 CubeIDE 的“Generate Code”按钮生成(它更容易把 include/middleware 配置同步到工程)
  • 或者删除 IDE 工程配置缓存后重新导入工程(CubeIDE:Import existing project)
🔴方案 D:临时硬改 include(能跑但不推荐,后续 regenerate 会被覆盖)

如果你急着先编过:
network.h 里的
#include "ai_platform.h"
改成带路径的(以你的真实路径为准),例如:
#include "Middlewares/ST/AI/Inc/ai_platform.h"

⚠️ 缺点:下一次 CubeMX 重新生成代码可能覆盖掉你的改动。

✅️问题延伸

为什么图4“看得到 ai_platform.h”,编译却说找不到?

因为 IDE 里显示的树状结构很多时候是:

  • 索引器/代码解析器基于“你当前打开文件的 include 关系”推导出来的
  • 但真正编译时,走的是编译器的 include 搜索路径(-I 列表)
    两者不是一回事,所以会出现“IDE 里能点开,编译器却找不到”的经典错觉

✅️问题预测

你把 ai_platform.h 解决后,后面还可能遇到这些 Cube.AI 常见坑(提前避雷):

  1. 链接阶段缺 ai runtime 库:会出现 undefined reference to ai_network_create

    • 解决:确认 Cube.AI runtime 源码/库文件被加入工程(Generate 时要成功)
  2. RAM/Flash 估算超限:模型太大或激活缓冲太大

    • 解决:量化、换优化策略(RAM/FLASH)、减小输入尺寸
  3. 模型不支持的 OP:Analyze 会直接失败

    • 解决:换成 STM32 支持的算子集合/做模型替换

✅️小结

你的问题核心就是两点:

  • 🟢 先把 X-CUBE-AI 的 Analyze 从 error 变成 OK(否则生成不完整)
  • 🟢 把 ai_platform.h 所在目录加入编译 include path(否则必然找不到)
    按这个顺序做,基本一次就能通

🌹 结语 & 互动说明

希望以上分析与解决思路,能为你当前的问题提供一些有效线索或直接可用的操作路径

若你按文中步骤执行后仍未解决:

  • 不必焦虑或抱怨,这很常见——复杂问题往往由多重因素叠加引起;
  • 欢迎你将最新报错信息、关键代码片段、环境说明等补充到评论区;
  • 我会在力所能及的范围内,结合大家的反馈一起帮你继续定位 👀

💡 如果你有更优或更通用的解法:

  • 非常欢迎在评论区分享你的实践经验或改进方案;
  • 你的这份补充,可能正好帮到更多正在被类似问题困扰的同学;
  • 正所谓「赠人玫瑰,手有余香」,也算是为技术社区持续注入正向循环

🧧 文末福利:技术成长加速包 🧧

  文中部分问题来自本人项目实践,部分来自读者反馈与公开社区案例,也有少量经由全网社区与智能问答平台整理而来。

  若你尝试后仍没完全解决问题,还请多一点理解、少一点苛责——技术问题本就复杂多变,没有任何人能给出对所有场景都 100% 套用的方案。

  如果你已经找到更适合自己项目现场的做法,非常建议你沉淀成文档或教程,这不仅是对他人的帮助,更是对自己认知的再升级。

  如果你还在持续查 Bug、找方案,可以顺便逛逛我专门整理的 Bug 专栏:《全栈 Bug 调优(实战版)》
这里收录的都是在真实场景中踩过的坑,希望能帮你少走弯路,节省更多宝贵时间。

✍️ 如果这篇文章对你有一点点帮助:

  • 欢迎给 bug菌 来个一键三连:关注 + 点赞 + 收藏
  • 你的支持,是我持续输出高质量实战内容的最大动力。

同时也欢迎关注我的硬核公众号 「猿圈奇妙屋」

获取第一时间更新的技术干货、BAT 等互联网公司最新面试真题、4000G+ 技术 PDF 电子书、简历 / PPT 模板、技术文章 Markdown 模板等资料,统统免费领取
你能想到的绝大部分学习资料,我都尽量帮你准备齐全,剩下的只需要你愿意迈出那一步来拿。

🫵 Who am I?

我是 bug菌:

  • 热活跃于 CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等技术社区;
  • CSDN 博客之星 Top30、华为云多年度十佳博主/卓越贡献者、掘金多年度人气作者 Top40;
  • 掘金、InfoQ、51CTO 等平台签约及优质作者;
  • 全网粉丝累计 30w+

更多高质量技术内容及成长资料,可查看这个合集入口 👉 点击查看 👈️
硬核技术公众号 「猿圈奇妙屋」 期待你的加入,一起进阶、一起打怪升级。

- End -

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐