Skip to content

Commit 8dbc8fe

Browse files
jnugenpablogs9
andauthored
Add port for Nucleo-F767ZI (#247)
* Add port for Nucleo-F767ZI * Update README.md and package.xml Add nucleo-f767zi to "Supported Platforms" section Change maintainer info in nucleo-f767zi package.xml * Fix, codowners and CI * Update packages * Fix CI Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
1 parent d0ed351 commit 8dbc8fe

11 files changed

Lines changed: 263 additions & 1 deletion

File tree

.github/CODEOWNERS

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
* @pablogs9 @jamoralp @FranFin
22
config/freertos/nucleo_f446ze/ @alsaibie
33
config/freertos/esp32/ @donRaphaco
4-
config/freertos/nucleo_f746zg/ @edesta-be
4+
config/freertos/nucleo_f746zg/ @edesta-be
5+
config/freertos/nucleo_f767zi/ @jnugen

.github/workflows/ci.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,12 @@ jobs:
119119
configuration: int32_publisher
120120
transport_arguments: -t serial -d 1
121121
binary: 'firmware/freertos_apps/microros_nucleo_f746zg_extensions/build/micro-ROS.elf'
122+
123+
- rtos: freertos
124+
platform: nucleo_f767zi
125+
configuration: int32_publisher
126+
transport_arguments: -t serial -d 1
127+
binary: 'firmware/freertos_apps/microros_nucleo_f767zi_extensions/build/micro-ROS.elf'
122128

123129
- rtos: freertos
124130
platform: esp32

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ This package is the **official build system for micro-ROS**. It provides tools a
2626
| [FreeRTOS](https://www.freertos.org/) | [Olimex STM32-E407](https://www.olimex.com/Products/ARM/ST/STM32-E407/open-source-hardware) | STM32CubeMX latest | `freertos olimex-stm32-e407` |
2727
| [FreeRTOS](https://www.freertos.org/) | [ST Nucleo F446ZE](https://www.st.com/en/evaluation-tools/nucleo-f446ze.html) <sup>1</sup> | STM32CubeMX latest | `freertos nucleo_f446ze` |
2828
| [FreeRTOS](https://www.freertos.org/) | [ST Nucleo F746ZG](https://www.st.com/en/evaluation-tools/nucleo-f746zg.html) <sup>1</sup> | STM32CubeMX latest | `freertos nucleo_f746zg` |
29+
| [FreeRTOS](https://www.freertos.org/) | [ST Nucleo F767ZI](https://www.st.com/en/evaluation-tools/nucleo-f746zg.html) <sup>1</sup> | STM32CubeMX latest | `freertos nucleo_f767zi` |
2930
| [FreeRTOS](https://www.freertos.org/) | [Espressif ESP32](https://www.espressif.com/en/products/socs/esp32/overview) | v8.2.0 | `freertos esp32` |
3031
| [Zephyr](https://www.zephyrproject.org/) | [Olimex STM32-E407](https://www.olimex.com/Products/ARM/ST/STM32-E407/open-source-hardware) | v2.4.99 | `zephyr olimex-stm32-e407` |
3132
| [Zephyr](https://www.zephyrproject.org/) | [ST B-L475E-IOT01A](https://docs.zephyrproject.org/latest/boards/arm/disco_l475_iot1/doc/index.html) | v2.4.99 | `zephyr discovery_l475_iot1` |
@@ -134,6 +135,7 @@ In summary, the supported configurations for transports are:
134135
| ST Nucleo F446ZE <sup>1</sup> | - | UART | - |
135136
| ST Nucleo H743ZI <sup>1</sup> | - | - | UART |
136137
| ST Nucleo F746ZG <sup>1</sup> | - | UART | UART |
138+
| ST Nucleo F767ZI <sup>1</sup> | - | UART | - |
137139

138140
*<sup>1</sup> Community supported, may have lack of official support*
139141

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
repositories:
2+
freertos_apps:
3+
type: git
4+
url: https://github.com/micro-ros/freertos_apps
5+
version: foxy
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
EXTENSIONS_DIR=$FW_TARGETDIR/freertos_apps/microros_nucleo_f767zi_extensions
2+
3+
. $PREFIX/config/utils.sh
4+
5+
pushd $EXTENSIONS_DIR >/dev/null
6+
7+
export UROS_APP=$(head -n1 $FW_TARGETDIR/APP | tail -n1)
8+
9+
if [ -v UROS_CUSTOM_APP_FOLDER ]; then
10+
export UROS_APP_FOLDER="$UROS_CUSTOM_APP_FOLDER/$UROS_APP"
11+
else
12+
export UROS_APP_FOLDER="$FW_TARGETDIR/freertos_apps/apps/$UROS_APP"
13+
fi
14+
15+
if [ -d "$UROS_APP_FOLDER" ]; then
16+
echo "Selected app: $UROS_APP"
17+
else
18+
echo "App not found: $UROS_APP"
19+
print_available_apps
20+
exit 1
21+
fi
22+
23+
if [ "$UROS_FAST_BUILD" = "off" ] || [ ! -d "build" ]; then
24+
# Clean micro-ROS build
25+
rm -rf $FW_TARGETDIR/mcu_ws/build $FW_TARGETDIR/mcu_ws/install $FW_TARGETDIR/mcu_ws/log
26+
27+
# Clean build
28+
make clean
29+
30+
# Build micro-ROS stack
31+
make libmicroros
32+
fi
33+
34+
# Build firmware
35+
make -j$(nproc) UROS_APP_FOLDER=$UROS_APP_FOLDER
36+
popd >/dev/null
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{
2+
"names": {
3+
"tracetools": {
4+
"cmake-args": [
5+
"-DTRACETOOLS_DISABLED=ON",
6+
"-DTRACETOOLS_STATUS_CHECKING_TOOL=OFF"
7+
]
8+
},
9+
"rcutils": {
10+
"cmake-args": [
11+
"-DENABLE_TESTING=OFF",
12+
"-DRCUTILS_NO_FILESYSTEM=ON",
13+
"-DRCUTILS_AVOID_DYNAMIC_ALLOCATION=ON"
14+
]
15+
},
16+
"microxrcedds_client": {
17+
"cmake-args": [
18+
"-DUCLIENT_PIC=OFF",
19+
"-DUCLIENT_PROFILE_DISCOVERY=OFF"
20+
]
21+
},
22+
"rmw_microxrcedds": {
23+
"cmake-args": [
24+
"-DRMW_UXRCE_XML_BUFFER_LENGTH=400",
25+
"-DRMW_UXRCE_TRANSPORT=custom_serial",
26+
"-DRMW_UXRCE_DEFAULT_SERIAL_DEVICE=3"
27+
]
28+
},
29+
"tracetools": {
30+
"cmake-args": [
31+
"-DTRACETOOLS_DISABLED=ON",
32+
"-DTRACETOOLS_STATUS_CHECKING_TOOL=OFF"
33+
]
34+
}
35+
}
36+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
repositories:
2+
eProsima/Micro-CDR:
3+
type: git
4+
url: https://github.com/eProsima/micro-CDR.git
5+
version: foxy
6+
eProsima/Micro-XRCE-DDS-Client:
7+
type: git
8+
url: https://github.com/eProsima/Micro-XRCE-DDS-Client.git
9+
version: foxy
10+
11+
# MicroROS
12+
13+
uros/rcl:
14+
type: git
15+
url: https://github.com/micro-ROS/rcl
16+
version: foxy
17+
uros/rclc:
18+
type: git
19+
url: https://github.com/micro-ROS/rclc
20+
version: master
21+
uros/rcutils:
22+
type: git
23+
url: https://github.com/micro-ROS/rcutils
24+
version: foxy
25+
uros/micro_ros_msgs:
26+
type: git
27+
url: https://github.com/micro-ROS/micro_ros_msgs.git
28+
version: foxy
29+
uros/rmw_microxrcedds:
30+
type: git
31+
url: https://github.com/micro-ROS/rmw-microxrcedds.git
32+
version: foxy
33+
uros/rosidl_typesupport:
34+
type: git
35+
url: https://github.com/micro-ROS/rosidl_typesupport.git
36+
version: foxy
37+
uros/rosidl_typesupport_microxrcedds:
38+
type: git
39+
url: https://github.com/micro-ROS/rosidl_typesupport_microxrcedds.git
40+
version: foxy
41+
uros/tracetools:
42+
type: git
43+
url: https://gitlab.com/micro-ROS/ros_tracing/ros2_tracing
44+
version: foxy_microros
45+
46+
# Remove this when it returns to ros2.repos
47+
ros2/tinydir_vendor:
48+
type: git
49+
url: https://github.com/ros2/tinydir_vendor.git
50+
version: master
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
2+
EXTENSIONS_DIR=$FW_TARGETDIR/freertos_apps/microros_nucleo_f767zi_extensions
3+
4+
. $PREFIX/config/utils.sh
5+
6+
function help {
7+
echo "Configure script need an argument."
8+
echo " --transport -t udp, serial or serial-usb"
9+
echo " --dev -d agent string descriptor in a serial-like transport"
10+
echo " --ip -i agent IP in a network-like transport"
11+
echo " --port -p agent port in a network-like transport"
12+
}
13+
14+
echo $CONFIG_NAME > $FW_TARGETDIR/APP
15+
16+
if [ "$UROS_TRANSPORT" == "udp" ]; then
17+
18+
update_meta "rmw_microxrcedds" "RMW_UXRCE_TRANSPORT="$UROS_TRANSPORT
19+
update_meta "rmw_microxrcedds" "RMW_UXRCE_DEFAULT_UDP_IP="$UROS_AGENT_IP
20+
update_meta "rmw_microxrcedds" "RMW_UXRCE_DEFAULT_UDP_PORT="$UROS_AGENT_PORT
21+
update_meta "microxrcedds_client" "UCLIENT_PROFILE_SERIAL=OFF"
22+
update_meta "microxrcedds_client" "UCLIENT_PROFILE_UDP=ON"
23+
update_meta "microxrcedds_client" "UCLIENT_PROFILE_TCP=OFF"
24+
25+
remove_meta "rmw_microxrcedds" "RMW_UXRCE_DEFAULT_SERIAL_DEVICE"
26+
remove_meta "microxrcedds_client" "UCLIENT_EXTERNAL_SERIAL"
27+
remove_meta "microxrcedds_client" "EXTERNAL_TRANSPORT_HEADER_SERIAL"
28+
remove_meta "microxrcedds_client" "EXTERNAL_TRANSPORT_SRC_SERIAL"
29+
30+
echo "Configured $UROS_TRANSPORT mode with agent at $UROS_AGENT_IP:$UROS_AGENT_PORT"
31+
32+
elif [ "$UROS_TRANSPORT" == "serial" ]; then
33+
echo "Using serial device USART$UROS_AGENT_DEVICE."
34+
35+
cp -f $EXTENSIONS_DIR/Src/nucleo_f767zi_serial_transport.c $FW_TARGETDIR/mcu_ws/eProsima/Micro-XRCE-DDS-Client/src/c/profile/transport/serial/serial_transport_external.c
36+
cp -f $EXTENSIONS_DIR/Inc/nucleo_f767zi_serial_transport.h $FW_TARGETDIR/mcu_ws/eProsima/Micro-XRCE-DDS-Client/include/uxr/client/profile/transport/serial/serial_transport_external.h
37+
update_meta "microxrcedds_client" "UCLIENT_EXTERNAL_SERIAL=ON"
38+
update_meta "microxrcedds_client" "UCLIENT_PROFILE_SERIAL=ON"
39+
update_meta "microxrcedds_client" "UCLIENT_PROFILE_UDP=OFF"
40+
update_meta "microxrcedds_client" "UCLIENT_PROFILE_TCP=OFF"
41+
42+
update_meta "rmw_microxrcedds" "RMW_UXRCE_TRANSPORT=custom_serial"
43+
update_meta "rmw_microxrcedds" "RMW_UXRCE_DEFAULT_SERIAL_DEVICE="$UROS_AGENT_DEVICE
44+
45+
remove_meta "rmw_microxrcedds" "RMW_UXRCE_DEFAULT_UDP_IP"
46+
remove_meta "rmw_microxrcedds" "RMW_UXRCE_DEFAULT_UDP_PORT"
47+
48+
echo "Configured $UROS_TRANSPORT mode with agent at USART$UROS_AGENT_DEVICE"
49+
50+
elif [ "$UROS_TRANSPORT" == "serial-usb" ]; then
51+
echo "Using serial USB device. EXPERIMENTAL."
52+
53+
cp -f $EXTENSIONS_DIR/Src/nucleo_f767zi_usb_transport.c $FW_TARGETDIR/mcu_ws/eProsima/Micro-XRCE-DDS-Client/src/c/profile/transport/serial/serial_transport_external.c
54+
cp -f $EXTENSIONS_DIR/Inc/nucleo_f767zi_usb_transport.h $FW_TARGETDIR/mcu_ws/eProsima/Micro-XRCE-DDS-Client/include/uxr/client/profile/transport/serial/serial_transport_external.h
55+
update_meta "microxrcedds_client" "UCLIENT_EXTERNAL_SERIAL=ON"
56+
update_meta "rmw_microxrcedds" "RMW_UXRCE_TRANSPORT=custom_serial"
57+
58+
remove_meta "rmw_microxrcedds" "RMW_UXRCE_DEFAULT_UDP_IP"
59+
remove_meta "rmw_microxrcedds" "RMW_UXRCE_DEFAULT_UDP_PORT"
60+
61+
echo "Configured $UROS_TRANSPORT mode with agent"
62+
else
63+
help
64+
fi
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
pushd $FW_TARGETDIR >/dev/null
2+
# Install toolchain
3+
mkdir toolchain
4+
5+
6+
# Install toolchain
7+
echo "Downloading ARM compiler, this may take a while"
8+
curl -fsSLO https://developer.arm.com/-/media/Files/downloads/gnu-rm/8-2019q3/RC1.1/gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2
9+
tar --strip-components=1 -xvjf gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2 -C toolchain > /dev/null
10+
rm gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2
11+
12+
# Import repos
13+
vcs import --input $PREFIX/config/$RTOS/$PLATFORM/board.repos
14+
15+
# ignore broken packages
16+
touch mcu_ws/ros2/rcl_logging/rcl_logging_log4cxx/COLCON_IGNORE
17+
touch mcu_ws/ros2/rcl_logging/rcl_logging_spdlog/COLCON_IGNORE
18+
touch mcu_ws/ros2/rcl/COLCON_IGNORE
19+
touch mcu_ws/ros2/rosidl/rosidl_typesupport_introspection_c/COLCON_IGNORE
20+
touch mcu_ws/ros2/rosidl/rosidl_typesupport_introspection_cpp/COLCON_IGNORE
21+
touch mcu_ws/ros2/rcpputils/COLCON_IGNORE
22+
touch mcu_ws/uros/rcl/rcl_yaml_param_parser/COLCON_IGNORE
23+
touch mcu_ws/uros/rclc/rclc_examples/COLCON_IGNORE
24+
25+
rosdep install -y --from-paths mcu_ws -i mcu_ws --rosdistro foxy --skip-keys="$SKIP"
26+
popd >/dev/null
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
OLIMEX_EXTENSIONS_DIR=$FW_TARGETDIR/freertos_apps/microros_nucleo_f767zi_extensions
2+
3+
pushd $OLIMEX_EXTENSIONS_DIR > /dev/null
4+
5+
if [ -f build/micro-ROS.bin ]; then
6+
echo "Flashing firmware for $RTOS platform $PLATFORM"
7+
8+
if lsusb -d 15BA:002a; then
9+
PROGRAMMER=interface/ftdi/nucleo-arm-usb-tiny-h.cfg
10+
elif lsusb -d 15BA:0003;then
11+
PROGRAMMER=interface/ftdi/nucleo-arm-usb-ocd.cfg
12+
elif lsusb -d 15BA:002b;then
13+
PROGRAMMER=interface/ftdi/nucleo-arm-usb-ocd-h.cfg
14+
else
15+
echo "Error. Unsuported OpenOCD USB programmer"
16+
exit 1
17+
fi
18+
19+
openocd -f $PROGRAMMER -f target/stm32f7x.cfg -c init -c "reset halt" -c "flash write_image erase build/micro-ROS.bin 0x08000000" -c "reset" -c "exit"
20+
else
21+
echo "build/micro-ROS.bin not found: please compile before flashing."
22+
fi
23+
24+
popd > /dev/null

0 commit comments

Comments
 (0)