0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于STM32的三种库函数代码效率对比解析

STM32单片机 来源:未知 作者:佚名 2017-11-06 06:49 次阅读

前言

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

问题分析

我们以GPIO翻转、TIM PWM 输出、ADCDMA 数据采集和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 libraryfiles

STM32CubeF3 V1.60

STM32F30x_DSP_StdPeriph_Lib_V1.2.3

STM32F3xx CMSIS V2.3.0

测试结果如下:[手机模式下片可点击放大观看]

总体来看,代码效率与代码的兼容性及可移植性成反比的规律是明显的。Cube LL库的效率明显优于HAL库的,几乎和直接写寄存器的效率相差无几。HAL库函数因为要顾及整个STM32系列间的代码高度兼容与可移植性,代码相对庞大。对于刚接触STM32的人来说,非常易于上手做些基本的评估和验证,入门快捷。LL库的出现,是对HAL库的有力补充。相比HAL库用户,LL库用户需要对MCU及相应外设有更为细致的了解。

目前,STM32cubeMX不但支持基于HAL库的初始化文件的生成,也已支持基于LL库的初始化文件及工程的生成,对于已经比较熟悉STM32应用或关注代码效率的开发人员来说,可以优先考虑使用LL库。

顺便介绍在STM32CubeMx的图形化界面下,如何选择使用HAL库还是LL库生成初始化文件及相应工程。

在CubeMx界面下,做好各个外设的选择及配置后,在ProjectProject SettingAdvanced Settiing如下图示界面上,你可以选择要使用的库类型:HAL/LL.

另外,偶尔人询问及LL库在哪里,其实LL库函数跟HAL库函数是在同一目录下。以STM32F4为例,你下载STM32CubeF4解压后,在类似如下目录可以看见HAL函数和LL函数库文件。

。。。DriversSTM32F4xx_HAL_DriverSrc


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2239

    文章

    10669

    浏览量

    348687
  • 库函数
    +关注

    关注

    0

    文章

    177

    浏览量

    33721

原文标题:基于不同STM32库函数的代码性能对比

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    解析STM32库函数——献给新手

    ,必然会消耗相当的时间,并且对于程序后续的维护,升级来说也会增加资源的消耗。对于当前“时间就是金钱”的行业竞争环境,无疑使用库函数进行STM32的产品开发是更好的选择。本文将通过一个简单的例子对STM32
    发表于 10-21 14:16

    解析STM32库函数

    本帖最后由 zax1234 于 2012-10-29 22:50 编辑 解析STM32库函数 意法半导体在推出 STM32 微控制器之初,也同时提供了一套完整细致的固件开发包,
    发表于 10-29 22:36

    解析STM32库函数

    解析STM32库函数
    发表于 05-12 09:35

    解析STM32库函数(转)

    解析STM32库函数(转) 献给新手
    发表于 11-19 08:39

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

    前言ST 已经推出了三种库函数,用以方便客户快速开发 STM32 系列的 MCU。从最早的标准外设驱动库,到后来的 Cube HAL , 再到 Cube LL,还有直接写寄存器。这几种库的代码
    发表于 07-27 14:07

    分享库函数版本代码

    库函数版本代码库函数版本(适合MiniSTM32开发板)扩展实验12 ATK-NEO-6M GPS模块实验.zip (414.46 KB )库函数
    发表于 02-25 01:30

    STM32应用的三种框架应用代码

    文章目录STM32应用的三种框架应用代码+设备寄存器应用代码+标准库+设备寄存器应用代码+OS+标准库+设备寄存器
    发表于 08-10 06:32

    STM32三种boot模式介绍

    、示例验证总结参考资料任务摘要请说明STM32三种Boot模式的差异,并在之前第11-12周“C语言各种变量的存储地址”作业代码基础上,研究至少两boot模式下,
    发表于 12-10 07:46

    STM32库函数代码自动生成器V1.2

    stm32库函数代码自动生成器是STM32学习的小工具。 stm32库函数
    发表于 06-17 17:55 0次下载

    STM32库函数代码自动生成器正式版

    STM32库函数代码自动生成器正式版,感兴趣的可以看看。
    发表于 07-13 16:55 0次下载

    STM32库函数代码自动生成器正式版

    STM32库函数代码自动生成器正式版 STM32库函数代码自动生成器正式版
    发表于 07-25 18:52 0次下载

    stm32下标准库函数与HAL库函数编程方式的差异

    stm32下标准库函数与HAL库函数编程方式的差异标准库函数HAL库函数标准库函数与HAL
    发表于 12-09 14:21 15次下载
    <b class='flag-5'>stm32</b>下标准<b class='flag-5'>库函数</b>与HAL<b class='flag-5'>库函数</b>编程方式的差异

    基于标准库函数与基于HAL库函数stm32编程方式对比

    以实例程序(串口通信),分析基于标准库函数与基于HAL库函数stm32编程方式的差异一、基于标准库函数stm32编程方式二、基于HAL
    发表于 12-28 19:09 30次下载
    基于标准<b class='flag-5'>库函数</b>与基于HAL<b class='flag-5'>库函数</b>的<b class='flag-5'>stm32</b>编程方式<b class='flag-5'>对比</b>

    STM32库函数开发-GPIO

    2021-01-11 学习日志STM32f1库函数开发学习实战一 · I/O口1. 文件夹结构2. 配置细节 · 从寄存器到库函数3. 跑马灯4. 按键输入STM32f1
    发表于 01-13 16:17 13次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>库函数</b>开发-GPIO

    STM32库函数SystemInit()详解

    STM32库函数SystemInit()详解
    的头像 发表于 09-18 15:45 1947次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>库函数</b>SystemInit()详解