转载自: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

4、选择NO。因为这不是可运行的程序,这里不需要加入启动文件。

5、创建完工程后,工程结构如图:

6、MDK中点击工具栏上的设置工程结构,并将库文件加入工程:

为了通用,我将库中所有的C文件都加入了工程

7、完成后MDK下的目录结构

8、MDK下设置输出选项:

工程选项中设置输出,选择输出lib到目录E:\学习\ARM\库\stm32f4-2\lib\:

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

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

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

10、设置完成后:

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工程中:

13、工程输出目录:

文件stm32f4lib.lib就是我们生成的lib文件

14、将库文件加入该工程

15、新建工程,我命名成stm32f4use,处理器依旧选择STM32F407VG。

16、这是选择yes,因为这是一个可执行的工程:

17、将标准库示例工程的\STM32F4-Discovery_FW_V1.1.0\Project\Peripheral_Examples\ADC3_DMA中的system_stm32f4xx.c拷贝到工程目录(E:\学习\ARM\库\stm32f4-2)中

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

19、将示例工程\STM32F4-Discovery_FW_V1.1.0\Project\Peripheral_Examples\ADC3_DMA中的system_stm32f4xx.c拷贝到工程目录。

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

21、完成后的目录结构:

22、加入编译选项

与上边生成lib相似,预编译选项设置:USE_STDPERIPH_DRIVER,STM32F4XX

引用目录:.\inc;..\stm32f4-2  (这里的.\inc;..文件夹就是刚才建立库时候的文件夹)

输出可执行文件:

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

将STM32的标准库编译成lib相关推荐

  1. STM32的标准库及其使用

    单片机的开发工作量,主要集中在两个地方,一是调通各种外设,二是实现产品功能. 像较高级的语言,比如c++/java/python等.因为将底层操作进行了封装,所以只需要集中关注第二点.事实上,越到后, ...

  2. 【STM32】标准库与HAL库对照学习教程六--位带操作

    [STM32]标准库与HAL库对照学习教程六--位带操作 一.前言 二.准备工作 三.位带介绍 1.位带操作 2.STM32位带及位带别名区域 四.位带区与位带别名区地址转换 五.GPIO的位带操作 ...

  3. 【STM32】标准库与HAL库对照学习教程八--串口通信详解

    [STM32]标准库与HAL库对照学习教程八--串口通信详解 一.前言 二.准备工作 三.通信的基本概念 1.通信方式 2.串行通信与并行通信 (1)串行通信 (2)并行通信 3.异步通信与同步通信 ...

  4. 【STM32】标准库与HAL库对照学习教程十三--软件IIC控制AT24C02

    [STM32]标准库与HAL库对照学习教程十三--软件IIC控制AT24C02 一.前言 二.准备工作 三.AT24C02(EEPROM)介绍 1.AT24C02简介 2.引脚功能 3.设备地址 四. ...

  5. 【STM32】标准库与HAL库对照学习教程外设篇--红外避障传感器

    [STM32]标准库与HAL库对照学习教程外设篇--红外避障传感器 一.前言 二.准备工作 三.红外避障传感器 1.传感器原理说明 2.传感器特性 四.标准库使用红外传感器 1.实验程序 2.实验效果 ...

  6. 【STM32】标准库与HAL库对照学习教程外设篇--超声波测距传感器

    [STM32]标准库与HAL库对照学习教程外设篇--超声波测距传感器 一.前言 二.准备工作 三.超声波测距传感器 1.原理说明 2.使用说明 四.标准库使用传感器 1.实验程序 2.实验效果 五.H ...

  7. 【STM32】标准库-以太网外设-LAN8720A-LWIP-无操作系统

    TCP/IP模型 TCP/IP 只有四个分层,分别为应用层.传输层.网络层以及网络访问层(物理层) 实际上,还有一个 TCP/IP 混合模型,分为五个层.它实际与 TCP/IP四层模型是相通的,只是把 ...

  8. 基于STM32+使用标准库创建工程--手把手纯新手教学

    前言         这个博客的意义就是为了帮助新手快速创建一个基于STM32的工程模板,主要记录从零创建一个全新的STM32F103的项目过程,大部分是自己收集和整理,如有侵权请联系我删除. 本博客 ...

  9. STM32新建标准库工程

    STM32F103ZET6创建一个自己的工程 笔者自己用的是正点原子的精英版的开发板,有很多习惯也养成跟正点原子创工程的习惯. 作者学生党一枚,写的不对的地方,请大家多多包涵,学习永无止境,闻道有先后 ...

最新文章

  1. java enum变量_java enum
  2. Scala 与设计模式(一):Singleton 单例模式
  3. 从零开始学习python-新手学习python-从零开始学习
  4. boost::geometry::index:containst用法的测试程序
  5. aux 参数 linux,Linux下ps aux命令中STAT的参数含义(转)
  6. 内存溢出和内存泄漏的区别,产生原因以及解决方案
  7. ubuntu 中wget (下载)命令用法
  8. 基于zookeeper实现分布式读写锁
  9. linux网络子系统分析(一)——协议栈分层实现综述
  10. CATIA怎么约束快捷键_CATIA超实用快捷键和技巧
  11. NM3200多用表校验仪
  12. 长沙理工大学第十二届ACM大赛【9/12】
  13. 第六章代码的问题——基于DirectX11的3D图形程序设计案例教程——重庆大学出版社
  14. markdown文件转RST文件
  15. 一个emoji表情包处理工具类
  16. Linux:ftrace: 为什么有些函数没有在available_filter_functions
  17. 写一篇关于堆焊耐磨管道(济南韶欣生产的一种堆焊复合耐磨钢管,用于输送渣料承受高磨损和冲击的耐磨管道,还有耐磨弯头和三通等产品),不要用广告违禁词和极限词,不少于500字,并写出标题...
  18. Daily Growing 的歌词
  19. dparsf是什么_老师,我用DPARSF做Slice Timeing时老报错,请问您是什么原因呢?
  20. 画仓鼠大赛 评比开始!

热门文章

  1. iOS计算输入字符数
  2. 第100天:CSS3中animation动画详解
  3. 构建之法之单元测试及设计流程
  4. python urllib的用法实例
  5. 【新产品发布】《EVC8021 RS-232RS-485/422 隔离接口转换器》
  6. wdlinux 安装apc扩展
  7. android 删除文件
  8. 俄罗斯方块新增行算法:不拘一格编程序之二
  9. SOCKS代理工具EarthWorm、sSoks
  10. C语言 将文件内容转换成Dump文件数据格式