STMCU小助手
发布时间:2025-8-27 08:51
|
1. 前言' A( {# _' B) `6 H" d; y6 s" ? 在嵌入式开发中,经常有需要调用第三方库的需求,甚至需要制作自己的静态库。那么如何基于 STM32CubeIDE 来实现呢?本 LAT 以STM32G070的 Nucelo 开发板为例,介绍如何创建一个静态库以及实现调用它的过程。 2. 生成静态库 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 首先,打开 STM32CubeIDE,选择 “File->New->STM32 Project“,按照提示选择目标芯片,如下图所示。8 r% z0 n3 v! o3 ?
图1. 静态库工程的目标芯片选择 在设置工程的界面中,按照如下图所示,配置生成静态库的工程。
图2. 新建静态库的工程 然后在创建的静态库的工程中,创建头文件(.h 文件),如下图所示。6 d9 O& a6 s2 ^, t 在 Inc 文件夹下创建“Lib.h”头文件:( Z! L4 g. x4 E# d: G8 A; Z5 d
图3. 创建头文件
图4. 创建头文件 3 V# e' N& @" \9 \$ z: M. b STM32CubeIDE 在生成项目的时候,已经生成了一个 libLib.C 文件,在 libLib.c 源文件中,修改这个 myFunction 函数为你需要实现的功能或者添加更多应用,这里实现了一个计算数值平方的函数,并在 Lib.h 中进行了申明,具体代码如下图所示:
图5. Lib.c 源文件代码
图6. Lib.h 头文件代码 y a; h) l4 M! M# [4 a3 e6 |当然如果觉得需要,还可以做一些优化操作,比如编译库的时候除去调试信息,可以在工程的属性中(鼠标点击工程名,右击选择“Properties”)添加“-g0”的编译命令,如下图所示:
图7. 去除静态库的调试信息 至此,只需要编译工程即可,然后就可以在静态库工程的“Debug”目录下查看到生成的库文件了:
图8. 生成的库文件 ' T# ]$ n% W9 N- d V# i$ n* z这里需要注意,在生成库的时候,STM32CubeIDE 会自动添加“lib”的前缀到输出的库文件名之前,并且默认 STM32CubeIDE 输出的库文件的格式为“.a”的文件,所以工程名为“Lib”,输出的静态库文件名为“libLib.a”。当然如果你不喜欢这个名字,你可以进行修改。6 f6 `) r- W! Q- S$ z7 `, ? % c* \6 P- [" V" x 3. 添加静态库+ 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
图9. APP 应用工程配置
图10. APP 应用工程的目标芯片选择 $ S: R" z! m% ]; s/ u然后将生成的静态库“libLib.a“ 复制到 APP 应用工程的“Core/Src”文件夹下,将静态库的头文件“Lib.h“复制到“Core/Inc”文件夹下。 , ^- P6 B7 d) @ 还需要分别添加静态库和静态库的路径到工程中,如下所示:, B! \5 s. s- n) C" s1 p
图11. 添加静态库到应用工程中 # h$ ^0 f7 K: ?- @$ v8 c: @; j7 Z" Q7 f% i' _ 注意:添加静态库时,比如静态库的名称为“libLib.a”,那么添加时的格式为“:libLib.a”。
图12. 添加静态库的路径到应用工程中 好了,现在可以在应用工程中调用静态库里的函数啦。 1 F9 q5 \ r: {# g 如下图所示,在应用工程的主函数中有两个数组,初始化的时候都为 0,通过 num 数组元素通过赋值,ret 数组元素通过调用库函数来计算。
图13. 引用静态库
图14. 静态库调用测试 0 C1 Y* N3 Z7 Q& p3 t7 U+ E+ t& W6 Q. F& A 通过仿真调试,可以看到的测试结果,如下图所示:) ~6 [, F- Y, A
图15. 静态库测试结果 可以看到 ret 的数组中的元素,均为 num 数组中对应元素的平方数了,说明成功地调用了静态库中的函数了。6 ]# G, K% B3 Y. s, m. E2 k $ S$ E- n% R5 v; l . v) P* [4 {% Z& l 4. 小结 好了,上述就是如何生成静态库和如何调用静态库的示例,希望对大家所帮助。 ————————————————" y9 b- n, z+ }" f: y" z6 g l1 g ) r; k9 e1 s/ e1 k( l$ x |
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
《MCUBoot课程》学习笔记+从信任链原理到量产实践
STM32CubeIDE 2.2.0新版本发布
CubeMX生成CubeIDE工程代码乱码
STM32CubeIDE实时时钟(RTC)经验分享
实战经验 | ClassB功能安全认证代码与应用代码分区的实现要点
【STM32U3 评测】人体行为识别
【STM32U3 评测】串口控制步进电机与LabVIEW数据采集
实战经验 | STM32CubeIDE实用技巧之如何指定变量、函数、文件到指定内存
微信公众号
手机版