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

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

[复制链接]
STMCU小助手 发布时间:2025-8-27 08:51
1. 前言7 d. M) y2 ]9 p" z  S& Y* o) T
在嵌入式开发中,经常有需要调用第三方库的需求,甚至需要制作自己的静态库。那么如何基于 STM32CubeIDE 来实现呢?本 LAT 以STM32G070的 Nucelo 开发板为例,介绍如何创建一个静态库以及实现调用它的过程。
, l( y) F) ?, w. y, \! s
% I  h' F; ~5 {, v0 p2. 生成静态库7 E1 i* o1 R. Y% U
使用 STM32CubeIDE 可以很轻松的生成一个静态库,只需要将想要打包成库的源文件(.c 文件)和头文件(.h 文件)整理好,这些文件应包含你希望在其他项目中复用的功能代码,例如自定义的驱动程序、算法函数等。6 ?% I+ Y! \3 ?0 l& U5 G
6 f' }. P$ o& ?: g1 L$ ~3 l

: `# h1 F, |+ V首先,打开 STM32CubeIDE,选择 “File->New->STM32 Project“,按照提示选择目标芯片,如下图所示。
& E. S5 O; M' u, p6 c- v& A4 ]% `( E$ L
8.png
图1. 静态库工程的目标芯片选择

$ D: e7 W+ E, t. y4 w% s

9 |6 M$ ~! l; l% V3 E' N' M在设置工程的界面中,按照如下图所示,配置生成静态库的工程。3 u) r% l2 y# l& A! l6 p$ O8 J! b
9.png
图2. 新建静态库的工程
8 H6 ^' W: B' Q+ p3 ]' Y) h
) J3 A2 e* e& c- T% b# P8 v
然后在创建的静态库的工程中,创建头文件(.h 文件),如下图所示。9 g; T% h- ]) @5 a7 r: _8 ^
9 H2 _' L# m" ?6 r; G( G2 r+ P
* \# g# G9 F6 q$ l0 M8 _. \
在 Inc 文件夹下创建“Lib.h”头文件:, ]) {1 ?$ g  w
10.png
图3. 创建头文件
11.png
图4. 创建头文件
' j" h/ Z' L! w8 k$ i. }
STM32CubeIDE 在生成项目的时候,已经生成了一个 libLib.C 文件,在 libLib.c 源文件中,修改这个 myFunction 函数为你需要实现的功能或者添加更多应用,这里实现了一个计算数值平方的函数,并在 Lib.h 中进行了申明,具体代码如下图所示:; E3 L! Q8 @- M
12.png
图5. Lib.c 源文件代码
14.png
图6. Lib.h 头文件代码
* Z+ z! w, P! o+ m

" P/ J; {3 T7 w. V( a/ m' E当然如果觉得需要,还可以做一些优化操作,比如编译库的时候除去调试信息,可以在工程的属性中(鼠标点击工程名,右击选择“Properties”)添加“-g0”的编译命令,如下图所示:8 p6 ]0 i- a: m2 t0 g
15.png
图7. 去除静态库的调试信息

# u5 I3 O/ l3 k* ]0 x

% w  L  b5 ~( l7 B' I& D至此,只需要编译工程即可,然后就可以在静态库工程的“Debug”目录下查看到生成的库文件了:
; y( ]$ Q5 u" i' H
16.png
图8. 生成的库文件
- x1 m" d2 C* w$ _

* G# u5 L# ?1 _+ p这里需要注意,在生成库的时候,STM32CubeIDE 会自动添加“lib”的前缀到输出的库文件名之前,并且默认 STM32CubeIDE 输出的库文件的格式为“.a”的文件,所以工程名为“Lib”,输出的静态库文件名为“libLib.a”。当然如果你不喜欢这个名字,你可以进行修改。
7 k5 n0 W1 z6 M6 D" |
7 g+ j" l( ^, e1 E

$ H: A3 o; J: d! h) N- n) V3. 添加静态库5 {+ F& h1 k) g
现在已经有静态库了,下面是如何将库添加到应用工程中来调用。
4 ^: c4 B. M/ f0 Q; m: t+ u: c. f# g1 N
- a- w6 H- |+ X' K) z# M5 G8 e
这里依然是打开 STM32CubeIDE,选择 “File->New->STM32 Project“,生成一个名为“APP“的 STM32G070 的基础工程。这步操作仅是创建一个可以成功编译的工程即可。
. k' b# i; j0 k  _, i5 N) p8 k' o# r
17.png
图9. APP 应用工程配置
18.png
图10. APP 应用工程的目标芯片选择

2 m. u. u1 s' Z+ C

0 t0 j$ _  y* c/ ]& ^7 h然后将生成的静态库“libLib.a“ 复制到 APP 应用工程的“Core/Src”文件夹下,将静态库的头文件“Lib.h“复制到“Core/Inc”文件夹下。
$ H; c# F, Y1 O. y1 i' e+ r$ B( |! m

4 u& R1 `, L9 E  v* o& i( a  v还需要分别添加静态库和静态库的路径到工程中,如下所示:
0 p: p! ~' z0 @
19.png
图11. 添加静态库到应用工程中
0 U$ o* t1 \3 y& _) n8 Y9 q# p
1 I1 p, x& X! N' ]
注意:添加静态库时,比如静态库的名称为“libLib.a”,那么添加时的格式为“:libLib.a”。9 t* E, o* S. ?/ j0 ~9 Z
20.png
图12. 添加静态库的路径到应用工程中
: W7 S- u$ i0 ]" E" _; F
5 c6 l7 W* ?2 w' N, c! q
好了,现在可以在应用工程中调用静态库里的函数啦。4 L! ]9 e* T( r1 y

; u" V5 `. m# T$ f/ d# ?0 p: i
& X+ R3 T3 b, r6 w+ M
如下图所示,在应用工程的主函数中有两个数组,初始化的时候都为 0,通过 num 数组元素通过赋值,ret 数组元素通过调用库函数来计算。
; ?! T6 O: K% e: X+ D1 w
21.png
图13. 引用静态库
22.png
图14. 静态库调用测试
% @: W  d4 }+ U! C+ {+ Y

( Y6 O" ^- a5 C$ n通过仿真调试,可以看到的测试结果,如下图所示:
# D4 Y' C. v! S) k. \/ f- t! M
23.png
图15. 静态库测试结果
4 F' e% ]( Y5 B9 I7 D$ ]
% h' w7 a& g% ~% z1 ~. i! F
可以看到 ret 的数组中的元素,均为 num 数组中对应元素的平方数了,说明成功地调用了静态库中的函数了。: o2 C; ]) [- j( ^8 j3 Q
4 k2 l) S6 b6 Y( W

- }9 ~) r0 ~8 O8 d4. 小结
8 i" R' ]/ I& o5 F0 Z! t好了,上述就是如何生成静态库和如何调用静态库的示例,希望对大家所帮助。
# V% [" E: i' v7 S, G3 R* Y, r- a9 X2 B————————————————
' n+ s# w  X2 C7 y# m5 e# n# A
# Y) ^# o' L  ]
5 i* `/ V. H  }4 q% s9 q  R4 B
赞 收藏 评论0 发布时间:2025-8-27 08:51

举报

0个回答

所属标签

相似技术帖

官网相关资源

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