[教程]自动化编译microROS的github仓库
-
接前文:https://fishros.org.cn/forum/topic/2085/自动化编译microros的github仓库?_=1705806395279
仓库链接:https://github.com/ganyuanzhen/microROSF407BinrayBuilder
更新: 2025/5/21 上传脚本已更换为Github Artifacts,无需为仓库设置Write权限了!

以下为正文:
STM32 系列芯片 microROS 自动化编译库
这个repo可以帮助大家使用
Github Actions来自动化编译microROS库。不再需要在本地搭建Docker编译环境!目录结构
repo ├── Core ├── Drivers ├── micro_ros_stm32cubemx_utils └── Middlewares其中,
Core,Drivers, 和Middlewares都是由CubeMX自动化生成的。而micro_ros_stm32cubemx_utils则是microROS的核心库,我们之后编译的静态库就是基于这个的。使用方法
0. fork 并 克隆本仓库
但是,克隆下来的仓库是根据我的需求配置的,不符合你的需求,需要按照下面的步骤修改哦~
1. 获取
microROS代码由于
microROS代码是区分ROS2的版本的,因此需要根据你的需求选择不同的版本。仓库地址为:https://github.com/micro-ROS/micro_ros_stm32cubemx_utils

注意不要直接克隆,下载压缩包就可以了!
用你下载下来的版本替换本仓库中的
micro_ros_stm32cubemx_utils文件夹。注意要保持文件夹名字相同!2. 修改
.ioc文件并生成代码这里需要根据你的芯片型号来修改
.ioc文件。在修改和重新生成代码的过程中,需要注意一下几点:1. 使用
FreeRTOS中间件,microROS需要使用FreeRTOS作为中间件,因此需要修改.ioc文件,将FreeRTOS中间件添加到 项目中。2. 修改
FreeRTOS中的Stack SizemicroROS需要大于10kb的Stack Size,因此需要修改FreeRTOS中的Stack Size。具体配置选项在
FreeRTOS->Tasks and Queues中,双击defaultTask进行修改。
3. 按需要设置通信协议,比如使用
USART + DMA- 初始化USART并启用其DMA请求功能。
- 创建并配置两个DMA通道,一个用于Tx(传输),一个用于Rx(接收)。
- 对于每个DMA通道,将优先级设置为非常高(DMA_PRIORITY_VERY_HIGH)。
- 对于Rx通道,将其配置为循环模式(DMA_CIRCULAR)。
- 开启串口的
UARTx global interrupt


4. 在
Project Manager选项卡中,配置Toolchain为Makefile
5. 生成代码,注意
.ioc的保存位置是否正确。6. 如果第一步复制好的文件夹不见了,请再复制一遍。
3. 修改
microROS生成脚本1. 修改
Makefile在
Makefile中找到build the application部分,在上方插入以下内容:####################################### # micro-ROS addons ####################################### LDFLAGS += micro_ros_stm32cubemx_utils/microros_static_library/libmicroros/libmicroros.a C_INCLUDES += -Imicro_ros_stm32cubemx_utils/microros_static_library/libmicroros/microros_include # Add micro-ROS utils C_SOURCES += micro_ros_stm32cubemx_utils/extra_sources/custom_memory_manager.c C_SOURCES += micro_ros_stm32cubemx_utils/extra_sources/microros_allocators.c C_SOURCES += micro_ros_stm32cubemx_utils/extra_sources/microros_time.c # Set here the custom transport implementation C_SOURCES += micro_ros_stm32cubemx_utils/extra_sources/microros_transports/dma_transport.c print_cflags: @echo $(CFLAGS)注意,
@echo $(CFLAGS)前面的是tab而不是空格,如果复制下来是空格,请手动修改为tab。2. 修改
library_generation.sh默认的编译脚本是需要人机交互的,我们将其去掉以实现自动编译。
打开
micro_ros_stm32cubemx_utils\microros_static_library\library_generation\library_generation.sh文件,按照如下方式修改:将:
if [ $RET_CODE = "0" ]; then echo "Found CFLAGS:" echo "-------------" echo $RET_CFLAGS echo "-------------" read -p "Do you want to continue with them? (y/n)" -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]] then echo "Continuing..." else echo "Aborting" exit 0; fi else echo "Please read README.md to update your Makefile" exit 1; fi修改为:
if [ $RET_CODE = "0" ]; then echo "Found CFLAGS:" echo "-------------" echo $RET_CFLAGS echo "-------------" # read -p "Do you want to continue with them? (y/n)" -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]] then echo "Continuing..." else echo "Aborting"; # exit 0; fi else echo "Please read README.md to update your Makefile" exit 1; fi修改前后差异如下:

3. 将代码推送到
GitHub4. 开始编译
1. 配置权限 (现在已经不需要了)
Github 默认是不允许在Actions中读写仓库的,我们需要先配置一下权限,让它可以上传Release。
-
首先前往 Settings 界面

-
然后,前往 Actions -> General

-
在页面下方,选择
Read and write permissions选项

2. 开始编译
- 前往你的仓库的
Actions页面,点击 左边的CI按钮,再点击右边的Run worlflow就可以开始编译了!。

- 编译完成后的结果,可以在仓库的
Release页面直接下载。

-
大佬,问一下 你这个用在repo之后 是不是就不用执行 docker run -it --rm -v $(pwd):/project --env MICROROS_LIBRARY_FOLDER=micro_ros_stm32cubemx_utils/microros_static_library microros/micro_ros_static_library_builder:foxy 这一条命令了 最近我也在研究这个,我主要是foxy的版本 在执行这个命令的时候没有编译 ,和docker有关导致无法搞下去了, 你那边有没有foxy的版本 能不能留个联系方式,我想请教几个问题 很简单的问题 很多我基本都已经跑通了,只有一些小问题不知道怎么去做,麻烦大佬了
-
-
@472795832 我也是最近才在用STM32版本哈哈(^_^)
-
@ganyuanzhen 关注你很久了 ,我的芯片也是STM32F407VET6的,我现在就是卡在docker编译这里,搞得很难受,我看你的提示似乎没有配置RCC
-
@ganyuanzhen
这是为啥?因为我把我下的micro_ros_stm32cubemx_utils_build.tar这个文件解包了导致的吗,我需要原压缩文件直接上传吗? -
我的抬头就是我的QQ号,可以私下交流一下吗?
-
用你的代码git clone下来 然后重新建一个库 也没编译过 -
@472795832 哈哈,我的问题,教程里少了一个配置Git仓库权限的步骤。少了这个步骤,就没法上传到Release
我这就去补上
-
@472795832 编译这个库,似乎不需要配置外部晶振也可以编译。不过最好还是都配置好再进行编译,避免不确定性嘛。
-
现在已经无需release 权限了