Для загрузки исполняемого кода во внутреннюю память микроконтроллера,
можно использовать встроенный загрузчик Bootstrap Loader (BSL). Загрузчику необходимы 4
сигнальные линии: RxD, TxD, RST/NMI, TEST(TCK).

В качестве примера BSL-программатора, привожу схему, основанную на
недорогой и распространенной микросхеме преобразователе уровней
RS232<->UART - MAX232 и одном транзисторе.

Рассмотрим схему устройства:

Рис. 1. Схема BSL-программатора

По документации напряжение питания микросхемы MAX232 составляет 5В,
однако, на практике, при питании 3.3В, проблем мной замечено не было.
Схема проверена и регулярно используется в работе.

В качестве преобразователя уровней может выступать любая аналогичная
микросхема, стабильно работающая при питании 3.3В и имеющая необходимое количество входов и
выходов. Идеальный вариант - MAX3241E. Транзистор - любой маломощный
n-p-n.

Распиновка порта RS232:

Номер контакта Сигнал
1 CD
2 RxD
3 TxD
4 DTR
5 GND
6 DSR
7 RTS
8 CTS
9 RI

Распиновка порта программирования:

Номер контакта Сигнал
1 V\_IN\_3.3
2 GND
3 RxD
4 GND
5 TxD
6 GND
7 TEST(TCK)
8 GND
9 RESET
10 GND

Печатную плату для этого программатора я не делал, схема собиралась на
макетной плате. Но если кому-то потребуется, могу развести и выложить.
Пишите в комментариях.