STM32Cube

摘 要

意法半导体推出新软件包STM32CubeMP13来帮助工程师把STM32微控制器应用代码移植到性能更强大的STM32MP1微处理器上,将嵌入式系统设计性能提高到一个新的水平。

随着终端用户不断要求日常生活和工作中使用的设备具有更多的功能和更快的响应速度,设备厂商需要使用更有效的解决方案来提高产品的性能,工业实时应用就是典型的例子。越来越多的加工设备、工厂自动化系统、物流零售技术、物联网设备和数字标牌要求主控制器具有更高的性能,而微控制器(MCU)无法满足这样的性能要求。

意法半导体的STM32MP13系列微处理器(MPU)可应对这些应用场景需求,产品整合性能更强大的ARM®Cortex®-A7架构及更高的处理能力和存储容量,可灵活满足开发者的性能算力要求。

继承已有的基于MCU的代码、实现快速移植、缩短开发周期,是开发者在进行MPU选型时的重点关注之一。STM32推出新的软件包STM32CubeMP13之后,开发者可快速移植原本为基于MCU的代码,并为终端应用的下一代产品解锁基于MPU的更高性能和更多算力。

STM32CubeMP13软件包让开发者能够在STM32MP13 MPU系列芯片上运行嵌入式裸机应用软件或RTOS实时操作系统,为用户提供了一种替代OpenSTLinux的方案,与典型的MCU相比,它确保了更快的执行时间。用户可以确保移植过来的代码继续满足原软件的严格的实时要求,例如,中断时间和输入输出延迟。此外,RTOS可以利用MPU的更大存储空间,同时保留低功耗的优势。

STM32CubeMP13软件包完全集成在STM32Cube生态系统中,让已经在使用STM32嵌入式微控制器MCU的设计人员,在熟悉的、相同的开发环境中,把原来基于MCU微控制器的项目升级到基于性能更高的MPU微处理器上来。该软件包含有STM32CubeMX设备配置器、STM32CubeIDE开发环境和 STM32CubeProgrammer烧录工具。

STM32CubeMP13软件包配备了在STM32MP13 ARM Cortex-A7 MPU上运行嵌入式代码所需的全部组件,包括板级支持包(BSP)和硬件抽象层(HAL)。并且预集成了Eclipse ThreadX实时操作系统。此外,该软件包还提供代码示例,帮助嵌入式开发者解决MPU系统的更多复杂问题,包括从外部存储引导、电源管理、DDR-RAM的自刷新控制。

STM32MP13系列芯片的入门级应用包括工业制造、智慧城市、智能家居、智慧零售、电力及新能源基础设施、医疗等市场,开发者可以继续使用已有的OpenSTLinux发行版生态系统开发这些应用,也可以使用新推出的STM32CubeMP13的软件包来开发相应的裸机或者RTOS应用。

来源:STM32

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 23

STM32今年推出的新产品STM32H5除了兼具性能、功耗与集成度的优势外还进一步提升了产品的安全特性,在信息安全保护方面带来了很多新的特性以及创新的解决方案,例如:

  • 安全启动BootROM ST-iROT

  • 安全调试Debug Authentication

  • 基于新的Product State机制的生命周期管理

  • HDP/HDPL Flash隐藏保护区及其多级保护级别

  • Secure Storage专用安全存储OptionByteKey(obk)区

  • 安全管理器Secure Manager以二进制形式提供的安全解决方案

需要了解更详细的STM32H5信息安全特性,欢迎浏览STM32MCU wiki页面:Security with STM32H5‎, Getting started with STM32H5 security‎。

STM32H5无疑给工业物联网产品设计带来了新的优秀选择。在提供更先进的硬件和解决方案的同时,STM32Cube工具作为STM32生态系统的重要组成部分,当然也考虑到如何让开发者能够更便捷地使用这一系列的新安全功能的问题。为此STM32CubeProgrammer及其内嵌的STM32TrustedPackageCreator,STM32CubeMX等工具都进行了升级,全面支持STM32H5的新安全特性。下面就带大家做简要了解。

STM32CubeProgrammer & STM32TrustedPackageCreator

STM32CubeProgrammer是一个集成了多项功能的STM32编程工具,提供Flash以及Memory读写,OptionByte选项字节读取与配置,内核和外设寄存器读写等多种功能。STM32TrustPackageCreator是内嵌在STM32CubeProgrammer的另一个工具,主要包含针对STM32产品信息安全的多种功能。这两个工具都提供了GUI界面,也支持CLI命令行方式,方便开发者使用。STM32CubeProgrammer v2.14.0增加了OBK文件provisioning,Debug Authentication等新功能,来配合STM32H5的新安全特性的使用。其内嵌的STM32TrustedPackageCreator v2.14.0同样也增加了H5的系列配置页面,提供了针对STM32H5安全新特性的一系列功能,例如

  • Obkey的配置选项卡:可以用于生成多种obk文件,对应不同的安全功能的配置,STM32CubeFW_H5的软件包中会带有对应功能配置的xml文件模板,模板文件可以在Projects目录下开发板的ROT_Provisioning目录中的相关子目录下找到,用户可以在模板xml文件的基础上轻松完成相关配置。

  • Image Gen配置选项卡页面:可以基于xml模板完成对代码或者数据二进制文件的签名打包,生成对应ST-iROT或者OEMiROT的支持安全启动的应用程序二进制文件,以及用于安全升级的应用程序升级包文件。

  • DA CertiGen配置选项卡页面:可以生成Debug Authentication安全调试所需要的数字证书,包括根证书、中间证书、叶子证书等。

  • SFI和HSM相关的几个配置选项卡:提供针对SFI安全固件安装的相关配置功能,例如对OEM固件进行加密生成用于安全烧录的SFI文件,将OEM的加密密钥写入HSM,生成OptionByte配置文件等。

下面举几个例子:

STM32H5安全调试

启用安全调试功能涉及两个阶段,配置阶段和使用阶段。

配置阶段包含Debug Authentication obk文件生成,obk文件烧写和设置产品保护状态等几个步骤。其中STM32TrustedPackageCreator H5的Obkey页面可以生成Debug Authentication安全调试的根密钥及其公钥哈希,或者设置用于安全回退的密码,并生成最终的DA配置obk文件。

1.png

STM32CubeProgrammer工具新增加的OBKey Provisioning选项卡页面可以将DA obk文件烧写至STM32H5芯片上对应的obk区域。产品保护状态的设置则可以在OB Option Byte选项字节配置的页面完成。

2.png

安全调试功能使用阶段,如果在TrustZone开启的情况下需要重新打开调试连接,那么首先需要通过STM32TrustedPackageCreator生成用于DA所需的数字证书。

3.png

然后,再通过STM32CubeProgrammer发起DA请求,开启安全调试模式,或者进行产品状态回退。

4.png

当DA请求被STM32H5芯片的DA library验证通过,则会执行相关DA请求的操作。如果请求的操作是重新打开某种调试连接,则该调式功能将被暂时恢复,下电上电之前都可以进行调试;如果请求的操作是回退,则Product State会恢复到Open或者TZ-Closed状态。

如果希望了解如何一步一步配置和使用STM32H5的安全调试,可以参考wiki页面How to start with DA on STM32H5‎ ,获得更详细的说明信息。

STM32H5安全启动ST-iROT

启用ST-iROT安全启动功能也有几个主要步骤,首先是生成ST-iROT的配置,产生配置obk文件,包括用户代码签名、加密使用的密钥,代码的起始地址偏移量和大小等等,这个步骤可以由STM32TrustedPackageCreator工具完成。生成的obk 文件同样可以通过STM32CubeProgrammer的OBK Provisioning工具进行烧写,类似前面起到过的DA obk文件的烧写。

5.png

其次是应用程序固件的签名打包,最终烧写到用户Flash的是带有签名和相关头数据的可以通过ST-iROT进行校验并启动的文件。用户应用程序的签名打包,同样可以由STM32TrustedPackageCreator在Image Gen配置选项卡页面完成。

6.png

如果希望了解如何一步一步配置和使用STM32H5的ST-iROT功能,可以参考以下wiki页面获得更详细的说明信息:

STM32CubeMX

STM32CubeMX是一个用于对STM32MCU/MPU进行配置的工具,其中包含了管脚分配,IP初始化配置,时钟树配置,工程配置,代码生成以及应用场景功耗预估等,既可以从零开始配置芯片并一站式生成工程架构以及初始化代码,也可以基于现有的配置文件,在此基础上进行修改并更新工程代码。

STM32CubeMX对于带有V8-M TrustZone特性的STM32MCU已经有很好的之支持,当选择任何一个CM33内核带TrustZone功能的STM32MCU或者其对应的开发板时,STM32CubeMX会弹出对话框,询问是否要启用TrustZone,如果选择“with TrustZone activated”,则GUI界面中会出现与TrustZone相关的一系列配置选项。

7.png

在最新的STM32CubeMX v6.9.2版本中还增加了对STM32H5 BootPath启动路径配置的完整支持,包含多种启动路径的选择,例如

  • Application only

  • OEM-iROT + Secure Application

  • ST-iROT + Secure Application

  • ST-iROT + S/NS Application

  • STiROT + OEM-uROT + S/NS Application等等。

为了让开发者可以更方便从STM32CubeMX中生成用于配合STM32H5 Secure Manager的应用程序,这个版本中也包含了对SecureManager的支持。当使用Secure Manager时,工程师只需要生成一个TrustZone Non-Secure工程,用于开发自己的应用逻辑和功能,而安全启动,安全升级以及TrustZone安全侧的安全服务可以直接由Secure Manager的解决方案来提供支撑,无需另外开发,应用程序只需要调用PSA API就可以直接使用Secure Manager内嵌的安全存储、加解密、Attestation等功能。为达到这个目的,开发者只需要将Project设置为只包含Non-secure application的模式,并且从BootPath选项选择ST-iROT + ST-uROT + Secure Manager,就可以轻松配置。

8.png

9.png

完成BootPath选择之后,还可以在STM32CubeMX的”Pinout & Configuration”界面使能Secure Manager,并选择需要使用的Secure Service,这样STM32CubeMX就可以生成对应的Non-Secure App工程,这个工程中除了包含外设的始化代码以外,工程的linker会按照Secure Manager默认的存储空间布局进行更新,工程也会包含PSA API相关的头文件和Middleware部分的代码,应用工程可以调用Secure Manager提供的API,使用已经开发好的安全功能,同时工程的Build Action中也添加了postbuild脚本的执行,可以在App工程编译完成后自动产生签名加密打包的hex文件。

10.png

如果希望了解更多关于如何使用STM32CubeMX的BootPath配置以及使用Secure Manager请参考wiki链接How to start with STM32CubeMX and STM32H5 security‎ 及其相关页面。

另外如果读者希望了解更多有关Secure Manager解决方案的信息,欢迎访问Secure Manager产品页面:https://www.st.com/en/embedded-software/stm32trustee-sm.html 下载软件包,也 可以从wiki页面Secure Manager for STM32H5,How to start with Secure Manager on STM32H5‎ 等,获取更多详细的使用说明。

来源:STM32

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 109

导读

STM32助力开发者释放创造力,推出STM32开发者优先计划,软件下载量和硬件发货量均大幅提升,通过国内社交平台和ST中国大学计划获得电子行业从业人员对STM32的认可;在官网为MCU和MPU用户设立STM32 开发者社区;不断迭代STM32Cube软件工具,增加软件开发新功能,优化用户体验,帮助用户实现快速移植;即将推出的STM32MP2新品不仅拥有满足严苛要求的工业级品质,还拥有卓越的边缘计算能力,STM32Cube所有软件均可支持STM32MP2的开发。

本文为2023 STM32峰会STM32Cube篇重点内容。

STM32Cube全方位助力并加速产品开发

1.png

STM32Cube是一个全面的开发者框架,它提供了所有必要的模块来简化和加速嵌入式开发。STM32Cube结合了:

  • 硬件开发套件,提供原型设计参考板;

  • 嵌入式软件开发包,提供优化和稳定的驱动程序、中间件和示例;

  • 开发工具,简化了MCU的配置、应用开发和监控;

  • 提供广泛的开发资源,包括技术文档、应用说明和培训资料。

意法半导体及合作伙伴提供180多种STM32Cube扩展包极大拓展了框架范畴,包括:

  • 面向特定功能的STM32Cube扩展包,例如STM32Cube.AI、电机控制SDK或云连接包;

  • 包含实际应用参考方案的功能包,如人脸识别或MEMS传感。

  • 该框架与STM32产品矩阵一致,提供全球支持渠道


2.png

3.png

每年,数十万独立开发人员使用STM32Cube软件包。2022年与2021年相比,使用STM32Cube工具的活跃软件开发人员增长了20%以上;CubeAI工具包的下载量翻番,STM32CubeMX内部的人工智能项目数量也翻了一倍;2022年50万个硬件开发套件发货,开发人员借此快速创建原型产品并验证。

中英文技术文档的下载量也大幅提升,在社交媒体的视频课程也达到可观的观看量。ST中国大学计划,目前覆盖国内500多所高校,2000多名教师在实验室、课程和研究项目中使用STM32,全国有超过200万学生学习使用STM32。

近期推出的STM32开发者优先计划将为STM32开发者进一步的便利。

STM32开发者社区助力开发人员设计之旅的每一步

4.png

在st.com官网上线的STM32 MCU和MPU 开发者社区,开发者可以快速方便地访问STM32Cube,提供友好的开发环境帮助开发人员设计之旅的每一步,更直接、更便利地获取产品、软硬件工具、嵌入式软件、开发者资源。

5.png

STM32Cube新增功能

STM32 finder是一个非常方便的芯片选型、开发板选择及例程选择工具。

STM32CubeMX有一个独特的新功能,可根据用户所选择的芯片,提供对应的CAD模型,也就是芯片原理图和PCB图库。这使得STM32CubeMX也成为硬件工程师的得力助手。LPBAM配置工具,可帮助客户轻松使用在低功耗状态下批量传输数据的功能。

我们在为新产品引入了新的Cube软件包的同时,也在不断添加新的功能扩展包,完全独立又相互兼容的功能模块将真正地帮助客户自由地搭建自己的系统。

 STM32CubeProgrammer不仅是一个flash编程工具,它附带的STM32TrustedPackageCreator也是我们安全产品的重要部分,可以帮助客户对STM32进行多种信息安全配置。

STLink-V3Power这款工具,可以在调试代码的同时,实时测量系统功耗。在调试和电源监控方面,这是当之无愧的创新典范。

我们的设计思路是将STM32CUBEMX和STM32芯片功能深度集成,更方便,更彻底地释放芯片的性能。这些新的模块,外部存储器管理工具,STM32H5的启动方式选择工具等等都会秉承这个思想来实现。

我们也会根据客户的反馈不断优化工具操作步骤,还将继续提供更多的软件包和扩展包,以及更多的文档资源来丰富我们的生态系统。

STM32MP2 新品发布

STM32 MPU产品是为STM32 MCU开发人员带来新的微处理器解决方案,MCU方案可以无缝地迁移到MPU中。STM32MP1是我们推出的第一次微处理器产品,今天,我们推出全新的高差异化64位MPU产品STM32MP2。

6.png

STM32MP2系列是一款工业级MPU,专为高安全性的工业4.0应用而定制,支持高达125°C的温度。该系列的首条产品子线STM32MP25提供了支持具有多个有线和无线接口的连接功能。其中包括带集成2端口交换机的高达3端口千兆以太网,以及对时间敏感网络(TSN)的支持,这是一个真正的游戏规则改变者。

MP25采用STM32MP13的高级安全功能,符合SESIP 3级认证要求。这意味着STM32MP25可以处理安全性能要求高的物联网应用,例如支付。

7.png

STM32MP25是ST的首款带有边缘AI硬件加速器的MPU,配备了一个神经处理引擎,可提供多达1.35个TOPS。与MPU的摄像头接口相结合,NPU加速器可实现高级边缘计算应用程序,例如,用于机器视觉或预测性维护的应用程序。

STM32MP25产品线将于今年年底提供样片,2024年第二季度量产。

来源:STM32

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 33

STM32CubeU5 MCU 包带一组丰富的运行于意法半导体板件之上的示例。示例按板件进行管理,提供预先配置的项目给主要支持的工具链(请参考)。

“图
图 1. STM32CubeU5 固件组件

参考文档

以下各项构成了本应用笔记中出现的示例的参考集合:

详阅请点击下载《STM32U5 系列的 STM32Cube MCU 包示例》

来源:STM32
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 72

意法半导体(ST)发布了STM32Cube.AI version 7.2.0,这是微控制器厂商推出的首款支持超高效深度量化神经网络的人工智能(AI)开发工具。

“意法半导体STM32Cube.AI

STM32Cube.AI 将预先训练好的神经网络转换成STM32微控制器(MCU)可以运行的C语言代码,是充分利用嵌入式产品有限的内存容量和算力开发尖端人工智能解决方案的重要工具,将人工智能从云端下移到边缘设备,能够为应用带来巨大的优势,其中包括原生隐私保护、确定性实时响应、更高的可靠性和更低的功耗。边缘人工智能还有助于优化云计算使用率。

现在,通过支持 qKeras 或 Larq 等深度量化输入格式,开发者可以进一步降低神经网络代码量、内存占用和响应延迟,这些优势让边缘人工智能释放出更多可能,包括经济型应用和成本敏感应用。因此,开发者可以创建边缘设备,例如,功能和性能先进的电池续航更长的自供电的物联网端点。从超低功耗 Arm Cortex-MCU® 微控制器,到利用 Cortex-M7M33 和 Cortex-A7 内核的高性能产品,意法半导体的STM32系列为开发者提供了许多适合的硬件平台。

STM32Cube.AI 7.2.0版还增加了对TensorFlow 2.9模型的支持,改进了内核性能,新加了scikit-learn机器学习算法和开放神经网络交换(ONNX)运算符。

有关 STM32Cube.AI v7.2.0的更多信息和免费下载,请访问 www.st.com

博客网址:https://blog.st.com/stm32cubeai-v72/

围观 8

在之前的文章中,我们介绍了没有AI基础知识的工程师如何使用NanoEdge AI快速训练一个用于风扇异常检测的模型

该模型根据来自电机控制板的电流信号,检测风扇过滤单元的堵塞百分比。我们知道,当风扇发生堵塞时,电机的电流信号形状会与正常时不同,而传统算法很难有效地处理这种差异。因此,机器学习算法成为解决该问题的明智选择。对于机器学习算法,我们通常使用scikit-learn库来训练模型。今天我们将展示如何自行训练机器学习模型,然后使用STM32Cube.AI 将其部署到同一设备上,以便让大家充分了解两种工具的不同之处。

“用STM32Cube.AI

NanoEdgeAI是一款端到端工具,允许对数据进行一些预处理,并进行训练和算法选择,而STM32Cube.AI 则需要工程师具备一定的AI建模经验,因为STM32Cube.AI 暂不支持模型训练。

硬件和软件准备

“用STM32Cube.AI

用于驱动风扇的P-NUCLEO-IHM03电机控制套件包括一块NUCLEO-G431RB主板、一块电机控制扩展板,以及一台无刷电机。

在软件准备方面,您需要配置anaconda环境,并安装sklearn、pandas、ONNX等必要的库。

让我们回顾一下创建AI项目的一些关键步骤,然后据此逐步演示如何基于STM32Cube.AI 从零开始创建AI项目。

“用STM32Cube.AI

在步骤1中,用户需要收集用于机器学习模型创建的数据。该数据集的一部分(训练数据集)将用于训练模型,另一部分(测试数据集)稍后将用于评估所构建模型的性能。机器学习的数据集中的典型比率为:训练数据集占80%,测试数据集占20%。我们此次试验用的数据集与之前NanoedgeAI训练模型使用的数据是一样的。

在步骤2中,用户需要对数据进行标记;基本上,我们需要告诉机器收集的数据属于哪一类(例如“跑步”、“散步”、“静止”……) 分类指的是根据您认为重要的属性对数据进行分组:这种属性在机器学习领域被称为“类”。

接下来,在步骤3中,用户使用预先准备的数据集训练机器学习模型。该任务也称为“拟合”。训练结果的准确性在很大程度上取决于用于训练的数据的内容和数量。

在步骤4中,用户将训练过的机器学习模型嵌入到系统中。对于在计算机上执行的机器学习,用户可以利用Python库直接执行模型。对于在MCU等器件上运行的机器学习,用户可以在执行之前将该库转换为C代码。

最后在步骤5中,用户验证机器学习模型。如果验证结果与预期的结果不匹配,则用户必须确定上述步骤中需要改进的部分,以及如何改进。比如增加数据,更改模型,调整模型超参数等。

至此,我们已经帮大家重新梳理了一次AI项目的建模过程。接下来我们将按照这样的过程完成我们今天的实验。

首先,导入一些必要的库

“用STM32Cube.AI

为了便于对比,我们使用了之前NanoEdgeAI训练模型中使用的数据集。我们使用pandas从csv文件读取数据,然后用于模型训练。

在训练之前,让我们先来了解一下该数据集。让我们打印出数据集的维度。

“用STM32Cube.AI

可以看到,该数据集一共有119条数据和128个特征,最后一列实际上是我们的数据标签。

接下来,我们将数据集分为训练集和测试集,训练集用于训练模型,测试集用于检验模型的泛化能力。我们将80%的数据用于训练,20%的数据用于测试

“用STM32Cube.AI

一旦数据集准备就绪,我们就可以开始训练模型。

“用STM32Cube.AI

训练完成后,我们可以在测试集上验证模型的性能。我们发现,该模型在测试集上可以达到约83%的准确率。

“用STM32Cube.AI

最后,我们保存经过训练的模型,将得到一个ONNX格式的文件random_forest.onnx

“用STM32Cube.AI

我们使用netron查看模型的结构如下

“用STM32Cube.AI

STM32Cube集成使得STM32Cube.AI 用户能够有效地在广泛的STM32微控制器系列产品之间移植模型,并且(在相似型号适用于不同产品的情况下)在STM32产品之间轻松迁移。

该插件扩展了STM32CubeMX功能,可自动转换训练好的AI模型,生成的优化库集成到用户项目中,而不是人工构建代码,并支持将深度学习解决方案嵌入到广泛的STM32微控制器产品组合中,从而为每个产品添加新的智能化功能。

STM32Cube.AI 原生支持各种深度学习框架,如Keras、TensorFlow™ Lite、ConvNetJs,并支持可导出为ONNX标准格式的所有框架,如PyTorch™、Microsoft® Cognitive Toolkit、MATLAB®等。

此外,STM32Cube.AI 支持来自广泛ML开源库Scikit-Learn的标准机器学习算法,如随机森林、支持向量机(SVM)、K-Means。

“用STM32Cube.AI

现在,我们准备将模型部署到MCU。我们使用STM32Cube.AI 的命令行模式将模型转换为经过优化的C代码。我们运用以下命令执行模型转换。

stm32ai generate -m random_forest.onnx

如果转换成功,我们将看到以下消息。

“用STM32Cube.AI

在stm32ai_output文件夹中,我们将看到有以下文件生成。其中,network.c/.h包含关于模型拓扑的一些信息,而network_data.c/.h则记录了关于模型权重的一些信息。

“用STM32Cube.AI

此时,我们准备好将生成的模型集成到stm32项目中。在CLI模式下,我们需要手动添加STM32Cube.AI 的运行环境到项目,所以我们可以调用network.h中的函数来运行模型。

当然,STM32Cube.AI 提供一种更简便的方式来集成AI模型。假设您的项目从一个ioc文件开始,我们可以将AI模型添加到cubeMX的代码生成阶段,然后一起生成代码。

“用STM32Cube.AI

启用cubeMX中的AI功能如下,选择对应的STM32Cube.AI 的版本。

“用STM32Cube.AI

我们可借此将AI模型集成到项目中。

就这样,在我们生成代码后,AI模型转化为优化的C代码,然后与STM32Cube.AI 运行环境的对应版本一起集成到项目中。

“用STM32Cube.AI

这样,我们就可以调用network.h中的函数将模型运行起来。

最终,我们通过这种方式顺利地将模型集成到了项目中。通过比较这两种不同的方法,我们可以发现STM32Cube.AI 和NanoEdgeAI之间的差异。NanoEdgeAI更简单、高效,而STM32Cube.AI 则更加灵活且可定制。

来源:意法半导体中国
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 461

STM32的标准外设库、HAL、LL软件库,都有很多巧妙之处值得大家借鉴。

今天讲讲STM32Cbue LL库中巧妙运用“静态内联”使代码更高效。

1、写在前面

有些应用要求MCU能高效处理,特别是跑一些算法时,对CPU执行效率要求较高。

网上有很多文章说STM32Cube HAL执行效率不高,代码量大等问题,导致很多还没有入门,或初学的读者就产生各种各样的疑惑。

说实话,HAL相对标准外设库来说确实存在代码效率不高、代码量大灯这些问题,那么与之对应的STM32Cube LL恰好避免了这样的问题。

2、LL能高效的原因

简单总结一下原因:巧妙运用C语言静态、内联函数直接操作寄存器。

当然,这是其中重要的原因,还有一些其它原因,这里暂不描述。

你会在LL库.h文件中发现大量类似,静态、内联函数直接读写寄存器的函数。

比如读写IO口:

__STATIC_INLINE uint32_t LL_GPIO_ReadOutputPort(GPIO_TypeDef *GPIOx)
{
  return (uint32_t)(READ_REG(GPIOx->ODR));
}

__STATIC_INLINE void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
{
  WRITE_REG(GPIOx->BSRR, (PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU);
}

其中__STATIC_INLINE,就是静态、内联:

#define __STATIC_INLINE  static __inline

而读写位的定义:

“STM32Cube

这里面的宏定义,在众多外设.h中都在调用。比如使能USART:

LL库使能USART:

__STATIC_INLINE void LL_USART_Enable(USART_TypeDef *USARTx)
{
  SET_BIT(USARTx->CR1, USART_CR1_UE);
}

标准外设库使能USART:

void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  if (NewState != DISABLE)
  {
    /* Enable the selected USART by setting the UE bit in the CR1 register */
    USARTx->CR1 |= USART_CR1_UE;
  }
  else
  {
    /* Disable the selected USART by clearing the UE bit in the CR1 register */
    USARTx->CR1 &= (uint16_t)~((uint16_t)USART_CR1_UE);
  }
}

通过对比,你会明显发现:LL库的执行效率更高。

3、什么是内联函数

写到这里,就可能有读者会问:什么是内联函数?

内联函数是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展。(---来自百度百科)

通常,程序执行时,处理器从内存中读取代码执行。当程序中调用一个函数时,程序跳到存储器中保存函数的位置,开始读取代码执行,执行完后再返回。

为了提高速度,C语言定义了inline函数,告诉编译器把函数代码在编译时直接拷贝到程序中,这样就不用执行时另外读取函数代码。

提示:

当内联函数很大时,会有相反的作用,因此一般比较小的函数才使用内联函数。

4、软件框架思维

LL之所以高效,是因为它巧妙运用了一些C语言知识,没有太多封装,直接或间接对寄存器进行操作。

而能这样实现,归功于ST开发团队设计了这么一个中间层软件框架。

对于有大型项目开发经验的人来说,一个项目的框架对整个项目影响很大。

就好比你建一栋楼,如果楼层框架都没造好,你觉得这栋楼质量会好吗?

所以,这里就提到,我们编程时,特别项目较大,需要考虑一下软件框架,一个好的框架能让你你的项目达到事半功倍的效果。

来源:嵌入式专栏
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 78

STM32Cube.AI是意法半导体AI生态系统的一部分,是STM32Cube的一个扩展包,它可以自动转换和优化预先训练的神经网络模型并将生成的优化库集成到用户项目中,从而扩展了STM32CubeMX的功能。它还提供几种在桌面PC和STM32上验证神经网络模型以及测量模型性能的方法,而无需用户手工编写专门的C语言代码。

“专为STM32

上一篇文章大致介绍了STMCube.AI的基本特性,以及其工作流程。

本文将更深入地介绍它的一些高级特性。将涉及以下主题:

  • 运行时环境支持:Cube.AI vs TensorFlow Lite

  • 量化支持

  • 图形流与存储布局优化

  • 可重定位的二进制模型支持

运行时环境支持:Cube.AI vs TensorFlow Lite

STM32Cube.AI支持两种针对不同应用需求的运行时环境:Cube.AI和TensorFlow Lite。作为默认的运行时环境,Cube.AI是专为STM32高度优化的机器学习库。而TensorFlow Lite for Microcontroller是由谷歌设计,用于在各种微控制器或其他只有几KB存储空间的设备上运行机器学习模型的。其被广泛应用于基于MCU的应用场景。STM32Cube.AI集成了一个特定的流程,可以生成一个即时可用的STM32 IDE项目,该项目内嵌TensorFlow Lite for Microcontrollers运行时环境(TFLm)以及相关的TFLite模型。这可以被看作是Cube.AI运行时环境的一个替代方案,让那些希望拥有一个跨多个项目的通用框架的开发人员也有了选择。

“专为STM32

虽然这两种运行时环境都是为资源有限的MCU而设计,但Cube.AI在此基础上针对STM32的独特架构进行了进一步优化。因此,TensorFlow Lite更适合有跨平台可移植性需求的应用,而Cube.AI则更适合对计算速度和内存消耗有更高要求的应用。

下表展示了两个运行时环境之间的性能比较(基于一个预训练的神经网络参考模型)。评价指标是在STM32上的推断时间和内存消耗。

“专为STM32

如表中所示,对于同一模型,Cube.AI运行时环境比TFLite运行时环境节约了大概20%的flash存储和约8%的RAM存储。此外,它的运行速度几乎比TFLite运行时环境快了2倍。

对于TFLite模型,用户可以在STM32Cube.AI的网络配置菜单中对2个运行时环境进行选择。

“专为STM32

量化支持

量化是一种被广泛使用的优化技术,它将32位浮点模型压缩为位数更少的整数模型,在精度只略微下降的情况下,减少了存储大小和运行时的内存峰值占用,也减少了CPU/MCU的推断时间和功耗。量化模型对整数张量而不是浮点张量执行部分或全部操作。它是面向拓扑、特征映射缩减、剪枝、权重压缩等各种优化技术的重要组成部分,可应用在像MCU一样资源受限的运行时环境。

通常有两种典型的量化方法:训练后量化(PTQ)和量化训练(QAT)。PTQ相对容易实现,它可以用有限的具有代表性的数据集来量化预先训练好的模型。而QAT是在训练过程中完成的,通常具有更高的准确度。

STM32Cube.AI通过两种不同的方式直接或间接地支持这两种量化方法:

  • 首先,它可以用来部署一个由PTQ或QAT过程生成的TensorFlow Lite量化模型。在这种情况下,量化是由TensorFlow Lite框架完成的,主要是通过“TFLite converter” utility导出TensorFlow Lite文件。

  • 其次,其命令行接口(CLI)还集成了一个内部的训练后量化(PTQ)的过程,支持使用不同的量化方案对预训练好的Keras模型进行量化。与使用TFLite Converter工具相比,该内部量化过程提供了更多的量化方案,并在执行时间和精确度方面有更好的表现。

“专为STM32

下表显示了在STM32上部署量化模型(与原有浮点模型相比)的好处。此表使用FD-MobileNet作为基准模型,共有12层,参数大小145k,MACC操作数24M,输入尺寸为224x224x3。

“专为STM32

从表中很容易看出,量化模型节省了约4倍的flash存储和RAM存储,且运行速度提高了约3倍,而精确度仅仅下降了0.7%。

如果已经安装了X-Cube-AI包,用户可以通过以下路径找到关于如何使用命令行界面(CLI)进行量化的教程:

C:\Users\username\STM32Cube\Repository\Packs\STMicroelectronics\X-CUBE-AI\7.0.0\Documentation\quantization.html。

在文档的末尾还附上了一个快速实践示例:“量化一个MNIST模型”。

图形流与存储布局优化

除了量化技术,STM32Cube.AI还通过使用其C代码生成器的优化引擎,针对推理时间优化内存使用(RAM & ROM)。该引擎基于无数据集的方法,无需验证或测试数据集来应用压缩和优化算法。

第一种方法:权重/偏置项压缩,采用k -均值聚类算法。该压缩算法仅适用于全连接层。其优势是压缩速度快,但是结果并不是无损的,最终的精度可能会受到影响。STM32Cube.AI提供“验证”功能,用于对所生成的C模型中产生的误差进行评估。

“压缩”选项可以在STM32Cube.AI的网络配置中激活,如下图所示:

“专为STM32

第二种方法:操作融合,通过合并层来优化数据布局和相关的计算核。转换或优化过程中会删除一些层(如“Dropout”、“Reshape”),而有些层(如非线性层以及卷积层之后的池化层)会被融合到前一层中。其好处是转换后的网络通常比原始网络层数少,降低了存储器中的数据吞吐需求。

“专为STM32

最后一种方法是优化的激活项存储。其在内存中定义一个读写块来存储临时的隐藏层值(激活函数的输出)。此读写块可以被视为推理函数使用的暂存缓冲区,在不同层之间被重复使用。因此,激活缓冲区的大小由几个连续层的最大存储需求决定。比如,假设有一个3层的神经网络,每一层的激活值分别有5KB, 12KB和3KB,那么优化后的激活缓冲区大小将是12KB,而不是20KB。

可重定位的二进制模型支持

非可重定位方法(或“静态”方法)指的是:生成的神经网络C文件被编译并与最终用户应用程序堆栈静态链接在一起。

如下图所示,所有对象(包括神经网络部分和用户应用程序)根据不同的数据类型被一起链接到不同的部分。在这种情况下,当用户想要对功能进行部分更新时(比如只更新神经网络部分),将需要对整个固件进行更新。

“专为STM32

相反,可重定位二进制模型指定一个二进制对象,该对象可以安装和执行在STM32内存子系统的任何位置。它是所生成的神经网络C文件的编译后的版本,包括前向核函数以及权重。其主要目的是提供一种灵活的方法来更新AI相关的应用程序,而无需重新生成和刷写整个终端用户固件。

生成的二进制对象是一个轻量级插件。它可以从任何地址(位置无关的代码)运行,其数据也可放置于内存中的任何地方(位置无关的数据)。

STM32Cube.AI简单而高效的AI可重定位运行时环境可以将其实例化并使用它。STM32固件中没有内嵌复杂的资源消耗型动态链接器,其生成的对象是一个独立的实体,运行时不需要任何外部变量或函数。

下图的左侧部分是神经网络的可重定位二进制对象,它是一个自给自足的独立实体,链接时将被放置于终端用户应用程序的一个单独区域中(右侧部分)。它可以通过STM32Cube.AI的可重定位运行时环境被实例化以及动态链接。因此,用户在更新AI模型时只需要更新这部分二进制文件。另外,如果有进一步的灵活性需求,神经网络的权重也可以选择性地被生成为独立的目标文件。

“专为STM32

可重定位网络可以在STM32Cube.AI的高级设置中激活,如下图所示:

“专为STM32

最后,作为意法半导体人工智能生态系统的核心工具,STM32Cube.AI提供许多基本和高级功能,以帮助用户轻松创建高度优化和灵活的人工智能应用。

来源:意法半导体中国
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 136

引言

X-CUBE-SBSFU安全启动和安全固件更新解决方案允许使用新固件版本更新STM32微控制器内置程序、添加新功能并更正潜在问题。更新过程以安全方式执行,以防止未经授权的更新以及访问设备上的机密数据。

安全启动(可信根服务)是一种不可变代码,总是在系统复位后执行。它检查STM32静态保护、激活STM32运行时保护措施,然后在每次执行前验证应用程序代码的真实性和完整性,以确保无效或恶意代码不能运行。

安全固件更新应用程序通过使用Ymodem协议的UART接口接收固件镜像。它会在安装代码之前检查其真实性和完整性。固件更新可更新整个固件镜像,或者部分镜像。示例代码可灵活配置, 可配置使用对称或非对称加密方案,采用明文或密文方案。

工程以两种方案提供:

• 单固件镜像配置,以使固件镜像尺寸最大化
• 双固件镜像配置,以确保安全镜像安装,并启用物联网器件中常用的OTA固件更新功能。

安全密钥管理服务通过PKCS #11 API(基于KEY ID的API)向用户应用程序提供加密服务,这些API在受保护和隔离的环境中执行。用户应用程序密钥存储在受保护和隔离的环境中,以便进行安全更新:真实性检查、数据解密和数据完整性检查。

STSAFE-A100是一种防篡改安全元件(通过硬件通用标准EAL5+认证),用于托管X509证书和密钥,并在安全启动和安全固件更新过程中执行用于固件镜像身份确认的验证。

X-CUBE-SBSFU用户手册(UM2262)讲解X-CUBE-SBSFU入门知识并详细介绍SBSFU功能。该应用笔记描述了如何调整X-CUBE-SBSFU并将其与用户应用程序集成;它回答了诸如以下问题:

• 如何将X-CUBE-SBSFU移植到另一块板?•如何根据用户的需求微调X-CUBE-SBSFU配置?
• 如何生成新的固件加密密钥?
• 如何调试X-CUBE-SBSFU?
• 如何调整SBSFU?
• 如何调整用户的应用程序?

注: 在该应用笔记中,使用IAR™EWARM IDE作为示例,为项目配置提供指南。安全启动和安全 固件更新应用程序被称为SBSFU。

详阅请点击下载《X-CUBE-SBSFU STM32Cube扩展包集成指南》

来源:ST
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 129

意法半导体STM32Cube.AI开发环境为用户提供各种机器学习技术,为他们尽可能高效地解决分类、聚类和新颖性检测三种算法挑战提供更多灵活性。

“意法半导体STM32Cube.AI生态系统加强对高效机器学习的支持"

除了能够在STM32*微控制器(MCU)上开发用于边缘推理的神经网络外,最新的STM32Cube.AI版本(7.0版)还支持新的监督和半监督方法,这些方法可以处理更小的数据集和更少的CPU周期。其中包括孤立森林异常检测(iForest)和单类支持向量机(OC-SVM)新颖性检测,以及K-means和SVM分类器算法,现在,用户无需人工写代码就能实现这些算法。

除神经网络之外,这些经典机器学习算法让开发人员通过易于使用的技术在STM32微控制器上转换、验证和部署各种学习模型,缩短研发周期,更快地解决人工智能开发挑战。

STM32Cube.AI允许开发人员将机器学习处理任务从云端转移到基于STM32的边缘设备,以减少延迟、节约能源、提高云利用率,并通过大限度地减少互联网上的数据交换来保护隐私。现在,用户使用STM32 MCU具有额外的灵活性,可以选择高效的机器学习技术进行设备上分析,是长期在线使用案例和智能电池供电应用的理想之选。

关于意法半导体

意法半导体拥有46,000名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一家独立的半导体设备制造商,意法半导体与十万余客户、数千名合作伙伴一起研发产品和解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需求。意法半导体的技术让人们的出行更智能,电力和能源管理更高效,物联网和5G技术应用更广泛。

来源:意法半导体
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 33

页面

订阅 RSS - STM32Cube