Обычно у STM32 не возникает надобности в использовании программных UARTов, ведь обычно они уже имеют несколько аппаратных модулей, которые и используются. Но, в малоногих контроллерах может быть только один UART, либо плата может быть разведена с ошибками (не те выводы исопльзованы), в этом случае можно применить программную реализация универсального асинхронного приемопередатчика, как это просто сделать здесь подробного рассматривается.