boards: opta: RS485 support

This set of changes enables the RS485 hardware connected to usart3 and
provides some overlays that allow for easily running the modbus
rtu_client and rtu_server samples on Opta.

Signed-off-by: Federico Di Gregorio <fog@dndg.it>
diff --git a/boards/arduino/opta/arduino_opta-common.dtsi b/boards/arduino/opta/arduino_opta-common.dtsi
index add572d..580688e 100644
--- a/boards/arduino/opta/arduino_opta-common.dtsi
+++ b/boards/arduino/opta/arduino_opta-common.dtsi
@@ -91,3 +91,15 @@
 &rng {
 	status = "okay";
 };
+
+&usart3 {
+	pinctrl-0 = <&usart3_tx_pb10 &usart3_rx_pb11 &usart3_cts_pb13 &usart3_de_pb14>;
+	pinctrl-names = "default";
+	current-speed = <115200>;
+	/* The RS485 is often used with the ModBus protocol. */
+	modbus0 {
+		compatible = "zephyr,modbus-serial";
+		de-gpios = <&gpiob 14 GPIO_ACTIVE_HIGH>;
+		re-gpios = <&gpiob 13 GPIO_ACTIVE_LOW>;
+	};
+};
diff --git a/boards/arduino/opta/doc/index.rst b/boards/arduino/opta/doc/index.rst
index 01badd3..8c6aa78 100644
--- a/boards/arduino/opta/doc/index.rst
+++ b/boards/arduino/opta/doc/index.rst
@@ -67,6 +67,8 @@
 +-----------+------------+-------------------------------------+
 | ETHERNET  | on-board   | eth                                 |
 +-----------+------------+-------------------------------------+
+| RS485     | on-board   | uart                                |
++-----------+------------+-------------------------------------+
 
 The ``arduino_opta/stm32h747xx/m4`` board target
 supports the following hardware features:
diff --git a/samples/subsys/modbus/rtu_client/boards/arduino_opta_stm32h747xx_m7.overlay b/samples/subsys/modbus/rtu_client/boards/arduino_opta_stm32h747xx_m7.overlay
new file mode 100644
index 0000000..1838da4
--- /dev/null
+++ b/samples/subsys/modbus/rtu_client/boards/arduino_opta_stm32h747xx_m7.overlay
@@ -0,0 +1,12 @@
+/*
+ * Copyright (c) 2024 DNDG srl
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+&usart3 {
+	modbus0 {
+		status = "okay";
+	};
+	status = "okay";
+};
diff --git a/samples/subsys/modbus/rtu_server/boards/arduino_opta_stm32h747xx_m7.overlay b/samples/subsys/modbus/rtu_server/boards/arduino_opta_stm32h747xx_m7.overlay
new file mode 100644
index 0000000..1838da4
--- /dev/null
+++ b/samples/subsys/modbus/rtu_server/boards/arduino_opta_stm32h747xx_m7.overlay
@@ -0,0 +1,12 @@
+/*
+ * Copyright (c) 2024 DNDG srl
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+&usart3 {
+	modbus0 {
+		status = "okay";
+	};
+	status = "okay";
+};
diff --git a/tests/subsys/modbus/boards/arduino_opta_stm32h747xx_m7.overlay b/tests/subsys/modbus/boards/arduino_opta_stm32h747xx_m7.overlay
new file mode 100644
index 0000000..1838da4
--- /dev/null
+++ b/tests/subsys/modbus/boards/arduino_opta_stm32h747xx_m7.overlay
@@ -0,0 +1,12 @@
+/*
+ * Copyright (c) 2024 DNDG srl
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+&usart3 {
+	modbus0 {
+		status = "okay";
+	};
+	status = "okay";
+};