STM32

STM32是STMicroelectronics(意法半导体)推出的一系列基于ARM Cortex-M内核的32位微控制器(MCU)产品。这些微控制器提供了广泛的产品系列,覆盖了多种不同的性能和功能需求,适用于各种应用领域,包括工业控制、汽车电子、消费类电子、医疗设备等。

STM32系列微控制器以其高性能、低功耗、丰富的外设接口和灵活的开发工具而闻名。它们通常具有丰富的存储器、多种通信接口(如UART、SPI、I2C、CAN等)、模拟数字转换器(ADC)、定时器、PWM输出等功能,以满足不同应用场景下的需求。

STM32微控制器通常使用标准的ARM Cortex-M内核,包括Cortex-M0、M0+、M3、M4和M7等,这些内核具有不同的性能和功耗特性,可根据具体应用的需求进行选择。此外,STM32系列还提供了多种封装和引脚配置,以满足不同尺寸和集成度的要求。

STMicroelectronics为STM32系列提供了丰富的开发工具和支持资源,包括基于ARM开发环境的集成开发环境(IDE)、调试器、评估板和参考设计等。这些工具和资源有助于开发人员快速开发和部署他们的应用,并提供了全面的技术支持和文档资料,帮助用户充分发挥STM32微控制器的性能和功能优势。

近日,AGM Micro发布了兼容STM32 的MCU产品系列,推出具有低延迟高灵活性的功能模块MCU产品系列。AGM 的FPGA兼容产品系列已常年持续地服务于FPGA长尾商业模式的近千个AGM客户。AGM32产品系列对32位MCU的广大客户群提供国产替代和新智能应用市场的开拓。

“AGM

此次AGM Micro发布的产品系列包括AG103/107/205/303/407,与现有STM32产品功能和管脚完全兼容。

AGM的32位MCU采用了自主研发的高性能单(多)核,以及高性价比嵌入式CPU技术,使其MCU系列产品相对于国产同类产品来说具有高性能、低延迟、高灵活度(整合功能)的技术优势。

AGM32 103系列的最高主频为168MHz; 407系列的最高主频为248MHz,配备了1M的片上Flash和零等待指令执行功能。所有 AGM32 系列产品都提供从flash零等待指令执行功能。

芯片内置了丰富的外设资源,包含3个12位ADC、2个DAC,2个基本定时器,5个高级定时器,以及一系列接口:2个CAN2.0、5个UART、2个I2C,支持SDIO、Ethernet MAC、USB、FS+OTG等。

关于AGM Micro:

AGM Micro(www.agm-micro.com) 是领先的32位MCU、可编程SoC、和异构(MCU)边缘计算芯片和方案提供商,是一家民营企业,致力于为消费电子、工业和AIoT中高量市场提供智能化的设计软件和芯片系统。AGM针对不同的纵向应用市场,并拥有19个知识产权,以及获得专利的编译软件(包括数据库、综合、布局、布线、时序分析、比特流产生等)及电路。

围观 75

作者 | strongerHuang

微信公众号 | 嵌入式专栏

STM32CubeMX中Cortex系统定时器(System Timer)选择1分频和8分频,为啥生成代码一样?

“STM32的SysTick时钟源来自哪里?"

因为STM32CubeMX会启动SysTick作为延时(HAL_Delay)函数的时基,而SysTick作为Cortex内核的一部分,就会用到Cortex系统定时器。

那么,问题就来了SysTick时钟源来自哪里?

1、数据手册和STM32CubeMX时钟树

数据手册时钟树:

“STM32的SysTick时钟源来自哪里?"

STM32CubeMX时钟树:

“STM32的SysTick时钟源来自哪里?"

你会发现:数据手册中的只有『/8』分频,而STM32CubeMX除了『/8』分频,还有『/1』分频。

2、SysTick时钟初始化代码

不管是使用标准外设库,还是HAL库,你初始化SysTick,都会调用内核中的SysTick_Config函数。

标准库常用初始化:

SysTick_Config(SystemCoreClock / 1000);

HAL库初始化同样也是调用底层的初始化函数:

uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb)
{
   return SysTick_Config(TicksNumb);
}

初始化调用这段代码之后,SysTick将会实现1ms中断一次。

这段代码实现1ms中断一次相信大家都能理解,但是这里SysTick初始化和上面说的时钟『/8』有关系吗?

3、SysTick时钟源是来自哪里?

这个问题只要认真看参考手册都能找到答案。

RCC通过AHB时钟(HCLK)8分频后作为Cortex系统定时器(SysTick)的外部时钟。

通过对SysTick控制与状态寄存器的设置,可选择上述时钟或Cortex(HCLK)时钟作为SysTick时钟。(--来自参考手册)

也就是说SysTick时钟源可以来自两个地方:

  • AHB时钟8分频

  • HCLK(内核)时钟

通过SysTick控制与状态寄存器的设置进行选择时钟源。

具体就是通过CLKSOURCE(时钟源)这一Bit位来选择:

“STM32的SysTick时钟源来自哪里?"

再次看SysTick_Config函数源码:

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
  {
    return (1UL);                                                   /* Reload value impossible */
  }

  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */
  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                   SysTick_CTRL_TICKINT_Msk   |
                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */
  return (0UL);                                                     /* Function successful */
}
(在core_cm3.h,或者core_cm4.h等内核源码中)

你会发现,其实源码已经默认使用HCLK(内核)时钟。

而SysTick_Config函数属于内核(如core_cm3.h)已经写好源码,一般我们不去修改。

所以,到这里,你会明白:SysTick时钟源其实就是用的HCLK(内核)时钟。

4、最后

开篇的问题:STM32CubeMX中Cortex系统定时器(System Timer)选择1分频和8分频,为啥生成代码一样?

“STM32的SysTick时钟源来自哪里?"

难道,STM32CubeMX配置Cortex系统定时器时钟是有Bug吗?

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

围观 138

如果你还不了解什么是STM32对其Flash的保护,那么今天就来给你讲解一下什么是STM32的Flash保护!

01、什么是Flash?

STM32的FLASH组织结构,可能因不同系列、型号略有不同。比如大家熟悉的STM32F1中小容量一页大小只有1K,而F1大容量一页有2K。

还比如有些系列以扇区为最小单元,有的扇区最小16K,有的128K不等。

通常Flash包含几大块,这里以F40x为例:

  • 主存储器:用来存放用户代码或数据。

  • 系统存储器:用来存放出厂程序,一般是启动程序代码。

  • OTP 区域:一小段一次性可编程区域,供用户存放特定的数据。

  • 选项字节:存放与芯片资源或属性相关的配置信息。

“讲讲STM32单片机Flash的读保护和写保护"

02、什么是STM32对内部Flash的保护?

所有的STM32芯片都会提供对Flash的保护,防止对Flash的非法访问,分为:写保护和读保护。

1、读保护就是大家通常说的“加密”,作用于整个Flash存储区域。如果一旦设置了Flash的读保护,那么单片机内置的Flash存储区就只能通过程序的正常执行才能读出,而不能通过下述方式读出:

(1) 使用调试器(JTAG或SWD);
(2)从内存RAM中启动并执行的程序;

2、写保护是以四页(1KB/页) Flash存储区为单位提供写保护,如果对Flash设置了写保护,那么就无法对Flash进行编程和擦除,而且同时产生操作错误标志。 当出现下图标志的时候,就要检查Flash是否被保护起来了。

“讲讲STM32单片机Flash的读保护和写保护"

03、读保护与写保护的相关效果

当设置读保护与写保护时,其效果如下图所示:

“讲讲STM32单片机Flash的读保护和写保护"

1)flash保护的相关函数

“讲讲STM32单片机Flash的读保护和写保护"

2)STM32如何设置读保护?

我们只需要在程序开头加入“设置读保护”的代码就可以,这样就可以在每次运行代码的时候都检查一下,如果没有开的话就打开,如果开了就跳过。下面是读保护的代码:

“讲讲STM32单片机Flash的读保护和写保护"

当我们在程序的开头执行了上面的代码之后,使用j-link就不能在读出程序了,这样就实现了读保护。

3)如何通过代码解除Flash保护

解除读保护可以下面代码来进行解除,我们为了方便解锁,可以设置一个按键。

“讲讲STM32单片机Flash的读保护和写保护"

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

围观 3532

水表是常见的家用设备。模拟式水表(如下图中所示)数量庞大,需要技术人员每月现场抄表并手工记录数据,以计算当月的用水量。整个过程枯燥且费力。当前,虽然联网仪表正在取代模拟式水表,但成本也会随之上涨;更何况,一些国家并不具备接入全球网络的能力,而有的家庭和公司也无计划支付更换仪表的费用。

“STM32低功耗计算机视觉应用:后装智能无线抄表模型"

本文,意法半导体为你演示如何使用低功耗、低成本的系统(由采用MCU嵌入式连接的低分辨率摄像机组成)高效地将模拟式仪表数字化。

该方法以STM32WL55为基础,通过摄像头捕捉水表读数区域,然后通过MCU上运行的人工智能算法识别水表读数。之后,AI分类器算法的运行结果(即仪表读数)通过STM32WL支持的远程sub-GHz无线网络(如LoRaWAN)进行传输。传统的联网设备会将图像传送到云端,而我们的解决方案传送的是读数。

该解决方案的优点是:通过本地AI模型,可以快速准确地识别读数,只需将结果发送回数据中心即可。此举不仅能有效保护用户数据隐私(仅传输推理结果),而且效率更高,还节省带宽。这样,我们就能以低成本、低功耗、高效率的方式解决问题。

“STM32低功耗计算机视觉应用:后装智能无线抄表模型"

STM32WL系列是世界上第一款支持远程无线通信的MCU。

作为市场上首款可以连接LoRa低功耗广域网的系统级芯片,STM32WL集成了STM32L4超低功耗微控制器和支持多种调制方案的Sub-GHz射频子系统。

“STM32低功耗计算机视觉应用:后装智能无线抄表模型"

STM32取得成功的一个重要因素是其强大的生态系统。基于STM32WL产品的开发人员可以借用已经被市场证明成熟可靠的STM32生态系统。该生态系统包含已经熟练掌握的开发工具(支持基于STM32进行通用开发)、专门用于sub-GHz无线电开发的软件包,以及AI设计工具,由此大大降低了开发难度,并缩短了产品上市时间。

生态系统中的资源包括STM32CubeMX项目配置和代码生成工具、STM32CubeMonitor运行时监测和可视化工具,以及STM32CubeProgrammer代码烧录工具。

STM32Cube.AI可以帮助用户快速将经过训练的AI模型部署到STM32并进行验证测试。

STM32CubeWL MCU软件包的组件包含STM32WL系列运行所需的所有嵌入式软件模块,包括外设驱动程序、意法半导体的LoRaWAN协议栈、Sigfox协议栈,以及利用意法半导体安全启动和安全固件更新技术实现LoRaWAN固件无线更新的示例代码。

此外,还有两种基于STM32WL的nucleo板件可用于快速原型制作:NUCLEO-WL55JC1(868pm 915amp 923 MHz)和NUCLEO-WL55JC2(433Accord470 MHz)。与此同时,有两种基于Nucleo的Nucleo板可用于快速原型开发。该项目基于NUCLEO-WL55JC2开发板。

“STM32低功耗计算机视觉应用:后装智能无线抄表模型"

除了NUCLEO-WL55JC2,该项目的另一个关键组成部分是摄像头。

摄像头模块(基于低成本的OV2640传感器)通过标准GPIO直接连接到NUCLEO-WL55JC2开发板,因为STM32WL系列产品不提供DCMI接口。为方便进行演示,我们使用了一款常见的电磁计数器,这样更容易进行模型演示。

实验系统如下图所示。我们将直流电源转化成方波,用于驱动电磁计数器,然后摄像头就可以采集计数器的读数画面,通过GPIO传输到NUCLEO-WL55JC2,由MCU上运行的AI模型进行识别。

“STM32低功耗计算机视觉应用:后装智能无线抄表模型"

所有硬件准备就绪后,我们就可以自己制作一个数据集,用于模型训练。

在计算机视觉应用中,有一个经典的入门级项目 - 识别MNIST数据集。MNIST数据集收集0-9这10个阿拉伯数字的手写字体,包括训练集中的60000个样本和测试集中的1000个样本。有的用户想要通过真实数据来尝试学习技巧和模式识别方法,同时尽可能地节省在预处理和格式化方面花费的精力,对于此类用户, MNIST是一个很好的练手项目。

“STM32低功耗计算机视觉应用:后装智能无线抄表模型"

但是我们不使用该数据集,因为水表上的数字的字体和颜色与该数据集差别很大。为了使模型获得更好的表现,我们将使用上面提到的设备制作一个类似于MNIST的数据集。

该数据集大约有4000个样本。每个样本包含5位数字。数据集的部分样本如下所示:

“STM32低功耗计算机视觉应用:后装智能无线抄表模型"

拥有数据集之后,我们可以构建一个神经网络,并用自己的数据集来训练模型。在该模型中,我们输入一幅40 X32(单个字符)的灰度图像来识别从0到19(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)的20个类。下图显示了训练中的损失和准确率的变化。该数据集的特点是背景简单和字体规则,看起来训练效果非常好。实际上,我们可以收集不同的水表读数(不同的字体和颜色)进行训练,这样一个模型就可以识别多个不同水表读数。

“STM32低功耗计算机视觉应用:后装智能无线抄表模型"

训练结束后,我们将得到一个模型文件。此时,我们可以使用前面文章中提到的STM32cube.AI工具将模型转换为优化的代码,并快速将其部署到NUCLEO-WL55JC2板。

STM32Cube集成使STM32Cube.AI用户能够有效地在广泛的STM32微控制器系列产品之间移植模型,并且(在相似型号适用于不同产品的情况下)在STM32产品之间轻松迁移。该项目使用STM32cube.AI将模型部署到STM32WL。关于计算机视觉应用,我们在前面文章中介绍的FP-AI-VISION1软件包中有许多开放代码,可帮助开发人员理解和快速开发。用户可以浏览前面的文章:AI技术专题之六:STM32计算机视觉包FP-AI-VISION1简介,以了解详细信息。

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

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

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

在该项目中,我们使用的是TensorFlow框架。

“STM32低功耗计算机视觉应用:后装智能无线抄表模型"

最后,让我们看看实际表现如何。为了便于演示,我们将摄像头捕捉到的图像和MCU上的识别结果传输到计算机屏幕上。视频中黑色背景上的数字(白色字体)是摄像头捕捉到的图像,第一行是AI模型的识别结果。我们将水表设置为每五秒钟驱动一次,这样数字每隔五秒就会更新一次。该视频显示的是未经编辑的录屏。在演示过程中,我们采用了遮挡的光线的方式,去模拟不同的光照条件,证明模型的鲁棒性很好。

“查看视频"

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

围观 71

意法半导体TCPP03-M20 USB Type-C端口保护 IC为双角色输电(DRP)应用量身定制,针对能给相连设备充电又能接受其他 USB-C电源的双向充放电产品,可以简化其设计。

“意法半导体端口保护

作为有ST UCPD (USB Type-C 和Power Delivery)接口IP模块的 STM32G0*、STM32G4、STM32L5 和 STM32U5 微控制器的配套芯片,TCPP03-M20让设计者以经济划算的方式进行USB Type-C 接口硬件分区,实现以 STM32 为主微控制器的双芯片解决方案,从而节省物料清单成本,缩减PCB电路板空间,降低电路复杂性。

根据 USB Type-C 规范的定义,一台USB-C 双角色输电设备,例如,智能扬声器、智能手机、平板电脑、笔记本电脑、相机等,能够动态地把输电角色从受电改为送电,把USB 数据角色从设备改为主机,反之亦然。这可以实现在电池供电设备之间保存和共享电能的新用例,并扩展设备互操作性。Type-C 规范定义的 USB DRP 功能允许任何内置意法半导体芯片的 USB 设备为所连设备的电池充电。

TCPP03-M20 采用意法半导体的BCD制造工艺。这项工艺最近通过了IEEE Milestone认证,能够在同一颗芯片上整合逻辑电路和高压电路,提高集成度和可靠性,可在同一芯片上实现 ±8kV ESD 保护(IEC61000-4-2 Level 4)、过压和过流保护。这些保护功能是防护意外短路事故或连接故障设备,符合 USB-C Power Delivery技术规范,必不可少的功能。该芯片集成了USB-C 端口的 VCONN 和 CC 两条线的开关管;带有两个 N 沟道 MOSFET 栅极驱动器的Source和Sink通道电荷泵;VBUS 和 VCONN 电源路径放电电路,以及无电量电池管理。

TCPP03-M20优化了超低功耗性能,为USB DRP用例专门设计,确保应用设备具有出色的能效。意法半导体的TCPP01-M12 和 TCPP02-M18 BCD IC是独立的Power Sink和Power Source(供电和受电)解决方案。像意法半导体的所有 TCPP 产品一样,TCPP03-M20 符合 USB-C PD 规范 3.1 标准功率范围 (SPR) 的最新功能,包括 PPS(可编程电源)。

STM32 Nucleo 扩展板 X-NUCLEO-DRP1M1X-CUBE-TCPP STM32Cube扩展软件以及应用代码示例现已上市,有助于加快基于TCPP03-M20 的高达100W DRP 应用项目的开发。开发者还可以利用STM32CubeMX的UCPD 配置支持、STM32G071B-DISCO USB-C 嗅探器和STM32CubeMonitor-UCPD 调试工具。Power Sink受电开发板X-NUCLEO-SNK1M1板现已上市,而Power Source送电开发板 X-NUCLEO-SRC1M1计划于 2021 年第四季度发布。

TCPP03-M20现已投产,采用 4mm x 4mm VFQFPN20 封装。

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

围观 20

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

使用FlyMCU往STM32中烧写程序

cathy的头像

1、软硬件环境

1)操作系统:Windows

2)软件:

  • Keil
  • FlyMcu

3)硬件:

  • PC
  • STM32最小系统开发板
  • USB转TTL CH340G

2、生成hex文件

编写好要烧写的程序后,点击菜单栏的【Flash】,选择【Config Flash Tools】。首先,在【Device】页面中选择设备类型,这里是STM32F103C8。

“使用FlyMCU往STM32中烧写程序"

然后,切换到【Output】页面,勾选【Create HEX File】,最后点击【OK】。

页面

订阅 RSS - STM32