Can you reduce baudrate? If you reduce baudrate to 9600 (or lower is possible), software UART is relative easy to implement and lower baudrates are less sensitive on baudrate error. Fastest baudrate implementation depends on the rest of the application and MCU speed and sometime is hard to implement or impossible. Another important thing is what type communication you can expect from your modules. If you have situation to receive byte while sending another byte or vice versa, your implementation can be more complicate. One way to solve problem is sampling your data stream with timer tick interrupt with e.g. 4x (or more is better) baudrate speed. send and receive function in one interrupt. First, you should be detail analyse your protocol with modules and it will start point for design.