Необходимым условием для этого является возможность программирования Flash микроконтроллера с помощью программы, выполняющейся самим микроконтроллером. Такая программа обычно называется Bootloader. UART это лишь интерфейс через который Bootloader получает извне микроконтроллера данные и команды для (само-)программирования. Вместо UART может быть любой другой имеющийся в МК интерфейс SPI, I2C, CAN, USB и т.п. См., например, в
википедии или
поГуглите на тему bootloader сами.
В некоторых микроконтроллерах уже имеется встроенная производителем программа Bootloader, которая поддерживает (само-)программирование встроенной в МК Flash и загрузку программы через какой-либо интерфейс связи по определенному протоколу. Если позволяют ресурсы МК. то можно написать свою собственную программу Bootloader.