diff --git a/epicardium/modules/serial.c b/epicardium/modules/serial.c
index a7392056f31705e9c6f334f60952ece4dee22d10..b7be0594f3fcacbee9ac3ed7ab6ff0163c74f1a8 100644
--- a/epicardium/modules/serial.c
+++ b/epicardium/modules/serial.c
@@ -27,7 +27,21 @@ static QueueHandle_t read_queue;
  */
 void epic_uart_write_str(const char *str, intptr_t length)
 {
+	uint32_t basepri = __get_BASEPRI();
+	if (xPortIsInsideInterrupt()) {
+		taskENTER_CRITICAL_FROM_ISR();
+	} else {
+		taskENTER_CRITICAL();
+	}
+
 	UART_Write(ConsoleUart, (uint8_t *)str, length);
+
+	if (xPortIsInsideInterrupt()) {
+		taskEXIT_CRITICAL_FROM_ISR(basepri);
+	} else {
+		taskEXIT_CRITICAL();
+	}
+
 	cdcacm_write((uint8_t *)str, length);
 	ble_uart_write((uint8_t *)str, length);
 }