diff --git a/boards/iot-lab_M3/include/board.h b/boards/iot-lab_M3/include/board.h
index 4665e2bf16d264e590c8da6a2c968f8f2c5130a3..8e35ded673973b3420c1df3256a03d69c099b477 100644
--- a/boards/iot-lab_M3/include/board.h
+++ b/boards/iot-lab_M3/include/board.h
@@ -39,7 +39,7 @@
  */
 #define STDIO               UART_0
 #define STDIO_BAUDRATE      (115200U)
-#define STDIO_BUFSIZE       (64U)
+#define STDIO_RX_BUFSIZE    (64U)
 /** @} */
 
 /**
diff --git a/boards/msbiot/include/board.h b/boards/msbiot/include/board.h
index 733052f2d98a27ece7f502629a5c5bf4191402c2..0b6034a9f9510d152aa24fcd444281a883f1de63 100644
--- a/boards/msbiot/include/board.h
+++ b/boards/msbiot/include/board.h
@@ -40,7 +40,7 @@
  */
 #define STDIO               UART_0
 #define STDIO_BAUDRATE      (115200U)
-#define STDIO_BUFSIZE       (64U)
+#define STDIO_RX_BUFSIZE    (64U)
 /** @} */
 
 /**
diff --git a/boards/stm32f0discovery/include/board.h b/boards/stm32f0discovery/include/board.h
index 556fe1f7ff2c28bf2e8420dbdc0e1a8ef0b61e1d..355776edf4e413e62feaa4108dabaa3d17d1deda 100644
--- a/boards/stm32f0discovery/include/board.h
+++ b/boards/stm32f0discovery/include/board.h
@@ -39,7 +39,7 @@
  */
 #define STDIO               UART_0
 #define STDIO_BAUDRATE      (115200U)
-#define STDIO_BUFSIZE       (64U)
+#define STDIO_RX_BUFSIZE    (64U)
 
 /**
  * @name LED pin definitions
diff --git a/boards/stm32f3discovery/include/board.h b/boards/stm32f3discovery/include/board.h
index 7918d0f393c43aefd389bbbbc81e7ec468598b91..0f071217be8ff15fe8c9309cb513b2e88a716fa5 100644
--- a/boards/stm32f3discovery/include/board.h
+++ b/boards/stm32f3discovery/include/board.h
@@ -39,7 +39,7 @@
  */
 #define STDIO               UART_0
 #define STDIO_BAUDRATE      (115200U)
-#define STDIO_BUFSIZE       (64U)
+#define STDIO_RX_BUFSIZE    (64U)
 /** @} */
 
 /**
diff --git a/boards/stm32f4discovery/include/board.h b/boards/stm32f4discovery/include/board.h
index 294a815564c3113e71190e4c55bfc3389ae52304..0b0195b0a49f82796d763b8e10a8b54c7570e98f 100644
--- a/boards/stm32f4discovery/include/board.h
+++ b/boards/stm32f4discovery/include/board.h
@@ -40,7 +40,7 @@
  */
 #define STDIO               UART_0
 #define STDIO_BAUDRATE      (115200U)
-#define STDIO_BUFSIZE       (64U)
+#define STDIO_RX_BUFSIZE    (64U)
 /** @} */
 
 /**
diff --git a/cpu/stm32f0/syscalls.c b/cpu/stm32f0/syscalls.c
index fbddea6576e82429e348139fa200e0eca0fe320a..1f0787e8ebc40b326229aae2b722fbde03865214 100644
--- a/cpu/stm32f0/syscalls.c
+++ b/cpu/stm32f0/syscalls.c
@@ -51,7 +51,7 @@ caddr_t heap_top = (caddr_t)&_end + 4;
  * @brief use mutex for waiting on incoming UART chars
  */
 static mutex_t uart_rx_mutex;
-static char rx_buf_mem[STDIO_BUFSIZE];
+static char rx_buf_mem[STDIO_RX_BUFSIZE];
 static ringbuffer_t rx_buf;
 #endif
 
@@ -81,7 +81,7 @@ void _init(void)
 {
 #ifndef MODULE_UART0
     mutex_init(&uart_rx_mutex);
-    ringbuffer_init(&rx_buf, rx_buf_mem, STDIO_BUFSIZE);
+    ringbuffer_init(&rx_buf, rx_buf_mem, STDIO_RX_BUFSIZE);
 #endif
     uart_init(STDIO, STDIO_BAUDRATE, rx_cb, 0, 0);
 }
@@ -195,8 +195,9 @@ int _read_r(struct _reent *r, int fd, void *buffer, unsigned int count)
     }
     return ringbuffer_get(&rx_buf, (char*)buffer, rx_buf.avail);
 #else
-    r->_errno = ENODEV;
-    return -1;
+    char *res = (char*)buffer;
+    res[0] = (char)uart0_readc();
+    return 1;
 #endif
 }
 
diff --git a/cpu/stm32f1/syscalls.c b/cpu/stm32f1/syscalls.c
index 0a3a47d396a17ef85f4a4fc7e3c8fdb3104c23be..247caa4bb5bbb5836569d4414f666fc9d9aa5e21 100644
--- a/cpu/stm32f1/syscalls.c
+++ b/cpu/stm32f1/syscalls.c
@@ -51,7 +51,7 @@ caddr_t heap_top = (caddr_t)&_end + 4;
  * @brief use mutex for waiting on incoming UART chars
  */
 static mutex_t uart_rx_mutex;
-static char rx_buf_mem[STDIO_BUFSIZE];
+static char rx_buf_mem[STDIO_RX_BUFSIZE];
 static ringbuffer_t rx_buf;
 #endif
 
@@ -81,7 +81,7 @@ void _init(void)
 {
 #ifndef MODULE_UART0
     mutex_init(&uart_rx_mutex);
-    ringbuffer_init(&rx_buf, rx_buf_mem, STDIO_BUFSIZE);
+    ringbuffer_init(&rx_buf, rx_buf_mem, STDIO_RX_BUFSIZE);
 #endif
     uart_init(STDIO, STDIO_BAUDRATE, rx_cb, 0, 0);
 }
@@ -195,8 +195,9 @@ int _read_r(struct _reent *r, int fd, void *buffer, unsigned int count)
     }
     return ringbuffer_get(&rx_buf, (char*)buffer, rx_buf.avail);
 #else
-    r->_errno = ENODEV;
-    return -1;
+    char *res = (char*)buffer;
+    res[0] = (char)uart0_readc();
+    return 1;
 #endif
 }
 
diff --git a/cpu/stm32f3/syscalls.c b/cpu/stm32f3/syscalls.c
index 3f5ee6c85d18418623fadef7c69451b252d7361c..4f89a0e7e35337f32f77eee71028dced84f4a9aa 100644
--- a/cpu/stm32f3/syscalls.c
+++ b/cpu/stm32f3/syscalls.c
@@ -52,7 +52,7 @@ caddr_t heap_top = (caddr_t)&_end + 4;
  * @brief use mutex for waiting on incoming UART chars
  */
 static mutex_t uart_rx_mutex;
-static char rx_buf_mem[STDIO_BUFSIZE];
+static char rx_buf_mem[STDIO_RX_BUFSIZE];
 static ringbuffer_t rx_buf;
 #endif
 
@@ -82,7 +82,7 @@ void _init(void)
 {
 #ifndef MODULE_UART0
     mutex_init(&uart_rx_mutex);
-    ringbuffer_init(&rx_buf, rx_buf_mem, STDIO_BUFSIZE);
+    ringbuffer_init(&rx_buf, rx_buf_mem, STDIO_RX_BUFSIZE);
 #endif
     uart_init(STDIO, STDIO_BAUDRATE, rx_cb, 0, 0);}
 
@@ -195,8 +195,9 @@ int _read_r(struct _reent *r, int fd, void *buffer, unsigned int count)
     }
     return ringbuffer_get(&rx_buf, (char*)buffer, rx_buf.avail);
 #else
-    r->_errno = ENODEV;
-    return -1;
+    char *res = (char*)buffer;
+    res[0] = (char)uart0_readc();
+    return 1;
 #endif
 }
 
diff --git a/cpu/stm32f4/syscalls.c b/cpu/stm32f4/syscalls.c
index 25fb668c968ab3aee776328e69ffe3af07dfa7bd..2d4508ca3fd41ebffadd608ea804801d572bab46 100644
--- a/cpu/stm32f4/syscalls.c
+++ b/cpu/stm32f4/syscalls.c
@@ -51,7 +51,7 @@ caddr_t heap_top = (caddr_t)&_end + 4;
  * @brief use mutex for waiting on incoming UART chars
  */
 static mutex_t uart_rx_mutex;
-static char rx_buf_mem[STDIO_BUFSIZE];
+static char rx_buf_mem[STDIO_RX_BUFSIZE];
 static ringbuffer_t rx_buf;
 #endif
 
@@ -81,7 +81,7 @@ void _init(void)
 {
 #ifndef MODULE_UART0
     mutex_init(&uart_rx_mutex);
-    ringbuffer_init(&rx_buf, rx_buf_mem, STDIO_BUFSIZE);
+    ringbuffer_init(&rx_buf, rx_buf_mem, STDIO_RX_BUFSIZE);
 #endif
     uart_init(STDIO, STDIO_BAUDRATE, rx_cb, 0, 0);
 }
@@ -194,6 +194,10 @@ int _read_r(struct _reent *r, int fd, void *buffer, unsigned int count)
         mutex_lock(&uart_rx_mutex);
     }
     return ringbuffer_get(&rx_buf, (char*)buffer, rx_buf.avail);
+#else
+    char *res = (char*)buffer;
+    res[0] = (char)uart0_readc();
+    return 1;
 #endif
 }