如何使用keil5将stm32的hal库编译成lib文件——F1版本
hal库中keil5中编译的速度是比较慢的,相同情况下,每次都要编译的时候,比标准库是要慢很多的,因此就hal库编译成lib文件是一种加快编译速度的方法,当然也有其自身的缺点。
一、步骤
1、使用cubemx4.27做一个简单的系统,clock、rcc、sys、swd等配置好,其他可以不用配置。这里我使用了freertos,因此sys使用了tim6,并添加了swo的功能。

2、生成keil工程
3、去掉不相关的文件,如下图所示

4、修改stm32f1xx_hal_conf.h文件,因为你在其他工程中,你将用到很多外设比如gpio、usart等等库文件,而你上面生成的没有使用任何外设,因此stm32f1xx_hal_conf.h文件很多宏定义是关掉的,这里把所有外设都打开(除了#define HAL_EXTI_MODULE_ENABLED)这个外部中断在4.27的f1库(1.6.1)中是没有的,这个需要注意下,否则编译无法生成lib文件的。
下图罗列了部分宏定义

5、在output选项中,选中lib输出文件,编译即可生成lib文件,lib比较大,我的是20MB左右。

6、然后在另外的工程中,去掉hal库文件,添加lib文件,注意将lib文件放到src目录即可,这样可以代替hal的源文件。
7、编译后通过即可。虽然lib文件比较大,但是最后生成的hex文件并不大的,只是把相关用到的函数包含到keil工程中的,这个可以放心使用。

二、优缺点
优点:
加快编译速度。文件半保密。
缺点:
调试的时候,是无法进入hal文件的,这样底层知识就碰得少了。
总结:
lib文件可以加速编译速度,而且是静态文件,而且不担心代码被修改。稳定性是比较高的。其实可以作为半保密的文件,不给其他人看源代码,这样给别人代码,也不担心破解。但是调试的时候看不到源文件了,bug定位比较难,因此适合于调试成熟后使用。
如何使用keil5将stm32的hal库编译成lib文件——F1版本的更多相关文章
- 将STM32的标准库编译成lib使用【图文】
以前一直使用STM32的标准库,需要一步步地将代码加进去,将编译选项设置好,然后再编译整个工程. 这个编译过程是一个相当慢的过程!完全编译大约需要一支烟的时间.每次建立工程都这么编译,是一个相当浪费时 ...
- 将STM32的标准库编译成lib
转载自:http://www.cnblogs.com/zyqgold/p/3189719.html 以前一直使用STM32的标准库,需要一步步地将代码加进去,将编译选项设置好,然后再编译整个工程. 这 ...
- 使用MDK将STM32的标准库编译成lib使用
1 .使用MDK将STM32的标准库编译成lib使用[图文] http://www.cnblogs.com/zyqgold/p/3189719.html
- 转载:将STM32的标准库编译成lib使用【图文】
from:http://www.cnblogs.com/zyqgold/p/3189719.html 百度上边也有不少关于lib文件的文章,恰巧看到该博文,感觉该博文的条理清晰,步骤明确,故复制到这个 ...
- STM32 之 HAL库(固件库) _
1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...
- STM32 之 HAL库(固件库)
1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...
- Golang调用windows下的dll动态库中的函数 Golang 编译成 DLL 文件
Golang调用windows下的dll动态库中的函数 package main import ( "fmt" "syscall" "time&quo ...
- (4)STM32使用HAL库实现串口通讯——理论讲解
一.查询模式 1. 二.中断模式 1.中断接收. 1.1先看中断接收的流程(以 USART2 为例) 在启动文件中找到中断向量 USART2_IRQHandler 找到USART2_IRQHandle ...
- (2)STM32使用HAL库操作外部中断——理论讲解
1.中断触发过程 对主程序压栈--把中断服务函数的地址写入到程序计数器(PC)--执行中断服务函数 2.中断向量表 中断服务函数的地址在STM32的手册上的中断向量表中(如下是一部分): 如上表所示, ...
随机推荐
- mysql求中位数
实例1: SET @ID = 0; SELECT AVG(loan_amount) from ( SELECT @ID:=@ID+1 as ID, loan_amount FROM table_x ...
- Mac Mini(late 2014) 添加NVMe固态组Fusion Drive
我买的是Mac Mini(late 2014)中配,内置5400转1T机械硬盘,该配置即使到了2019年安装macOS Mojave系统依旧是够用的,但硬盘严重拖累了运行的速度.之前考虑到更换内置sa ...
- Java爬虫https网页内容报错SSLHandshakeException信任(忽略)所有SSL证书
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building f ...
- .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
原文:.NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖 我们有多种工具可以将程序集合并成为一个.比如 ILMerge.Mono.Merge.前者不可定制.运 ...
- Maven打包时集成依赖项或复制依赖项到指定目录
1.集成依赖项,最后生成的jar文件包含所有依赖: <build> <plugins> <plugin> <artifactId>maven-assem ...
- Oracle 逻辑存储结构
一.总述 逻辑存储结构是 Oracle 数据库存储结构的核心内容,对 Oracle 数据库的所有操作都会涉及逻辑存储结构.逻辑存储结构是从逻辑的角度分析数据库的组成,是对数据存储结构在逻辑概念上的划分 ...
- FFmpeg参考资料合集(会一直更新)
让你的软件飞起来:RGB转为YUV 朋友曾经给我推荐了一个有关代码优化的pdf文档<让你的软件飞起来>,看完之后,感受颇深.为了推广其,同时也为了自己加深印象,故将其总结为word 文档. ...
- 继 首次使用DoNetCore EFCore DbFirst 更新数据实体
//EFCore DB First 步骤 //第一步:Install-Package Microsoft.EntityFrameworkCore.SqlServer -version 2.1.1 // ...
- restframework中根据请求的类型修改序列化类
只要在视图中重写get_serializer_class方法就可以,用if对请求的类型进行判断 def get_serializer_class(self): if self.action == &q ...
- sql 语句中关于 not in 和 null 的问题简单解析
理解这个问题,只需要记住一个逻辑: null 和任何值比较运算都返回的 false Ex: SQL01: SELECT * FROM userinfo WHERE age NOT IN() SQL01 ...