diff --git a/ports/stm32/machine_uart.c b/ports/stm32/machine_uart.c
index dcaa842a08420a418c3be33ddf4c122a7241ed60..f5f56c703ed7ff443e9ae8db4e351f31a706a2db 100644
--- a/ports/stm32/machine_uart.c
+++ b/ports/stm32/machine_uart.c
@@ -217,17 +217,6 @@ STATIC mp_obj_t pyb_uart_init_helper(pyb_uart_obj_t *self, size_t n_args, const
 
     // setup the read buffer
     m_del(byte, self->read_buf, self->read_buf_len << self->char_width);
-    if (bits == UART_WORDLENGTH_9B && parity == UART_PARITY_NONE) {
-        self->char_mask = 0x1ff;
-        self->char_width = CHAR_WIDTH_9BIT;
-    } else {
-        if (bits == UART_WORDLENGTH_9B || parity == UART_PARITY_NONE) {
-            self->char_mask = 0xff;
-        } else {
-            self->char_mask = 0x7f;
-        }
-        self->char_width = CHAR_WIDTH_8BIT;
-    }
     if (args.rxbuf.u_int >= 0) {
         // rxbuf overrides legacy read_buf_len
         args.read_buf_len.u_int = args.rxbuf.u_int;
diff --git a/ports/stm32/uart.c b/ports/stm32/uart.c
index 531cf5dfc1eb04e8a06cf27edbb4f4e77d4d9d41..9d93bc1e5eb9fc54a0e29fc5ee0c67778bb8f29f 100644
--- a/ports/stm32/uart.c
+++ b/ports/stm32/uart.c
@@ -318,6 +318,18 @@ bool uart_init(pyb_uart_obj_t *uart_obj,
     uart_obj->is_enabled = true;
     uart_obj->attached_to_repl = false;
 
+    if (bits == UART_WORDLENGTH_9B && parity == UART_PARITY_NONE) {
+        uart_obj->char_mask = 0x1ff;
+        uart_obj->char_width = CHAR_WIDTH_9BIT;
+    } else {
+        if (bits == UART_WORDLENGTH_9B || parity == UART_PARITY_NONE) {
+            uart_obj->char_mask = 0xff;
+        } else {
+            uart_obj->char_mask = 0x7f;
+        }
+        uart_obj->char_width = CHAR_WIDTH_8BIT;
+    }
+
     return true;
 }