关于STM32库函数的代码性能对比

发布时间:2022-12-07  

ST 已经推出了三种库函数,用以方便客户快速开发STM32系列的 MCU。从最早的标准外设驱动库,到后来的 Cube HAL , 再到 Cube LL,还有直接写寄存器。这几种库的代码效率到底如何呢?本文将针对这个问题进行分析和对比,最后提供对比数据供大家参考。


问题分析

我们以 GPIO 翻转、tiM PWM 输出、ADC DMA数据采集和 DMA M2M 这四个常用功能,通过不同的库函数来实现,最终来对比各个库函数的性能。四个工程代码的内容简述如下:

GPIO 翻转:切换 GPIO 的输出电平,其中包含了系统时钟初始化和 GPIO 翻转的代码。


TIM PWM 输出:通过 TIM1 的通道 1 输出频率是 36KHz 的 PWM,循环修改其占空比从 25%到 50%,其中包含了系统时钟初始化、TIM1 的初始化和切换占空比的代码。


ADC DMA 数据采集:通过 ADC 的模拟通道 1,采集 100 次 ADC 的结果,并使用 DMA 传输到到用户缓冲区,其中包含了系统时钟初始化、ADC 初始化和 DMA 的初始化的代码。


DMA M2M:使用 DMA1 的通道 1,从 Flash 中传输 100 字节的数据到片内的 SRAM 中。其中包含了系统时钟的初始化和 DMA的初始化代码。

主要对比三个参数:Flash 占用量、SRAM 占用量和执行代码的效率。


Flash 和 SRAM 的占用量可以通过查看 IAR 生成的*.map 文件了解到。




在*.map 文件中,会有如上图的内容,其中的 readonly code memory 加上 readonly data memory 的和,就是 Flash 的占用量。而 Readwrite data memory 的大小即为 SRAM 的占用量。那么上图所示的 Flash 占用量即为 3204=3174+30,SRAM 占用量即为 1032。因用户堆(Cstack)我们设置的为 1024,所以真正应用代码所占用的 SRAM 量为 8=1032-1024.

代码的运行效率部分,我们是通过 IAR 提供的内核运行周期数(CYCLECONTER)来计算的。在功能函数的开始处和结束处分别设置断点,两次内核运行周期数的差值,就是此处代码的运行周期。



测试硬件选用了 Nucleo-F302 评估板。软件环境和库函数详情如下:

• IAR V7.60
• Optimizations Level High (Size)
• STM32CubeMX V4.17
• Create Project with Copy the necessary library files
• STM32CubeF3 V1.60
• STM32F30x_DSP_StdPeriph_Lib_V1.2.3
• STM32F3xx CMSIS V2.3.0

测试结果如下:

总结:
总体来看,代码效率与移植性成反比的规律是明显的。但与 Cube HAL 相比, Cube LL 的效率优势还是很明显的,几乎和直接写寄存器的效率相差无几。而且目前 STM32cubeMX 已经开始支持直接生成使用 Cube LL 的工程,对于以后追求效率的开发应用人员来说,非常值得推荐给大家使用。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    们现在的工程主要涉及到的外设有:misc/gpio/spi/fsmc/usart/rcm。可以通过查看两者的参考手册,查看那些寄存器功能基本一致的对应的库函数的功能也基本一致。 2.1 外设与库函数对照 我这里也整理了本次替代过程中常用外设的寄存器与库函数......
    《stm32f10x_stdperiph_lib_um.chm》 开发stm32驱动,首先是开启相应的时钟,这要看RCC 中文参考手册的第六章,RCC控制,那么我们就去库函数中的module下找RCC模块,看其中各个函数......
    基于STM32F407库函数开发按键控制LED灯;按键控制灯的亮与灭的效果图: 一、寄存器开发与库函数开发的优缺点 1、寄存器开发 缺点: (1)开发难度大,查阅相关手册比较多 (2)开发......
    文章的第一篇,主要介绍开发环境的搭建、编程思路、如何查看原理图、配置时钟,配置GPIO口模式等等。 下面文字是来至STM32中文手册,对STM32系列做了详细的介绍: STM32是一个微控制器产品系列的总称,目前......
    并没有对待机模式相关寄存器进行介绍,大家可以参考《STM32F10x 中文参考手册》-4 电源控制器(PWR)章节,里面有详细的讲解。如果看不懂的可以暂时放下,因为我们使用的是库函数开发。 待机模式配置步骤 接下来我们介绍下如何使用库函数......
    WK_UP 引脚为唤醒源 待机唤醒方式有很多种,我们选择 WK_UP 引脚(PA0)上升沿来退出待机模式。在库函数中,设置使能 WK_UP 用于唤醒 CPU 待机模式的函数是: 因为按键 K_UP......
    轮询中的业务。简单用一个图来表示一下 中断概念示意图 根据中文参考手册的介绍,STM32F103ZET6除了一些特殊的中断外,常用的中断有60个,这些......
    开发时针对特殊引脚进行重映射的操作步骤为 • 定义GPIO结构体 • 开启GPIO时钟和AFIO时钟 • 重映射引脚(根据所需情况设定引脚模式) • 配置GPIO结构体初始化GPIO 库函数中......
    的配置看STM32中文参考手册了解一下,直接用串口库函数就好了。   十、串口操作相关库函数   获取状态标志位函数-操作USART_SR寄存器   // 获取状态标志位   FlagStatus......
    单片机入门stm32知识学习的先后顺序;  这里大概的罗列了一些学习STM32的内容,以及学习顺序。如果是新手的话,建议边看中文手册和学习视频;如果是已经入门的,个人建议自己做一个项目,不论......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>