diff --git a/src/main.rs b/src/main.rs
index 1f34d6d9dcb9dbfb903fd19841abbd862c4ac197..ff7c0a18eb205fcef40d297f5dd41618565f8b7e 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -18,9 +18,23 @@ impl<T: AsRef<dyn SerialPort> + std::io::Write> MavLinkPort for T {
     }
 }
 
+fn get_first_stm32_serial_port() -> Option<String> {
+    let ports = serialport::available_ports().expect("No serial ports found!");
+    for port in ports {
+        if let serialport::SerialPortType::UsbPort(info) = port.port_type {
+            if let Some(p) = info.product {
+                if p.contains("STM32") {
+                    return Some(port.port_name);
+                }
+            }
+        }
+    }
+    None
+}
+
 fn main() {
     // Open the first serialport available.
-    let port_name = "/dev/tty.usbmodem143203";
+    let port_name = get_first_stm32_serial_port().expect("No STM32 serial port found!");
     let mut port = serialport::new(port_name, 115200)
         .open()
         .expect("Failed to open serial port");