GitHub - micro-ROS/micro_ros_stm32cubemx_utils at humble
这个就是下载这个代码库以后的文件结构。其中sample_project.ioc就是平时STM32CubeMX的工程文件。类似于visual studio里面的项目文件 。打开以后是这个样子的:
可以看到跟本文后面的那些配置是几乎一模一样,就是说这个包里面包含了STM32CubeMX工程文件了
Using this package with STM32CubeMX
-
Clone this repository in your STM32CubeMX project folder.(这里说的project folder是因为平时STM32CubeMX所有的项目都是位于一个文件夹内的,例如我的位于文件夹 stm32_ws内,图片中我的project folder就是stm32_ws,而图片中stm32f103c8t6是我的一个项目,stm32f407是另外一个项目,其他项目都会在这个stm32_ws内) A sample project can be generated with the provided
sample_project.ioc
. -
Make sure that your STM32CubeMX project is using a
Makefile
toolchain (toolchain指交叉编译器,我觉得就是跨平台编译的东西例如cmake,这里选择使用makefile交叉编译器系统,这个代码库下载后也可以看到有mkefile文件,应该用于交叉编译的,有意思的是:CMakelists.txt最后也是生成了makefile文件)underProject Manager -> Project
-
Make sure that if you are using FreeRTOS, the micro-ROS task has more than 10 kB of stack:
-
Configure the transport interface on the STM32CubeMX project, check the Transport configuration section for instructions on the custom transports provided.在STM32CubeMX内设置串口
-
Modify the generated
Makefile
to include the following code before thebuild the application
section:修改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 #注意看这里添加的是DMA传输方式文件,所以前面应该配置的是DMA传输方式,如果使用的是中断方 #就不知道添加哪个文件了也许大概是包含IT_transport.c这样的一个文件吧 print_cflags: @echo $(CFLAGS)
-
Execute the static library generation tool. 编译Compiler flags will retrieved automatically from your
Makefile
and user will be prompted to check if they are correct.(注意了:我在这里没有使用docker,我就是执行了那个文件夹里面的sh文件。但是可以从后边这个代码看出来,需要在命令中传递一个参数进去,那就是MICROROS_LIBRARY_FOLDER,要在命令行中传递这个参数的值,否则会异常,或者也可以修改sh文件,给文件里面的MICROROS_LIBRARY_FOLDER赋值,也就是类似于这样) -
可以看到在sh文件中是使用了一个bash变量$MICROROS_LIBRARY_FOLDER,所以应该是这样:
export MICROROS_LIBRARY_FOLDER=静态库文件夹的地址
-
docker pull microros/micro_ros_static_library_builder:humble(这里遇到permission denied,所以需要先切换到超级用户在控制台输入su,然后再执行这个命令就可以了) docker run -it --rm -v $(pwd):/project --env MICROROS_LIBRARY_FOLDER=micro_ros_stm32cubemx_utils/microros_static_library microros/micro_ros_static_library_builder:humble
-
Modify your
main.c
to use micro-ROS.(在开发文件cpp文件中根据需要使用micro-ros内容) An example application can be found insample_main.c
. -
Continue your usual workflow building your project and flashing the binary:
make -j$(nproc)
Transport configuration(STM32与micro_ros支持的通讯方式)
Available transport for this platform are:
U(S)ART with DMA(DMA方式的串口通讯)
Steps to configure:
- Enable U(S)ART in your STM32CubeMX
- For the selected USART, enable DMA for Tx and Rx under
DMA Settings
- Set the DMA priotity to
Very High
for Tx and Rx - Set the DMA mode to
Circular
for Rx: Detail - For the selected, enable
global interrupt
underNVIC Settings
: Detail
U(S)ART with Interrupts(中断方式串口通讯)
Steps to configure:
- Enable U(S)ART in your STM32CubeMX
- For the selected USART, enable
global interrupt
underNVIC Settings
: Detail
USB CDC
Steps to configure:
-
Enable the USB in your STM32CubeMX
Connectivity
tab. -
Select the
Communication Device Class (Virtual Port Com)
mode on theMiddleware -> USB_DEVICE
configuration.Note: The micro-ROS transport will override the autogenerated
USB_DEVICE/App/usbd_cdc_if.c
methods.