• 将STM32的标准库编译成lib


    转载自: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.2STM32F4xx_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-2lib:

    image

    9、设置C语言预编译宏和引用目录:

      因为要使用STM32F4标准库,预编译选项设置:USE_STDPERIPH_DRIVER,STM32F4XX

      将刚才拷贝的inc和工程根目录文件夹加入引用:

    image

    10、设置完成后:

    image

    11、将stm32f4xx_conf.h文件拷贝到工程:

    这个文件需要在标准库提供的示例工程中找:

    我使用的是STM32F4-Discovery_FW_V1.1.0ProjectPeripheral_ExamplesADC3_DMAstm32f4xx_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.0ProjectPeripheral_ExamplesADC3_DMA中的system_stm32f4xx.c拷贝到工程目录(E:学习ARM库stm32f4-2)中

    18、再次点击菜单上的image设置工程目录结构,将刚才生成的lib库加入到工程中:

    image

    19、将示例工程STM32F4-Discovery_FW_V1.1.0ProjectPeripheral_ExamplesADC3_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试试。现在编译速度快起来了,点个烟的时间就编译完了

  • 相关阅读:
    Spring定时任务注解实现定时清空指定文件夹下的文件
    设计模式之单例模式
    在cmd下使用imp命令导入oracle的dmp文件报错ORA-02304
    多态是什么干嘛的
    qt编辑器的问题
    qt中文格式GBK.UTF-8,unicode 之间的转换
    mysql 安装及设置
    mysql触发器
    转载 java开发基础 https://blog.csdn.net/jiangjiewudi/article/details/9565749
    测试 转载
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/3203054.html
Copyright © 2020-2023  润新知