diff --git a/stm/Makefile b/stm/Makefile
index efd2ec60b0831dbfcca52f0c390a18c46e93c7a4..a305a9bcabe03e03478caa442e6c745af52b3df2 100644
--- a/stm/Makefile
+++ b/stm/Makefile
@@ -29,11 +29,9 @@ SRC_S = \
 	startup_stm32f40xx.s \
 
 PY_O = \
-	nlrthumb.o \
+#	nlrthumb.o \
 	malloc.o \
 	qstr.o \
-	runtime.o \
-	vm.o \
 #	misc.o \
 	lexer.o \
 	parse.o \
@@ -45,6 +43,8 @@ PY_O = \
 	asmthumb.o \
 	emitnthumb.o \
 	emitinlinethumb.o \
+	runtime.o \
+	vm.o \
 
 SRC_FATFS = \
 	ff.c \
diff --git a/stm/lcd.c b/stm/lcd.c
index bbd171991becc93849a2cfb3ebbe4a5428ebb1e2..3b65ed85fd5599edb26f1e32f3d97f01ec881f36 100644
--- a/stm/lcd.c
+++ b/stm/lcd.c
@@ -1,4 +1,6 @@
 #include <stm32f4xx_gpio.h>
+
+#include "misc.h"
 #include "systick.h"
 #include "lcd.h"
 #include "font_petme128_8x8.h"
diff --git a/stm/lib/usbd_pyb_core.c b/stm/lib/usbd_pyb_core.c
index ea8f05a81c61981dae647d4ea1e07410b0e900ed..5d6e6d9b95ebea9a8d10ab69afcd06b14045bc7c 100644
--- a/stm/lib/usbd_pyb_core.c
+++ b/stm/lib/usbd_pyb_core.c
@@ -64,6 +64,8 @@
   */ 
 
 /* Includes ------------------------------------------------------------------*/
+#include <stdio.h>
+
 #include "usbd_cdc_core.h"
 #include "usbd_desc.h"
 #include "usbd_req.h"
diff --git a/stm/main.c b/stm/main.c
index 30099d3663954a63d63fb83f15dfaf23c61a5831..ca14d1ce9d0fd4d991a2977f9a8179004c2abfe8 100644
--- a/stm/main.c
+++ b/stm/main.c
@@ -9,6 +9,7 @@
 #include "led.h"
 #include "lcd.h"
 #include "storage.h"
+#include "usb.h"
 
 static void impl02_c_version() {
     int x = 0;
@@ -199,6 +200,7 @@ void __fatal_error(const char *msg) {
 #include "compile.h"
 #include "runtime.h"
 
+#if 0
 py_obj_t pyb_delay(py_obj_t count) {
     sys_tick_delay_ms(rt_get_int(count));
     return py_const_none;
@@ -216,13 +218,14 @@ py_obj_t pyb_sw() {
         return py_const_false;
     }
 }
+#endif
 
 #include "ff.h"
 FATFS fatfs0;
 
-#include "nlr.h"
 
 /*
+#include "nlr.h"
 void g(uint i) {
     printf("g:%d\n", i);
     if (i & 1) {
@@ -327,8 +330,8 @@ int main() {
     storage_init();
 
     // Python init
-    qstr_init();
-    rt_init();
+    //qstr_init();
+    //rt_init();
 
     // print a message
     printf(" micro py board\n");
@@ -408,18 +411,8 @@ int main() {
     // turn boot-up LED off
     led_state(PYB_LED_G1, 0);
 
-    /*
-    for (;;) {
-        led_state(PYB_LED_G2, 1);
-        sys_tick_wait_at_least(sys_tick_counter, 500);
-        led_state(PYB_LED_G2, 0);
-        sys_tick_wait_at_least(sys_tick_counter, 500);
-    }
-    */
-
     // USB
-    if (0) {
-        void usb_init();
+    if (1) {
         usb_init();
     }
 
diff --git a/stm/usb.c b/stm/usb.c
index cc88808d9ff6d36fb579e1fa47c1c505cb0bb100..fd32c8425f7add0e1cd2261f582faabaa3782002 100644
--- a/stm/usb.c
+++ b/stm/usb.c
@@ -4,6 +4,7 @@
 #include "usbd_pyb_core.h"
 #include "usbd_usr.h"
 #include "usbd_desc.h"
+#include "usb.h"
 
 extern CDC_IF_Prop_TypeDef VCP_fops;
 
diff --git a/stm/usb.h b/stm/usb.h
new file mode 100644
index 0000000000000000000000000000000000000000..c5060a010713e99d5c59bd4fd1214e3bcbb3565d
--- /dev/null
+++ b/stm/usb.h
@@ -0,0 +1,2 @@
+void usb_init();
+void usb_vcp_send(const char* str, int len);