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

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

[复制链接]
STMCU小助手 发布时间:2025-8-27 08:51
1. 前言
( _  O6 i  R0 Y' Q- s: L在嵌入式开发中,经常有需要调用第三方库的需求,甚至需要制作自己的静态库。那么如何基于 STM32CubeIDE 来实现呢?本 LAT 以STM32G070的 Nucelo 开发板为例,介绍如何创建一个静态库以及实现调用它的过程。% V+ ~- K: H4 i3 d3 i

' A6 l6 s3 C+ n/ T( H7 C2. 生成静态库( |' ^) _: G0 T% R2 |- P
使用 STM32CubeIDE 可以很轻松的生成一个静态库,只需要将想要打包成库的源文件(.c 文件)和头文件(.h 文件)整理好,这些文件应包含你希望在其他项目中复用的功能代码,例如自定义的驱动程序、算法函数等。5 x1 O" L- |! |2 }5 D

3 `* e- _; B& Q: b3 Q
! i" X- ^! p5 @" z& C9 h9 O
首先,打开 STM32CubeIDE,选择 “File->New->STM32 Project“,按照提示选择目标芯片,如下图所示。
5 U4 H6 `5 u$ o4 o
8.png
图1. 静态库工程的目标芯片选择

8 p8 A7 ]# L1 P
' ^- c7 q$ x) N9 Z6 p/ j* \8 O# {! W+ e" N
在设置工程的界面中,按照如下图所示,配置生成静态库的工程。
! k: |/ e  Y; h% h7 I+ L0 j
9.png
图2. 新建静态库的工程
. u/ s. Y, U8 V

0 T! A1 y4 \6 J* l2 d( G* e' @然后在创建的静态库的工程中,创建头文件(.h 文件),如下图所示。
) l. }* p! u1 Z& P' \& v4 h0 I& e( }0 V' i* a/ M

' c$ y: r9 J! `7 _- S. C在 Inc 文件夹下创建“Lib.h”头文件:
$ o% O+ P) h% W; y( G
10.png
图3. 创建头文件
11.png
图4. 创建头文件

6 v; X* k; C" W/ @
STM32CubeIDE 在生成项目的时候,已经生成了一个 libLib.C 文件,在 libLib.c 源文件中,修改这个 myFunction 函数为你需要实现的功能或者添加更多应用,这里实现了一个计算数值平方的函数,并在 Lib.h 中进行了申明,具体代码如下图所示:
3 d! `  \1 i7 Z. D" t
12.png
图5. Lib.c 源文件代码
14.png
图6. Lib.h 头文件代码
4 }" l: Y4 |5 b1 i
; j- p, l# s4 U1 w9 l, g* N' h( t- n
当然如果觉得需要,还可以做一些优化操作,比如编译库的时候除去调试信息,可以在工程的属性中(鼠标点击工程名,右击选择“Properties”)添加“-g0”的编译命令,如下图所示:
3 I! k. m; S( B% P
15.png
图7. 去除静态库的调试信息

- V  Q+ k8 ~' s+ u) Q: Q
" s6 ?5 \$ Y# j+ H6 c9 m6 o
至此,只需要编译工程即可,然后就可以在静态库工程的“Debug”目录下查看到生成的库文件了:% [9 w; X$ x) L" K1 g; f
16.png
图8. 生成的库文件
/ {5 |/ O. b; K+ t, T% g6 c/ I3 R

) T4 ~/ J* i/ n1 S8 m这里需要注意,在生成库的时候,STM32CubeIDE 会自动添加“lib”的前缀到输出的库文件名之前,并且默认 STM32CubeIDE 输出的库文件的格式为“.a”的文件,所以工程名为“Lib”,输出的静态库文件名为“libLib.a”。当然如果你不喜欢这个名字,你可以进行修改。, m# }  V8 f% X9 _4 N0 F( ]! T1 N9 S0 S

. ~, j1 S; q8 @; N- c
' j" y/ T* q; S4 N1 v4 K
3. 添加静态库
; Y" m6 i4 x: ~' H5 R现在已经有静态库了,下面是如何将库添加到应用工程中来调用。9 r3 r# D3 [1 E$ J9 g8 |

, w4 L* u. T6 o, n4 ?
4 ]0 R+ k, Z/ T; c4 `: L
这里依然是打开 STM32CubeIDE,选择 “File->New->STM32 Project“,生成一个名为“APP“的 STM32G070 的基础工程。这步操作仅是创建一个可以成功编译的工程即可。
' X8 f8 u- P0 P, ]5 Y* z  L/ N, O. [
17.png
图9. APP 应用工程配置
18.png
图10. APP 应用工程的目标芯片选择

0 i9 u) s" r7 u1 h' P4 R& O
* m$ @- {/ X# H' w: v
然后将生成的静态库“libLib.a“ 复制到 APP 应用工程的“Core/Src”文件夹下,将静态库的头文件“Lib.h“复制到“Core/Inc”文件夹下。2 f- `. P0 t2 I& S5 j& l

3 E1 G! _; h9 W4 q, ]" y. W3 D
6 q& B  o1 P* X* c3 w; t5 m0 e
还需要分别添加静态库和静态库的路径到工程中,如下所示:
8 S' W4 y. K) C$ B2 d& v! V" s
19.png
图11. 添加静态库到应用工程中
% k1 r  f4 X/ h1 y/ ~. D; k* ^
: ~' p1 ?; ]- p
注意:添加静态库时,比如静态库的名称为“libLib.a”,那么添加时的格式为“:libLib.a”。! u6 Y% W) n, S% q/ P
20.png
图12. 添加静态库的路径到应用工程中

, p/ L' P: Q# k; x4 h7 T/ g, u1 V4 J( J
. S! Y5 G9 J1 i! b
好了,现在可以在应用工程中调用静态库里的函数啦。- b  i8 K7 n# K9 `7 P- C. r
$ L  k( C) X, Z: O8 ]- F7 V

9 A: {& u4 L( S4 \6 a1 L如下图所示,在应用工程的主函数中有两个数组,初始化的时候都为 0,通过 num 数组元素通过赋值,ret 数组元素通过调用库函数来计算。
! L4 p; t: B' Z' Q4 V6 h! Z+ C0 h
21.png
图13. 引用静态库
22.png
图14. 静态库调用测试
6 N+ S! l3 r  `5 p" ~+ G3 s

0 m3 R* b  v% O5 m0 B& Q通过仿真调试,可以看到的测试结果,如下图所示:7 E, J/ O" O* }- y
23.png
图15. 静态库测试结果
- {, s1 G9 R/ D

) B4 q3 O6 Z8 m8 P  j可以看到 ret 的数组中的元素,均为 num 数组中对应元素的平方数了,说明成功地调用了静态库中的函数了。
  o( [3 J% O* M, }8 e3 d+ x( B, t- E: `/ u' E, i% q; T* Y
, \! m0 D# n0 T* }9 j: J# V
4. 小结. B0 l7 `, P  l' d% d
好了,上述就是如何生成静态库和如何调用静态库的示例,希望对大家所帮助。
; k% _; K; @2 F0 q3 E————————————————
  d+ ?( v1 e5 E8 q  i  S! J0 c) h- t& q

/ q# E5 _1 L( H* K: q+ q
赞 收藏 评论0 发布时间:2025-8-27 08:51

举报

0个回答

所属标签

相似技术帖

官网相关资源

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