你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【实战经验】关于ST库函数的代码性能对比  

[复制链接]
zero99 发布时间:2016-11-18 16:18
关于ST库函数的代码性能对比


前言
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文件了解到。
11.jpg
在*.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)来计算的。在功能函数的开始处和结束处分别设置断点,两次内核运行周期数的差值,就是此处代码的运行周期。
12.jpg
测试硬件选用了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
测试结果如下:
13.jpg

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

STM32库函数性能对比.pdf (240.74 KB, 下载次数: 66)



收藏 7 评论41 发布时间:2016-11-18 16:18

举报

41个回答
任风吹吹 回答时间:2016-12-16 11:10:37
HAL库对于F0以及L系列的STM32芯片来说太臃肿了,正是如此ST就推出了Cube LL,但它并不是覆盖了所有系列,目前我在L4下的Cube库下有看到Cube LL的示例代码,Cube LL可以与HAL的混合写,但不能与标准库混合。今年ST的Roadshow上有介绍这三种库,对比大概如下: q1.png
移植性对比:
q2.png
任风吹吹 回答时间:2016-12-16 15:54:44
xhzheng 发表于 2016-12-16 14:58
Cube HAL怎么办啊;

按我的理解,Cube HAL还是主流,Cube LL是Cube HAL的有效补充,并不是说在小容量MCU上HAL就不能用,而是说,根据实际项目需求适不适合的问题。Cube HAL依然是ST的主流。
jackten 回答时间:2016-12-28 15:54:46
谢谢分享                                       
moyanming2013 回答时间:2016-11-18 17:58:27
请问此类文有没有出处?
waiman 回答时间:2016-11-18 22:40:30
Cube LL是什么?
Stm32McuLover 回答时间:2016-11-19 00:09:31
给力
peter001 回答时间:2016-11-19 00:57:11
学习一下
zengyi703-16313 回答时间:2016-11-19 03:47:05
学习一下
奏奏奏 回答时间:2016-11-19 07:05:48
“目前STM32cubeMX已经开始支持直接生成使用Cube LL的工程”这个我这么没看到呢?求楼主示范一下怎么操作
any012 回答时间:2016-11-19 11:10:11
本帖最后由 any012 于 2016-11-19 11:15 编辑

第一次听到CUBE LL。
HAL库会不会被放弃?
---------------------------------
搜了下,还发现了个STM32Snippets,这又是个啥?
zhyf 回答时间:2016-11-24 20:59:36
感谢分享!
zxcscm 回答时间:2016-11-25 13:36:09
Cube HAL还没搞明白呢,有出了个Cube LL??
smithson 回答时间:2016-11-25 21:52:05

请问此类文有没有出处?
zbber 回答时间:2016-11-26 08:43:35

,谢谢楼主,支持分享
eyecf 回答时间:2016-12-8 14:52:43
学习 学习
东东bh 回答时间:2016-12-8 19:10:01
学习了,还是挺有道理的
高级放牛娃 回答时间:2016-12-12 11:52:51
建议楼主再普及一下各类库的基础知识。
123下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版