將STM32的標準庫編譯成lib

摩斯電碼發表於2013-07-20

轉載自:http://www.cnblogs.com/zyqgold/p/3189719.html

 

以前一直使用STM32的標準庫,需要一步步地將程式碼加進去,將編譯選項設定好,然後再編譯整個工程。

這個編譯過程是一個相當慢的過程!完全編譯大約需要一支菸的時間。每次建立工程都這麼編譯,是一個相當浪費時間和香菸的過程。

於是,我有了將庫編譯成lib檔案的想法。本博文就是我將STM32F4的標準庫編譯成lib檔案並在工程中使用的過程。

適用物件:

1、熟悉庫,不想再看庫裡邊程式碼

2、有穩定的庫,庫檔案更新不頻繁

3、庫檔案多,每次編譯時間長

下面是我將STM32F4的標準庫編譯成lib並在工程中使用的過程:

使用工具鏈:MDK4.70A。其實各個工具鏈幾乎是一樣的

1、建立建立lib的工程

2、將庫檔案拷貝到工程目錄:

將庫裡邊目錄\STM32F4xx_StdPeriph_lib v1.0.2\STM32F4xx_StdPeriph_Driver下的inc和src兩個資料夾拷貝到預建立工程的目錄。

我計劃在目錄E:\學習\ARM\庫\stm32f4-2中建立庫。於是我將兩個資料夾拷貝到了這裡。

3、選擇晶片:STM32F407VG

image

4、選擇NO。因為這不是可執行的程式,這裡不需要加入啟動檔案。

image

 

5、建立完工程後,工程結構如圖:

image

6、MDK中點選工具欄上的image設定工程結構,並將庫檔案加入工程:

為了通用,我將庫中所有的C檔案都加入了工程

image

7、完成後MDK下的目錄結構

image

8、MDK下設定輸出選項:

工程選項中設定輸出,選擇輸出lib到目錄E:\學習\ARM\庫\stm32f4-2\lib\:

image

9、設定C語言預編譯巨集和引用目錄:

  因為要使用STM32F4標準庫,預編譯選項設定:USE_STDPERIPH_DRIVER,STM32F4XX

  將剛才拷貝的inc和工程根目錄資料夾加入引用:

image

10、設定完成後:

image

11、將stm32f4xx_conf.h檔案拷貝到工程:

這個檔案需要在標準庫提供的示例工程中找:

我使用的是\STM32F4-Discovery_FW_V1.1.0\Project\Peripheral_Examples\ADC3_DMA\stm32f4xx_conf.h

這個檔案引用了庫檔案中所有的標頭檔案。因為不包含在庫中,我將這個檔案拷貝到E:\學習\ARM\庫\stm32f4-2資料夾。

12、到此,工程設定完成。按F7編譯,經過一支菸的時間即可生成庫的lib

生成完成後,MDK工程中:

image

13、工程輸出目錄:

image

檔案stm32f4lib.lib就是我們生成的lib檔案

14、將庫檔案加入該工程

15、新建工程,我命名成stm32f4use,處理器依舊選擇STM32F407VG。

image

16、這是選擇yes,因為這是一個可執行的工程:

image

17、將標準庫示例工程的\STM32F4-Discovery_FW_V1.1.0\Project\Peripheral_Examples\ADC3_DMA中的system_stm32f4xx.c拷貝到工程目錄(E:\學習\ARM\庫\stm32f4-2)中

18、再次點選選單上的image設定工程目錄結構,將剛才生成的lib庫加入到工程中:

image

19、將示例工程\STM32F4-Discovery_FW_V1.1.0\Project\Peripheral_Examples\ADC3_DMA中的system_stm32f4xx.c拷貝到工程目錄。

20、將main.c和 system_stm32f4xx.c 加入到工程

image

21、完成後的目錄結構:

image

22、加入編譯選項

與上邊生成lib相似,預編譯選項設定:USE_STDPERIPH_DRIVER,STM32F4XX

引用目錄:.\inc;..\stm32f4-2  (這裡的.\inc;..資料夾就是剛才建立庫時候的資料夾)

輸出可執行檔案:

image

23、新增幾行簡單的程式碼

//點亮一個LED
#include <stm32f4xx.h>
#include "stm32f4xx_conf.h"
#include "stm32f4xx_tim.h"

int main()
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
       
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOD,&GPIO_InitStructure);
    GPIO_SetBits(GPIOD,GPIO_Pin_12);

    while(1);
}

24、工程設定完成,按F7試試。現在編譯速度快起來了,點個煙的時間就編譯完了

相關文章