单片机
返回首页

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

2023-09-01 来源:elecfans

前言

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


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 带有短路保护系统的5V直流稳压电源电路图

    相关电子头条文章