前言
ST已經(jīng)推出了三種庫函數(shù),以方便客戶快速開發(fā)STM32系列MCU。從最早的標(biāo)準(zhǔn)外設(shè)驅(qū)動庫,到后來的Cube HAL,再到Cube LL以及直接操作寄存器。這幾種庫的代碼效率到底如何呢?本文將針對這個(gè)問題進(jìn)行粗略分析,并提供對比數(shù)據(jù)供大家參考。
問題分析
我們以GPIO翻轉(zhuǎn)、TIM PWM 輸出、ADCDMA 數(shù)據(jù)采集和DMA M2M這四個(gè)常用功能,通過不同的庫函數(shù)來實(shí)現(xiàn)相同功能,最終來對比各個(gè)庫函數(shù)的性能。四個(gè)工程代碼的內(nèi)容簡述如下:
GPIO翻轉(zhuǎn):切換GPIO的輸出電平,其中包含了系統(tǒng)時(shí)鐘初始化和GPIO翻轉(zhuǎn)的代碼。TIM PWM輸出:通過TIM1 的通道1輸出頻率是36KHz的PWM,循環(huán)修改其占空比從25%到50%,其中包含了系統(tǒng)時(shí)鐘初始化、TIM1的初始化和切換占空比的代碼。ADC DMA數(shù)據(jù)采集:通過ADC的模擬通道1,采集100次ADC的結(jié)果,并使用DMA傳輸?shù)降接脩艟彌_區(qū),其中包含了系統(tǒng)時(shí)鐘初始化、ADC初始化和DMA的初始化的代碼。DMA M2M:使用DMA1的通道1,從Flash中傳輸100字節(jié)的數(shù)據(jù)到片內(nèi)的SRAM中。其中包含了系統(tǒng)時(shí)鐘的初始化和DMA的初始化代碼。
主要對比三個(gè)參數(shù):Flash占用量、SRAM占用量和執(zhí)行代碼的效率。
Flash和SRAM的占用量可以通過查看IAR生成的*.map文件了解到。
在*.map文件中,會有如上圖的內(nèi)容,其中的readonly code memory加上readonly data memory的和,就是Flash的占用量。而Readwrite data memory的大小即為SRAM的占用量。那么上圖所示的Flash占用量即為3204=3174+30,SRAM占用量即為1032。因用戶堆(Cstack)我們設(shè)置的為1024,所以真正應(yīng)用代碼所占用的SRAM量為8=1032-1024.
代碼的運(yùn)行效率部分,我們是通過IAR提供的內(nèi)核運(yùn)行周期數(shù)(CYCLECONTER)來計(jì)算的。在功能函數(shù)的開始處和結(jié)束處分別設(shè)置斷點(diǎn),兩次內(nèi)核運(yùn)行周期數(shù)的差值,就是此處代碼的運(yùn)行周期。
測試硬件選用了Nucleo-F302評估板。
軟件環(huán)境和庫函數(shù)詳情如下:
? 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
測試結(jié)果如下:[手機(jī)模式下圖片可點(diǎn)擊放大觀看]
總體來看,代碼效率與代碼的兼容性及可移植性成反比的規(guī)律是明顯的。Cube LL庫的效率明顯優(yōu)于HAL庫的,幾乎和直接寫寄存器的效率相差無幾。HAL庫函數(shù)因?yàn)橐櫦罢麄€(gè)STM32系列間的代碼高度兼容與可移植性,代碼相對龐大。對于剛接觸STM32的人來說,非常易于上手做些基本的評估和驗(yàn)證,入門快捷。LL庫的出現(xiàn),是對HAL庫的有力補(bǔ)充。相比HAL庫用戶,LL庫用戶需要對MCU及相應(yīng)外設(shè)有更為細(xì)致的了解。
目前,STM32cubeMX不但支持基于HAL庫的初始化文件的生成,也已支持基于LL庫的初始化文件及工程的生成,對于已經(jīng)比較熟悉STM32應(yīng)用或關(guān)注代碼效率的開發(fā)人員來說,可以優(yōu)先考慮使用LL庫。
順便介紹在STM32CubeMx的圖形化界面下,如何選擇使用HAL庫還是LL庫生成初始化文件及相應(yīng)工程。
在CubeMx界面下,做好各個(gè)外設(shè)的選擇及配置后,在ProjectProject SettingAdvanced Settiing如下圖示界面上,你可以選擇要使用的庫類型:HAL/LL.
另外,偶爾人詢問及LL庫在哪里,其實(shí)LL庫函數(shù)跟HAL庫函數(shù)是在同一目錄下。以STM32F4為例,你下載STM32CubeF4解壓后,在類似如下目錄可以看見HAL函數(shù)和LL函數(shù)庫文件。
。。。DriversSTM32F4xx_HAL_DriverSrc
-
STM32
+關(guān)注
關(guān)注
2270文章
10915瀏覽量
356751 -
庫函數(shù)
+關(guān)注
關(guān)注
0文章
177瀏覽量
33995
原文標(biāo)題:基于不同STM32庫函數(shù)的代碼性能對比
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論