你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

经验分享 | STM32CubeIDE 实用技巧之如何生成静态库并添加到工程

[复制链接]
STMCU小助手 发布时间:2025-8-27 08:51
1. 前言
1 X# Z3 N. s3 t, D$ v2 M在嵌入式开发中,经常有需要调用第三方库的需求,甚至需要制作自己的静态库。那么如何基于 STM32CubeIDE 来实现呢?本 LAT 以STM32G070的 Nucelo 开发板为例,介绍如何创建一个静态库以及实现调用它的过程。
" p6 [- g' Z7 e" H& U/ O
) _& r5 {$ ~# r# \2. 生成静态库: {! I# G. p2 `3 [( T' `, n
使用 STM32CubeIDE 可以很轻松的生成一个静态库,只需要将想要打包成库的源文件(.c 文件)和头文件(.h 文件)整理好,这些文件应包含你希望在其他项目中复用的功能代码,例如自定义的驱动程序、算法函数等。# }6 {0 |! F) o, c3 g2 v$ f' g- o) c

; X: C/ z3 _$ k) j
9 X9 A, E9 P& x4 Z  U0 U1 P9 q1 q, U4 `5 u
首先,打开 STM32CubeIDE,选择 “File->New->STM32 Project“,按照提示选择目标芯片,如下图所示。
. K) b% J+ K; W3 \0 Z
8.png
图1. 静态库工程的目标芯片选择
* M; E! h# B0 ~
" n7 E2 `% J' ]4 l9 l! v
在设置工程的界面中,按照如下图所示,配置生成静态库的工程。
' ~) K5 Y# h7 ?/ M( i$ O. F
9.png
图2. 新建静态库的工程
/ K/ s+ q5 R7 C9 H
  _# Y) Z, T5 I6 ^: g
然后在创建的静态库的工程中,创建头文件(.h 文件),如下图所示。( J, r. t* E; z! s' i6 _2 L

$ d" b$ \- `$ u" C8 S8 ^3 ~
% X. \. K5 W, o, I/ [
在 Inc 文件夹下创建“Lib.h”头文件:
$ |8 q2 _3 C6 r8 x$ f
10.png
图3. 创建头文件
11.png
图4. 创建头文件
' m; f% B; {6 `
STM32CubeIDE 在生成项目的时候,已经生成了一个 libLib.C 文件,在 libLib.c 源文件中,修改这个 myFunction 函数为你需要实现的功能或者添加更多应用,这里实现了一个计算数值平方的函数,并在 Lib.h 中进行了申明,具体代码如下图所示:
5 o* ?: H) a9 |9 \8 \: f
12.png
图5. Lib.c 源文件代码
14.png
图6. Lib.h 头文件代码
2 \6 [: U% t6 d, @& a* W! z
% n5 `" E5 I' l' D& k
当然如果觉得需要,还可以做一些优化操作,比如编译库的时候除去调试信息,可以在工程的属性中(鼠标点击工程名,右击选择“Properties”)添加“-g0”的编译命令,如下图所示:
% N# F4 g$ Y3 {
15.png
图7. 去除静态库的调试信息
; _, V, A. ~! b  o& n% }( o

: C/ a# R# B# c2 t& \至此,只需要编译工程即可,然后就可以在静态库工程的“Debug”目录下查看到生成的库文件了:: z0 t/ }% m" ~/ a  M
16.png
图8. 生成的库文件

! o$ t$ J: }" U& @9 b# O3 g  y( Z
+ q6 Z$ t5 D3 C: T# P8 S2 B
这里需要注意,在生成库的时候,STM32CubeIDE 会自动添加“lib”的前缀到输出的库文件名之前,并且默认 STM32CubeIDE 输出的库文件的格式为“.a”的文件,所以工程名为“Lib”,输出的静态库文件名为“libLib.a”。当然如果你不喜欢这个名字,你可以进行修改。; y1 o1 k2 F6 @# m  ^
5 |. q6 d  ?6 |& D2 Q2 B
2 t! z3 ]7 }6 ^3 j$ U7 D
3. 添加静态库. ?1 ?9 `* b! j" l& u9 Q! D" A
现在已经有静态库了,下面是如何将库添加到应用工程中来调用。
% N2 n7 I% l+ ~4 @: U5 M: f$ H. K  S- }, E3 @
) f2 ~3 V1 F6 W5 h9 T
这里依然是打开 STM32CubeIDE,选择 “File->New->STM32 Project“,生成一个名为“APP“的 STM32G070 的基础工程。这步操作仅是创建一个可以成功编译的工程即可。
" z( l. A: {  Z
17.png
图9. APP 应用工程配置
18.png
图10. APP 应用工程的目标芯片选择

/ @5 b& P6 D, a% w5 ]9 q

2 P$ z- _9 u  y- S然后将生成的静态库“libLib.a“ 复制到 APP 应用工程的“Core/Src”文件夹下,将静态库的头文件“Lib.h“复制到“Core/Inc”文件夹下。
- a3 @! |2 q- {; G) ]2 g2 Z8 u6 A. Z5 p  c9 k# y
* U7 [: V$ c' n
还需要分别添加静态库和静态库的路径到工程中,如下所示:
, ^, x, ]% h- W4 j
19.png
图11. 添加静态库到应用工程中
+ Y6 A1 z4 ^' X, ~. P8 J* [) @
7 d0 J+ c- X! L/ z$ Y
注意:添加静态库时,比如静态库的名称为“libLib.a”,那么添加时的格式为“:libLib.a”。
5 U! j9 C: h, J2 `& L' t+ q! W1 t  _
20.png
图12. 添加静态库的路径到应用工程中
7 t! I, q7 e, C/ a

. g5 T* |# x0 R5 T, L好了,现在可以在应用工程中调用静态库里的函数啦。
8 R; T) ]; x% r5 t. P  ?7 h) S
  d% L8 a- c* m
/ @4 N. H' y7 B" ]7 m3 d5 k
如下图所示,在应用工程的主函数中有两个数组,初始化的时候都为 0,通过 num 数组元素通过赋值,ret 数组元素通过调用库函数来计算。5 @  e' X% @0 t, [8 J+ ~
21.png
图13. 引用静态库
22.png
图14. 静态库调用测试

3 ~+ V7 R0 ^. m1 P
% [8 N/ y+ d3 F) g: L: n- B( ^
通过仿真调试,可以看到的测试结果,如下图所示:' V+ d( h$ g2 [# K
23.png
图15. 静态库测试结果
' g9 u/ b8 \' Q

) K6 h# m# g6 E* F可以看到 ret 的数组中的元素,均为 num 数组中对应元素的平方数了,说明成功地调用了静态库中的函数了。! E; c7 E1 b% L& e
6 M/ l$ v2 s. r

* h7 n/ x( L5 r0 H  d4. 小结! U3 u9 u: K  s+ G2 Z1 e/ v
好了,上述就是如何生成静态库和如何调用静态库的示例,希望对大家所帮助。
' @! `8 }. F8 `————————————————
% o  l0 S! `- {5 D/ t( @( y! n  l. G# l" D2 K

' F$ o# j1 x5 D( ^# H6 \" z" [
赞 收藏 评论0 发布时间:2025-8-27 08:51

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版