历史上的今天
返回首页

历史上的今天

今天是:2024年10月05日(星期六)

正在发生

2018年10月05日 | STM32标准库编译成lib库文件

2018-10-05 来源:eefocus

目录:

1、建立创建lib的工程

2、将库文件拷贝到工程目录

3、选择芯片:STM32F407VG

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

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

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

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

8、MDK下设置输出选项

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

10、设置完成后

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

12、到此,工程设置完成。按F7编译,经过一支烟的时间即可生成库的lib

13、工程输出目录

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、再次点击菜单上的image设置工程目录结构,将刚才生成的lib库加入到工程中

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

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

21、完成后的目录结构

22、加入编译选项

23、添加几行简单的代码

24、工程设置完成


--------------------------------------------------------------------------------------------------------------------------------

以前一直使用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

STM32标准库编译成lib库文件

------------------------------------

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

STM32标准库编译成lib库文件

 ------------------------------------

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

STM32标准库编译成lib库文件
------------------------------------

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

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

STM32标准库编译成lib库文件
------------------------------------

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

STM32标准库编译成lib库文件
------------------------------------

8、MDK下设置输出选项:

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

STM32标准库编译成lib库文件
------------------------------------

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

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

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

STM32标准库编译成lib库文件
------------------------------------

10、设置完成后:

STM32标准库编译成lib库文件
------------------------------------

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

STM32标准库编译成lib库文件
------------------------------------

13、工程输出目录:

STM32标准库编译成lib库文件

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

------------------------------------

14、将库文件加入该工程

------------------------------------

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

STM32标准库编译成lib库文件
------------------------------------

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

STM32标准库编译成lib库文件
------------------------------------

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

------------------------------------

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

STM32标准库编译成lib库文件
------------------------------------

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

------------------------------------

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

STM32标准库编译成lib库文件
------------------------------------

21、完成后的目录结构:

STM32标准库编译成lib库文件
------------------------------------

22、加入编译选项

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

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

3)输出可执行文件:

STM32标准库编译成lib库文件
------------------------------------

23、添加几行简单的代码

//点亮一个LED
#include
#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试试。现在编译速度快起来了,点个烟的时间就编译完了,www.cnblogs.com/zyqgold/p/3189719.html。

--------------------------------------------------------------------------------------------------------------------------------


推荐阅读

史海拾趣

Alpha Wire公司的发展小趣事

Alpha Wire公司是一家在电子行业中知名的制造商,专注于生产高性能电线、电缆和线束。虽然我无法提供准确的发展故事,但我可以向你介绍一些关于Alpha Wire公司的背景和其在行业中的重要性。

  1. 公司成立:Alpha Wire公司成立于1922年,总部位于美国新泽西州。创始人是一位名叫韦尔纳·布雷德的工程师,他创立了Alpha Wire公司,旨在为不同领域的电子设备提供高质量的电线和电缆。

  2. 技术创新:Alpha Wire公司在其发展历程中一直致力于技术创新和产品质量的提升。公司不断投资于研发,并采用最新的材料和生产工艺,以确保其产品在性能和可靠性方面处于行业领先地位。

  3. 产品线扩展:随着时间的推移,Alpha Wire公司不断扩展其产品线,以满足不断变化的市场需求。除了标准的电线和电缆产品外,公司还开发了各种特种电线和线束,如耐高温、耐化学腐蚀、防火等特性的产品,以满足不同行业和应用的需求。

  4. 全球市场拓展:Alpha Wire公司在其发展过程中不断拓展其市场份额,通过建立全球分销网络和合作伙伴关系,将其产品销往世界各地。公司不仅在北美市场占据重要地位,还在欧洲、亚洲和其他地区建立了业务和生产基地,以更好地服务全球客户。

  5. 质量和可靠性:作为一家具有悠久历史的公司,Alpha Wire始终将质量和可靠性视为其产品的核心竞争力。公司严格遵循国际标准和质量管理体系,对原材料进行严格筛选和检验,并采用先进的生产工艺和严格的质量控制程序,以确保产品的稳定性和一致性。

以上是关于Alpha Wire公司的一些基本信息,虽然我无法提供具体的发展故事,但希望这些信息能够帮助你了解该公司在电子行业中的重要性和影响力。

AR RF/Microwave Instrumentation公司的发展小趣事

AR RF/Microwave Instrumentation的创立源于对射频和微波技术的深入研究和理解。公司创始人在行业内具有丰富的经验,他们看到了这一领域的巨大潜力,并决定成立一家公司来专门研发和生产相关的仪器设备。起初,公司规模较小,但凭借高质量的产品和专业的服务,逐渐在行业内赢得了声誉。

Bliley Technologies Inc公司的发展小趣事

Bliley Technologies Inc.的历史可以追溯到1930年,当时它作为Bliley压电公司成立,专注于为业余无线电市场生产石英晶体。石英晶体的精确频率控制特性使其成为无线电通信领域的理想选择。随着技术的不断进步和市场需求的扩大,Bliley很快发现其产品的潜力远不止于此。到了20世纪30年代中期,Bliley的客户和产品范围迅速扩展到新兴的军事和商业通信领域,公司也因此更名为Bliley Electric Company。这一转变标志着Bliley从一家小型压电公司成长为晶振行业的佼佼者。

Advance Tapes公司的发展小趣事

随着电子行业的快速发展,对胶带产品的性能要求也越来越高。Advance Tapes公司意识到,只有不断创新才能在激烈的市场竞争中立于不败之地。于是,公司加大了对研发的投入,引进了一批高素质的研发人才,并与多家高校和研究机构建立了合作关系。经过不懈努力,Advance Tapes成功开发出了一系列具有高性能、高可靠性的胶带产品,得到了广大客户的认可。

Caddell-Burns Manufacturing公司的发展小趣事

在竞争激烈的电子行业中,质量管理是企业生存和发展的关键。Caddell-Burns Manufacturing公司深知这一点,因此他们始终将质量放在首位。公司建立了严格的质量管理体系,从原材料采购到产品生产、检验、包装等各个环节都进行严格把关。同时,公司还定期对员工进行质量培训,提高他们的质量意识和操作技能。这些措施确保了公司产品的稳定性和可靠性,赢得了客户的信赖。

Hamlin ( Littelfuse )公司的发展小趣事

为了进一步扩大市场份额,Caddell-Burns Manufacturing公司开始积极寻求国际合作。他们与多个国家的电子制造商建立了稳定的合作关系,将产品出口到世界各地。同时,公司还参加了多个国际电子展会,展示了公司的最新产品和技术成果,吸引了众多客户的关注。这些举措不仅提升了公司的国际知名度,也为公司的长期发展奠定了坚实基础。

问答坊 | AI 解惑

求:电子设计大赛中音频信号分析仪的分析报告

本帖最后由 paulhyde 于 2014-9-15 09:29 编辑 rt,老师布置的任务,高手麻烦给讲下思路,有分析报告或作品的更好。谢谢大家。  …

查看全部问答>

在VS2005里,怎么用C#调用WinCE生成的dll?

在VS2005里,用C#怎么调用WinCE生成的dll? 用VS2005直接添加引用不行,总是提示“未能添加对‘sapi.dll’的引用”。 请教各位?…

查看全部问答>

pocket pc 2003总是识别windows mobile5.0的CAB包???

我制作了两个CAB包,分别是*.armv4i.CAB和*.armv4.CAB,并制作了一个EXE包。在windows mobile5.0上安装时,重启后可以正常使用。但在Pocket pc 2003上安装时,却总是使用*.armv4i.CAB在安装。请教高手,这是什么原因?是不是因为Pocket pc2003无法 ...…

查看全部问答>

USB总线下层过滤驱动,如何去读U盘物理扇区?

做一个USB总线的下层过滤驱动,我用构造srb的方式去去读U盘物理扇区,在SCSI的派遣函数和IRP_MN_START_DEVICE里都没有读取到U盘物理扇区, 但是相同的代码在disk的下层过滤驱动里可以读取到U盘的物理扇区, 所以我想知道USB总线的下层过滤驱动如 ...…

查看全部问答>

写头文件时用到宏定义是在.c文件还是.h文件中定义

刚学写头文件,函数在.c中,声明在.h中。.c文件中用到的了宏定义,这个宏定义是在.C还是在.h文件中定义?我在.c文件中定义了不行,在.h 文件中定义才可以。这样写对吗?…

查看全部问答>

cc2430的下载器怎么做?

小生刚接触cc2430,不是很懂,我想做个cc2430的节点模块出来玩玩,但是在网上查了一下,得用一个仿真器下载程序,我想做一个usb口,直接下程序到芯片上,不知道可不可行,望高手指点。希望有原理图。…

查看全部问答>

IIC通讯从设备不返回答信号

用430I/O口模拟IIC通讯,BQ20Z75作从设备,模拟总线的程序之前实践过已确保正确,现在只是简单地调用总线驱动从BQ20Z75的电压寄存器中读出数据,可是总是失败。在示波器观察到,430发送从设备地址后,得不到应答信号。再仔细看,每次发送完从设备地 ...…

查看全部问答>

请帮忙看看这个升压电路

菜鸟求助这个电路如何实现升压的? DC9V升压至DC500V 谢谢…

查看全部问答>

MSP430汇编问题!!!

本人将MSP430F1611内部机器码程序读出后,通过反编译转换为汇编代码,发现其中有若干行跳转指令跳转到了0x3d4c等0x3xxx的地址,根据430f1611的地址空间分布,0X3XXX不是程序代码空间,也就是说不是该地址不是指令,因为代码空间是从0x4000开始的, ...…

查看全部问答>

【高手进】程序下载不进去

我用的是win8.1,之前为了安装USB-MSP430UIF驱动特意在虚拟机下运行XP,再运行CCS5.1。第一次下载,提示我要升级firmware,然后出现如下画面,接着一直没反应。百度了下,有篇文章说貌似是虚拟机下运行的关系,被这玩意儿搞得头都大了。求高手支招 ...…

查看全部问答>