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

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

[复制链接]
STMCU小助手 发布时间:2025-8-27 08:51
1. 前言' A( {# _' B) `6 H" d; y6 s" ?
在嵌入式开发中,经常有需要调用第三方库的需求,甚至需要制作自己的静态库。那么如何基于 STM32CubeIDE 来实现呢?本 LAT 以STM32G070的 Nucelo 开发板为例,介绍如何创建一个静态库以及实现调用它的过程。
6 N3 B% b8 g' z. J. t# Q
2 r7 j/ U" ~7 B7 R/ C1 z/ v2. 生成静态库  K& d5 m1 V* s( l
使用 STM32CubeIDE 可以很轻松的生成一个静态库,只需要将想要打包成库的源文件(.c 文件)和头文件(.h 文件)整理好,这些文件应包含你希望在其他项目中复用的功能代码,例如自定义的驱动程序、算法函数等。; H2 Q6 O* p7 i; U) o& ~, A& g7 ^& C
! p# \+ \& j" Y5 ^3 S- M  o3 q

3 F0 s# l/ q" X: v0 A1 s首先,打开 STM32CubeIDE,选择 “File->New->STM32 Project“,按照提示选择目标芯片,如下图所示。8 r% z0 n3 v! o3 ?
8.png
图1. 静态库工程的目标芯片选择

/ o6 C3 W2 d; ]! z

3 S9 L4 i/ q  e7 ]% t* s在设置工程的界面中,按照如下图所示,配置生成静态库的工程。
2 j1 D# J7 _( i( b$ s
9.png
图2. 新建静态库的工程

/ \0 n7 r0 Z% o* W% G# ^0 K

5 Z7 l1 h9 @- W然后在创建的静态库的工程中,创建头文件(.h 文件),如下图所示。6 d9 O& a6 s2 ^, t

  o/ I0 ?! O, h  Y8 N( I

" b8 a1 C& g, }% b6 _1 ^在 Inc 文件夹下创建“Lib.h”头文件:( Z! L4 g. x4 E# d: G8 A; Z5 d
10.png
图3. 创建头文件
11.png
图4. 创建头文件
3 V# e' N& @" \9 \$ z: M. b
STM32CubeIDE 在生成项目的时候,已经生成了一个 libLib.C 文件,在 libLib.c 源文件中,修改这个 myFunction 函数为你需要实现的功能或者添加更多应用,这里实现了一个计算数值平方的函数,并在 Lib.h 中进行了申明,具体代码如下图所示:
/ s2 a% @& U2 x# I9 C, b
12.png
图5. Lib.c 源文件代码
14.png
图6. Lib.h 头文件代码
  y  a; h) l4 M! M# [4 a3 e6 |

: k( N( L: S' t& j: Y当然如果觉得需要,还可以做一些优化操作,比如编译库的时候除去调试信息,可以在工程的属性中(鼠标点击工程名,右击选择“Properties”)添加“-g0”的编译命令,如下图所示:
9 C4 a, \# F$ U* b7 x
15.png
图7. 去除静态库的调试信息

  U8 j1 c$ r8 D: \3 Q- X

& Q2 T% K+ N5 y至此,只需要编译工程即可,然后就可以在静态库工程的“Debug”目录下查看到生成的库文件了:
. p6 S7 O$ r# [# E+ i
16.png
图8. 生成的库文件
' T# ]$ n% W9 N- d  V# i$ n* z

; J+ J8 \$ ?; L0 q! z- B9 z5 x5 ^这里需要注意,在生成库的时候,STM32CubeIDE 会自动添加“lib”的前缀到输出的库文件名之前,并且默认 STM32CubeIDE 输出的库文件的格式为“.a”的文件,所以工程名为“Lib”,输出的静态库文件名为“libLib.a”。当然如果你不喜欢这个名字,你可以进行修改。6 f6 `) r- W! Q- S$ z7 `, ?
% c* \6 P- [" V" x

2 Z1 F; H9 {& }. O3. 添加静态库+ v" O6 W9 p( a6 A* r  C, H
现在已经有静态库了,下面是如何将库添加到应用工程中来调用。3 J* [0 S8 h( v, e  v
2 I  ~) X1 e8 i) W; Z
& A0 ]4 U6 m( M
这里依然是打开 STM32CubeIDE,选择 “File->New->STM32 Project“,生成一个名为“APP“的 STM32G070 的基础工程。这步操作仅是创建一个可以成功编译的工程即可。3 _% |) S( T3 t' B, o
17.png
图9. APP 应用工程配置
18.png
图10. APP 应用工程的目标芯片选择
$ S: R" z! m% ]; s/ u

/ T! d. x2 u/ Z然后将生成的静态库“libLib.a“ 复制到 APP 应用工程的“Core/Src”文件夹下,将静态库的头文件“Lib.h“复制到“Core/Inc”文件夹下。
3 S. |  }& ]$ x: G" e+ v7 G  l: @. z, ^- P6 B7 d) @

) ?$ j# i' _& B% o( X+ B6 G还需要分别添加静态库和静态库的路径到工程中,如下所示:, B! \5 s. s- n) C" s1 p
19.png
图11. 添加静态库到应用工程中
# h$ ^0 f7 K: ?- @
$ v8 c: @; j7 Z" Q7 f% i' _
注意:添加静态库时,比如静态库的名称为“libLib.a”,那么添加时的格式为“:libLib.a”。
3 U3 w% @1 i' @$ W! g% k* w4 u
20.png
图12. 添加静态库的路径到应用工程中

( `, W" \1 Y$ s0 L4 v

9 l5 Z' C, n( O$ q. m5 ?- @4 \) {好了,现在可以在应用工程中调用静态库里的函数啦。
. M5 y: e" e7 \: n
- {: ]/ c  ^, G; A5 g- l
1 F9 q5 \  r: {# g
如下图所示,在应用工程的主函数中有两个数组,初始化的时候都为 0,通过 num 数组元素通过赋值,ret 数组元素通过调用库函数来计算。
. l4 f% A5 a6 B
21.png
图13. 引用静态库
22.png
图14. 静态库调用测试
0 C1 Y* N3 Z7 Q& p
3 t7 U+ E+ t& W6 Q. F& A
通过仿真调试,可以看到的测试结果,如下图所示:) ~6 [, F- Y, A
23.png
图15. 静态库测试结果

- ]3 s# ^$ i) ?

, d+ l7 O+ ~. a. p4 _' m可以看到 ret 的数组中的元素,均为 num 数组中对应元素的平方数了,说明成功地调用了静态库中的函数了。6 ]# G, K% B3 Y. s, m. E2 k
$ S$ E- n% R5 v; l
. v) P* [4 {% Z& l
4. 小结
( _' z+ r3 j- c1 Y) K! e6 p好了,上述就是如何生成静态库和如何调用静态库的示例,希望对大家所帮助。
# A0 Z! [" ]7 c6 B0 O9 q————————————————" y9 b- n, z+ }" f: y" z6 g  l1 g

' l# Z5 `( u; u) r; k9 e1 s/ e1 k( l$ x
收藏 评论0 发布时间:2025-8-27 08:51

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版