Der Code hilft eigentlich garnicht, da z.B. nirgendwo der Inhalt von Write() zu finden ist.
Mit dem Code könnte man dann auch rausfinden, warum in "char buffer[3];" 4 Zeichen reingeschrieben werden (uart_gets(buffer, 4);) .
Oder ob der 2. Parameter immer 1 grösser sein muss.

Und ohne Schaltplan isses auch nur Raterei, da man auf dem Bild nicht erkennt, welche Teile wie verbunden sind. Aber da ja was angezeigt wird, geh ich mal davon aus, dass die Hardware stimmt.