ST意法半导体
直播中

河神大人

9年用户 1583经验值
擅长:电源/新能源
私信 关注
[问答]

请问X—CUBE—AI和touchgfx没法同时使用吗?

启用了touchgfx,X—CUBE-AI的device application就无法选择了?这俩工具没法同时使用吗?小白求问佬们

回帖(1)

李秀兰

2025-6-16 17:44:00

别担心,这个问题是STM32CubeMX配置中比较常见的一个现象,主要是资源冲突导致的限制,但X-CUBE-AI和TouchGFX绝对可以同时使用在同一块STM32上!


你遇到的 device application 选项消失(或变灰不可选)是CubeMX在配置资源时的一种保护机制,它检测到当前配置的资源(主要是内存时钟周期/线程)可能无法同时满足两个框架的最低要求,而不是根本的技术不兼容


根本原因:




  1. 内存资源极其紧张:



    • TouchGFX: 需要大量的RAM来存储帧缓冲区(通常至少需要2倍的屏幕分辨率大小,比如480x272 RGB565需要约250KB)、界面资源(图片、字体)、渲染临时缓冲区等。帧缓冲通常需要放在连续的、高性能内存区域。

    • X-CUBE-AI: 需要连续的RAM来存储AI模型本身输入/输出张量的缓冲区。模型大小从几十KB到几MB不等,输入输出张量也需要连续内存块。STM32CubeAI运行时库本身也消耗RAM。

    • 总和需求: 两者对连续大块RAM的需求非常高。当CubeMX预估可分配的连续RAM不足以容纳CubeAI要求的缓冲区时,就会直接禁用X-CUBE-AI device application选项。




  2. CPU/DMA资源和实时性:



    • TouchGFX: 图形渲染(特别是动画、复杂界面)非常消耗CPU周期和DMA带宽(用于从Flash读取图形数据、填充帧缓冲)。

    • X-CUBE-AI: AI推理(尤其是不使用硬件加速时)也非常消耗CPU周期。

    • 两者都需要在主循环或独立的线程中运行。在单核MCU上,需要仔细调度以避免界面卡顿或AI推理延迟过高。




如何解决(让它们共存并工作):


你的目标是优化或调整配置,释放足够的资源(尤其是连续RAM),使CubeMX认为满足条件,从而允许你启用并配置X-CUBE-AI。




  1. 仔细规划内存布局(最关键!)



    • 评估确切需求:

      • TouchGFX: 精确计算你的项目所需的最小帧缓冲大小。使用RGB565(16bpp)通常比RGB888(24bpp)节省大量内存。在CubeMX的TouchGFX配置中明确设置所需的帧缓冲大小和格式。

      • X-CUBE-AI: 在STM32Cube.AI Desktop App中优化你的模型(量化为8位或更低位宽),这能显著减小模型大小和运行时内存需求。确定模型确切的输入/输出张量内存需求。选择占用内存更少的模型(如果可能)。


    • 调整Linker Script (ld文件):

      • 手动编辑Linker Script (STM32XXXXXX_FLASH.ld文件),精确分配内存区域。确保为:

        • 帧缓冲 (FB) 指定连续的、满足性能要求的RAM区域(通常是DTCMRAM或AXI SRAM)。

        • AI模型参数与激活缓冲 (AI_RT_Buffer) 指定另一块连续的RAM区域。模型本身通常放在Flash。


      • MEMORY_BEGINMEMORY_SIZE等定义明确指向你规划好的区域,避免与其他静态分配冲突。

      • 目标: 清晰地划出两大块连续内存,一块给TouchGFX的FB,另一块给CubeAI的Buffer。让CubeMX通过这个手动规划知道资源是满足的。





  2. 优化CubeMX中的TouchGFX配置:



    • 帧缓冲格式: 强制使用16bpp (RGB565)。这是减少帧缓冲内存开销的最大单一因素。

    • 单帧缓冲: 如果可以接受潜在的撕裂效应(在渲染完成前显示,不常用),或者你的界面渲染非常快,可以考虑仅使用一个帧缓冲Single Buffer模式)。

    • 局部缓冲: 在TouchGFX配置中启用局部渲染缓冲(Partial Framebuffer或Double Framebuffer in SDRAM等)。这通常适用于刷新特定区域的界面,而非整个屏幕,能减小所需缓冲区大小。

    • 减少使用的特性: 除非绝对必要,避免在TouchGFX Designer中使用非常复杂的动画或需要大量位图的视图。




  3. 优化CubeAI配置(模型和运行时):



    • 量化模型: 这绝对是关键!使用8位或混合精度的模型能大幅减小内存需求和提高推理速度。在CubeAI Desktop App中生成代码时务必选择量化选项。

    • 优化运行时内存: 在CubeMX的X-CUBE-AI配置中,检查“Runtime Memory Allocation Strategy”。如果是Default,可能意味着动态分配失败。如果手动修改过ld文件,选择User Specified并确保AI_RT_Buffer地址和大小正确指向你划出的那块内存。

    • 减小模型: 重新审视模型架构。是否有不必要的层?能否减少输入/输出尺寸?精度要求是否可降低?

    • 利用硬件加速器(如果可用): 如果MCU有硬件加速器(如STM32的NanoEdgeAI, STM32H7的Chrom-ART/JPEG硬件加速器配合TouchGFX使用,或某些系列的Cortex-M内核有Helium技术(MVE)),务必在CubeMX中启用它们。这能显著减轻CPU负担,使其有更多能力同时处理图形和AI。




  4. 调整系统架构:



    • 选择更强大的STM32: 如果当前MCU资源实在捉襟见肘,升级到具有更大RAM(尤其是DTCM/AXI SRAM/SDRAM接口)和更强大内核(更高主频、带硬件FPU/DSP指令、M7内核甚至双核如H7双核系列)的型号(如STM32H7x7/H7x5, STM32H5xx, STM32U5xx系列)往往是最高效的方案。这些MCU为同时运行GUI和AI应用而生。

    • 使用RTOS(推荐):

      • 在CubeMX中启用FreeRTOS。

      • TouchGFX渲染任务touchgfx_Task)和 AI推理任务创建不同优先级和栈大小的独立任务。

      • 通常给TouchGFX任务更高的优先级以保证UI流畅,AI任务优先级稍低。使用信号量/队列在它们之间传递数据和同步(如AI推理结果传递给UI更新)。

      • 合理配置任务的堆栈大小。


    • 优化主循环调度:

      • 如果不使用RTOS,需要在main循环中手动调度:

        • 确保TouchGFX的HAL::taskEntry()得到高频率的调用(通常每帧一次或多次)。

        • 将AI推理放在一个较低频率的调用中(例如通过状态机或定时器中断触发)。

        • 注意不要在一个循环迭代中做太长的AI推理以免阻塞UI。






  5. 启用后可能需要的调试/优化:



    • 性能分析: 使用调试器或性能计数器检查CPU负载。观察UI是否卡顿或AI推理是否超时。

    • 内存监视器: 使用STM32CubeMonitor(或其他工具)监控RAM使用情况,确保没有堆栈溢出或内存泄漏。

    • Cache配置: 在CubeMX的System Core > CORTEX_M7下正确配置指令缓存(I-Cache)和数据缓存(D-Cache)对提升两者性能都至关重要,尤其在连接SDRAM或QSPI Flash时。

    • DMA优化: 尽可能使用DMA传输图形数据(如从QSPI Flash读取图片资源到RAM)以及进行AI模型输入/输出数据的传输(如果结构允许),释放CPU资源。




总结流程:



  1. 评估需求: 精确量化TouchGFX帧缓冲需求和AI模型内存需求。

  2. 硬件选型: 确保MCU有足够的总RAM和连续RAM资源。考虑升级MCU。

  3. CubeMX配置调整:

    • 优化TouchGFX: 16bpp, 单缓冲或局部缓冲。

    • 优化AI: 量化模型,选择运行时内存分配策略。

    • 手动修改Linker Script,确保FB和AI Buffer都有明确的、不重叠的连续内存块分配。

    • 启用必要的外设和加速器(LTDC控制器,SDRAM控制器,JPEG,DMA2D,硬件AI加速器)。

    • 启用并配置RTOS (FreeRTOS)。


  4. 生成代码并集成: 分别生成TouchGFX和CubeAI代码,确保它们在项目中正确链接和初始化。

  5. 任务调度: 实现TouchGFX任务和AI任务及其同步。

  6. 性能测试与优化: 使用工具分析性能瓶颈,调整优先级、时序、内存布局。


只要你根据MCU的实际能力仔细规划内存和CPU资源,通过优化配置(特别是内存管理和RTOS调度),并在强大的STM32系列上实现,X-CUBE-AI和TouchGFX完全可以高效协作。遇到具体问题时可以查看两个框架的官方应用笔记(AN5028/AN5331等),通常能找到针对性的配置建议。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分