OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 将STM32的标准库编译成lib【图文】

共20条 1/2 1 2 跳转至

将STM32的标准库编译成lib【图文】

高工
2013-07-14 18:14:27    评分


以前一直使用STM32的标准库,需要一步步地将代码加进去,将编译选项设置好,然后再编译整个工程。

这个编译过程是一个相当慢的过程!完全编译大约需要一支烟的时间。每次建立工程都这么编译,是一个相当浪费时间和香烟的过程。

于是,我有了将库编译成lib文件的想法。本博文就是我将STM32F4的标准库编译成lib文件并在工程中使用的过程。

适用对象:

1、熟悉库,不想再看库里边代码

2、有稳定的库,库文件更新不频繁

3、库文件多,每次编译时间长

下面是我将STM32F4的标准库编译成lib并在工程中使用的过程:

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试试。现在编译速度快起来了,点个烟的时间就编译完了


【原发于我的博客,欢迎光临指导:http://www.cnblogs.com/zyqgold/p/3189719.html】 




关键词: STM32          lib    

专家
2013-07-14 22:26:15    评分
2楼

嘿嘿 真心不错。

这个也标志着对C语言的熟悉进入了一个新的水平



高工
2013-07-14 22:35:01    评分
3楼
貌似不用加最后的几行代码也是可以的,在IAR下直接将需要的文件添加进来,设置好编译输出库,也是可以的。。。没试过KEIL,不知道不添加main()会怎样。。。

高工
2013-07-15 00:53:09    评分
4楼
main是另一个工程,试验这个生成的库的。 做库的工程一行代码都没动

高工
2013-07-15 00:53:49    评分
5楼
我说了要当金牌写手的。

高工
2013-07-15 08:35:41    评分
6楼
这样来看,IAR和KEIL的输出库的方法基本就一样了。。。

院士
2013-07-15 11:18:40    评分
7楼
将学习进行到底

高工
2013-07-15 21:04:03    评分
8楼
这样编译速度是明显加快了,但不方便查看驱动源代码

高工
2013-07-15 21:10:12    评分
9楼
有个方法可以继续看源代码。第一个工程完成后,原代码不删除。建立第二个工程时候,将这三个文件夹都拷贝过去。include,out,src,照样能看得。

高工
2013-07-15 22:50:05    评分
10楼

瞻仰一下,学习一下。

下回把sam3s的标准库也这么处理一下。


共20条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]