在使用STM32的固件庫的時(shí)候,需要往工程中添加使用到的功能的對應(yīng)源文件,比如:stm32f10x_gpio.c等等,一個(gè)個(gè)添加很麻煩不說,每次在rebuild的時(shí)候都要編譯這些基本不變的文件.
而通過使用庫則可以解決這些問題,首先只需添加一次庫文件,第二Rebuild的時(shí)候只編譯我們自己寫的源文件
創(chuàng)建庫的過程(IAR中):
新建一個(gè)DLib工程,把stm32f10x_xxx.c這樣的文件和對應(yīng)頭文件全部復(fù)制到工程文件夾下(不復(fù)制也可以),然后添加進(jìn)去,還有
core_cm3.c, misc.c, system_stm32f10x.c,
這些都添加進(jìn)去.(注意:不要添加.h頭文件,這和KEIL是不一樣的,IAR里不用添加頭文件,只需要源文件里#include就行了.)
.s啟動(dòng)文件則可以根據(jù)實(shí)際需要添加,當(dāng)然你也可以每種型號都分別創(chuàng)建一個(gè)對應(yīng)的庫.然后在實(shí)際工程中根據(jù)不同的片子選擇不同的庫.
添加進(jìn)去后,打開工程屬性設(shè)置.
general option:
target屬性框里選擇芯片;
output屬性框里的Output file里選擇Library(如果新建的工程是DLib的話,這里默認(rèn)已經(jīng)是了);
Library Configuration屬性框里的Library選項(xiàng)選擇None; (這里注意哦)
C/C++ compile:
optimizations里可以選擇優(yōu)化等級.
Preprocessor里,additional include directories欄里添加包含文件的路徑.如同一般工程一樣把頭文件的路徑添加進(jìn)去.
OK,設(shè)置如上.編譯后,將會(huì)后成一個(gè).a文件.
以上是Debug模式下生成的庫文件,Release下的設(shè)置同上.兩者間的不同的是Debug選項(xiàng)中默認(rèn)輸出調(diào)試信息,而Release中默認(rèn)沒有.同時(shí)時(shí)我們可以在Release中根據(jù)需要把優(yōu)化等級調(diào)高一點(diǎn).最后,Release模式下生成的庫文件小一點(diǎn).
如何使用庫:
和平時(shí)一樣建一個(gè)工程,或者隨便打開一個(gè)你自己的STM32工程.然后添加庫,兩種方法可以添加庫:
1.可以直接像添加源文件一樣,在工程中右鍵->add files,然后添加.a文件.
2.右鍵屬性,在Linker選項(xiàng)中的Library選項(xiàng)卡中的additional
libraries:中添加.而且可以在Debug屬性中添加Debug模式產(chǎn)生的庫,release中添加release模式生成的庫.需要注意的是不
能只添加路徑,文件名也要寫上. 比如:E:/IAR_LIB/Stm32/stm32_d.a
OK,這時(shí)你就可以把像stm32f10x_gpio.c這樣的文件從工程中Remove了.
(使用庫)和(不使用庫手動(dòng)添加stm32f10x_gpio.c)之間,在實(shí)際工程中,最終生成的可執(zhí)行文件的大小是一樣的.
最后,在實(shí)際工程中:
只需將stm32f10x_conf.h, stm32f10x_it.h,
stm32f10x_it.c復(fù)制到工程文件夾,然后把stm32f10x_it.c添加進(jìn)工程就行了 (當(dāng)然,前面已經(jīng)說過,無論是在ARM工程,還是
庫工程中,IAR都不需要添加頭文件,添加了反而會(huì)編譯出錯(cuò),只需要源文件中#include)
另外上述三文件最好不要?jiǎng)?chuàng)建成庫,因?yàn)樗鼈冊诓煌墓こ滔露际遣灰粯拥?這個(gè)就不用我說了吧. :)
上述三文件在STM32庫中的STM32F10x_StdPeriph_Lib_V3.3.0/Project/STM32F10x_StdPeriph_Template中有,當(dāng)然例子中也有,經(jīng)常有人找不到這三個(gè)文件在哪.... |