STM32L0/FTDI UART Transmit doesn't work
It seems to be signal level issue. If the oscope screenshot indicates correctly, then you have 1V difference between low/high (1 division), which is definitely too low (SIM800L has 0.7V max for low and 2.1 min for high. Everything inbetween is noise. 

Disconnect FTDI monitoring and measure levels. You might need pull-up on UART lines to some known level (say 3V3).

Even if you have 2V/div setting on oscilloscope, it seems rather close to 2V1 minimum. And the short (not full-level) peaks in the middle of the packet also are in the gray area.



EDIT

There seems to be a typo in the spec sheet of SIM800L. It's 2.4V high and 0.4V low.
Another thing is that arduino uses TTL (5V), while STM has 3V3. Some of the bits might be fine from the STM perspective, while for Arduino they are in the gray area and are discarded as noise, hence the weird characters