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

STM32庫(kù)函數(shù)代碼自動(dòng)生成器V1.3應(yīng)用程序免費(fèi)下載

stm32下標(biāo)準(zhǔn)庫(kù)函數(shù)與HAL庫(kù)函數(shù)編程方式的差異

基于標(biāo)準(zhǔn)庫(kù)函數(shù)與基于HAL庫(kù)函數(shù)的stm32編程方式對(duì)比

STM32F103使用(3.5)庫(kù)函數(shù)新建工程

評(píng)論