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

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

[复制链接]
STMCU小助手 发布时间:2025-8-27 08:51
1. 前言
0 \: `4 k# Q! G在嵌入式开发中,经常有需要调用第三方库的需求,甚至需要制作自己的静态库。那么如何基于 STM32CubeIDE 来实现呢?本 LAT 以STM32G070的 Nucelo 开发板为例,介绍如何创建一个静态库以及实现调用它的过程。' o7 D0 [0 S& n: q+ C5 Z0 `

* B8 B$ U0 q8 s- \2. 生成静态库
0 r$ s, I9 n" Q( x使用 STM32CubeIDE 可以很轻松的生成一个静态库,只需要将想要打包成库的源文件(.c 文件)和头文件(.h 文件)整理好,这些文件应包含你希望在其他项目中复用的功能代码,例如自定义的驱动程序、算法函数等。! G: i0 R3 D+ d8 g- E

- w& i& D: r/ \7 n# ^

7 t" b9 f  M3 |% R首先,打开 STM32CubeIDE,选择 “File->New->STM32 Project“,按照提示选择目标芯片,如下图所示。
, \: }; y* I5 O# L$ I% U, S
8.png
图1. 静态库工程的目标芯片选择

. Y9 D* m3 E/ p; n: k) L; @
$ O4 Y6 q- i/ I
在设置工程的界面中,按照如下图所示,配置生成静态库的工程。
5 B$ z) i. P5 v! R2 e5 i
9.png
图2. 新建静态库的工程

4 Q3 N# @" V% E: @

- p: O, U7 }- E& Q0 a然后在创建的静态库的工程中,创建头文件(.h 文件),如下图所示。
9 }! V9 e" f2 e* {9 _- o
1 K1 @/ i. e/ t
- @+ R- L- U3 G8 p% t0 {
在 Inc 文件夹下创建“Lib.h”头文件:6 N4 q, u) I: s" }
10.png
图3. 创建头文件
11.png
图4. 创建头文件
$ }4 n2 G7 p3 o( q* [: \
STM32CubeIDE 在生成项目的时候,已经生成了一个 libLib.C 文件,在 libLib.c 源文件中,修改这个 myFunction 函数为你需要实现的功能或者添加更多应用,这里实现了一个计算数值平方的函数,并在 Lib.h 中进行了申明,具体代码如下图所示:
  C+ i! l( y# J& n) u
12.png
图5. Lib.c 源文件代码
14.png
图6. Lib.h 头文件代码
$ a* U$ J3 B( L6 N6 R( k) U* Z

  [0 U7 A3 Y4 P& O当然如果觉得需要,还可以做一些优化操作,比如编译库的时候除去调试信息,可以在工程的属性中(鼠标点击工程名,右击选择“Properties”)添加“-g0”的编译命令,如下图所示:
( ~, _/ w: T9 a+ j; ]
15.png
图7. 去除静态库的调试信息

: e& J, V8 I, ^( H/ ^

/ d/ v8 Y$ Q, W8 I; ^% |& S至此,只需要编译工程即可,然后就可以在静态库工程的“Debug”目录下查看到生成的库文件了:
/ r3 |0 [2 f, o$ W7 H8 c
16.png
图8. 生成的库文件
  a) @: f3 p) O# W' @; s
( I4 g* [3 c4 k& \
这里需要注意,在生成库的时候,STM32CubeIDE 会自动添加“lib”的前缀到输出的库文件名之前,并且默认 STM32CubeIDE 输出的库文件的格式为“.a”的文件,所以工程名为“Lib”,输出的静态库文件名为“libLib.a”。当然如果你不喜欢这个名字,你可以进行修改。( i' I9 |$ v; W+ |7 B3 `. v$ ^

/ ], T4 B& V$ P: w

% Z5 ^7 T, ^1 ~/ B3. 添加静态库, N- l: ^* Y, p/ A. O/ y
现在已经有静态库了,下面是如何将库添加到应用工程中来调用。
; `; c# I( \# B" h" J1 w4 Z0 D2 ?" y9 L
4 ]7 p) \; J' N! c# [
这里依然是打开 STM32CubeIDE,选择 “File->New->STM32 Project“,生成一个名为“APP“的 STM32G070 的基础工程。这步操作仅是创建一个可以成功编译的工程即可。) \$ d( o) r* ]
17.png
图9. APP 应用工程配置
18.png
图10. APP 应用工程的目标芯片选择
0 l2 x# \! G- V

0 H6 }, M/ D9 h& h$ L$ a然后将生成的静态库“libLib.a“ 复制到 APP 应用工程的“Core/Src”文件夹下,将静态库的头文件“Lib.h“复制到“Core/Inc”文件夹下。
7 r6 @, E. c3 H9 }4 |0 Z
3 Z/ r, A" E% {. {+ u1 R1 I

7 o5 D7 E2 j5 n/ H& }还需要分别添加静态库和静态库的路径到工程中,如下所示:0 G9 ], N8 i6 n0 D+ T) x
19.png
图11. 添加静态库到应用工程中

; r0 d" s# k8 `& ~) ?

9 ?( |% h% x, I, {注意:添加静态库时,比如静态库的名称为“libLib.a”,那么添加时的格式为“:libLib.a”。
4 `2 ^8 q# x3 }# i
20.png
图12. 添加静态库的路径到应用工程中

* t4 }* w# @! |* \9 L+ k6 g
8 [* P  E/ Z3 y9 p3 A
好了,现在可以在应用工程中调用静态库里的函数啦。
8 D& h" p5 i" j/ W1 v
4 z6 \2 Q4 m3 Y2 `, P, H
* H& p1 w: s; m$ z3 L
如下图所示,在应用工程的主函数中有两个数组,初始化的时候都为 0,通过 num 数组元素通过赋值,ret 数组元素通过调用库函数来计算。
5 R2 j( y  v3 f# `
21.png
图13. 引用静态库
22.png
图14. 静态库调用测试
6 ?* N# b8 [! N) _9 z0 H" M

; z, V# _) {* N6 n  r通过仿真调试,可以看到的测试结果,如下图所示:! g; m" Y. O7 S  W' J6 V. c
23.png
图15. 静态库测试结果

+ v3 K9 o$ J3 N/ Y
# g5 |$ P9 c) x- J4 M7 k
可以看到 ret 的数组中的元素,均为 num 数组中对应元素的平方数了,说明成功地调用了静态库中的函数了。
1 R& I0 s& `7 B0 S
% _7 V) ^5 j1 l: c

" R1 o# u0 o- P4. 小结
0 \4 r0 M4 f; E/ n3 f1 P好了,上述就是如何生成静态库和如何调用静态库的示例,希望对大家所帮助。$ `* W2 P) |7 n% q) ~7 l
————————————————
+ Y* p. q! n+ @, X
2 h1 S6 h+ x; @" H, `8 d4 [& V- A3 Q/ l' N' [$ K1 I
赞 收藏 评论0 发布时间:2025-8-27 08:51

举报

0个回答

所属标签

相似技术帖

官网相关资源

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