diff --git a/miosix/arch/common/drivers/stm32_serial_common.cpp b/miosix/arch/common/drivers/stm32_serial_common.cpp
index 79cea0669c7d77019f6acd808c8a7ac529931baf..64fa397a2a692790a1ecd0e58cf7d9458efbcd80 100644
--- a/miosix/arch/common/drivers/stm32_serial_common.cpp
+++ b/miosix/arch/common/drivers/stm32_serial_common.cpp
@@ -31,11 +31,12 @@ using namespace miosix;
 
 #if defined(ALTFUNC_STM32F2_SPLIT)
 
-void STM32SerialAltFunc::set(GpioPin& pin) const
+void STM32SerialAltFunc::set(GpioPin& pin, bool pullUp) const
 {
     //First we set the AF then the mode to avoid glitches
     pin.alternateFunction(lookup(pin));
-    pin.mode(Mode::ALTERNATE);
+    if(pullUp) pin.mode(Mode::ALTERNATE_PULL_UP);
+    else pin.mode(Mode::ALTERNATE);
 }
 
 inline unsigned char STM32SerialAltFunc::lookup(GpioPin& gpio) const
diff --git a/miosix/arch/common/drivers/stm32_serial_common.h b/miosix/arch/common/drivers/stm32_serial_common.h
index bede0933ca61c9b44f9910e751c988f338e07932..7174c9bac3bf3a7548f1218e313c03eb347548f8 100644
--- a/miosix/arch/common/drivers/stm32_serial_common.h
+++ b/miosix/arch/common/drivers/stm32_serial_common.h
@@ -242,11 +242,12 @@ struct STM32SerialAltFunc
 
 struct STM32SerialAltFunc
 {
-    void set(GpioPin& pin) const
+    void set(GpioPin& pin, bool pullUp=false) const
     {
         //First we set the AF then the mode to avoid glitches
         pin.alternateFunction(af);
-        pin.mode(Mode::ALTERNATE);
+        if(pullUp) pin.mode(Mode::ALTERNATE_PULL_UP);
+        else pin.mode(Mode::ALTERNATE);
     }
     unsigned char af;
 };
@@ -278,7 +279,7 @@ struct STM32SerialAltFunc
     };
     const Span *spans;
 
-    void set(GpioPin& pin) const;
+    void set(GpioPin& pin, bool pullUp=false) const;
 private:
     inline unsigned char lookup(GpioPin& gpio) const;
 };
diff --git a/miosix/arch/common/drivers/stm32f1_f2_f4_serial.cpp b/miosix/arch/common/drivers/stm32f1_f2_f4_serial.cpp
index 13d352c823f814a530a9e145f620808d73e7283d..1e6eca5f632aa26f4262915255fa49fd30d38da6 100644
--- a/miosix/arch/common/drivers/stm32f1_f2_f4_serial.cpp
+++ b/miosix/arch/common/drivers/stm32f1_f2_f4_serial.cpp
@@ -256,7 +256,8 @@ void STM32SerialBase::commonInit(int id, int baudrate, GpioPin tx, GpioPin rx,
         //Quirk: stm32f1 rx pin has to be in input mode, while stm32f2 and up
         //want it in ALTERNATE mode. Go figure...
         tx.mode(Mode::ALTERNATE);
-        rx.mode(Mode::INPUT);
+        rx.mode(Mode::INPUT_PULL_UP_DOWN);
+        rx.pullup(); //Pullup: prevent spurious rx if unconnected
         if(flowControl)
         {
             rts.mode(Mode::ALTERNATE);
@@ -264,7 +265,7 @@ void STM32SerialBase::commonInit(int id, int baudrate, GpioPin tx, GpioPin rx,
         }
     #else
         port->getAltFunc().set(tx);
-        port->getAltFunc().set(rx);
+        port->getAltFunc().set(rx,true); //Pullup: prevent spurious rx if unconnected
         if(flowControl)
         {
             port->getAltFunc().set(rts);
diff --git a/miosix/arch/common/drivers/stm32f7_serial.cpp b/miosix/arch/common/drivers/stm32f7_serial.cpp
index 812eb3eefdcdbecee3d841978ee4717132b3ce75..f417427ea90a239a2af0f572faaa077d3ec8c526 100644
--- a/miosix/arch/common/drivers/stm32f7_serial.cpp
+++ b/miosix/arch/common/drivers/stm32f7_serial.cpp
@@ -428,7 +428,7 @@ void STM32SerialBase::commonInit(int id, int baudrate, GpioPin tx, GpioPin rx,
                     GpioPin rts, GpioPin cts)
 {
     port->getAltFunc().set(tx);
-    port->getAltFunc().set(rx);
+    port->getAltFunc().set(rx,true); //Pullup: prevent spurious rx if unconnected
     if(flowControl)
     {
         port->getAltFunc().set(rts);