I've lately been experimenting with the F0 series (STM32F030F4P6 in specific) without using the standard peripheral library; just direct register access (well I still use the basic core_cm0.h which has a few basic routines for the NVIC which I haven't bothered with doing direct register access for).
Getting the basic UART functional isn't particularly difficult (haven't done anything with flow control yet as I'm currently just using it for debug); do have a completely interrupt driven TX and RX with FIFO buffers - which I have tied to stdio for printf/scanf. An even more basic polling solution was even easier.
The procedure for basic polling UART is fairly simple:
For transmitting you then need to poll the TXE bit of USARTs ISR register, once that is set you can put the byte to be sent into the TDR register - writing to the TDR will automatically clear the TXE bit of the ISR register.
For receiving you would poll the RXIE bit of the ISR register, once that is set you can read the incoming byte from the RDR register.
Once you have the polling version working it isn't too difficult to work with the interrupts - at least if you've got the basic flow of the NVIC and interrupts figured out.
I could post some of my code for the F0, but I'm not sure it would be great for a few reasons:
TL;DR - I have some code that you may be able to use as a guide - but it isn't for that exact chip so it won't be usable directly; it's also written in a slightly unconventional manner. In a week or so I may have more conventional code to do the same thing. If you're really interested let me know and I can find somewhere to post it.