And maybe at least mention the Standard Peripheral Libraries that ST wants people to use. Even though they suck. 
I agree The Standard Peripheral Library is not great.
I do like ST's STM32CubeMX initialization code generator http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF259242. It's good for choosing which pins are used for each peripheral and generating a first cut of initialization code.
STM32Cube includes the STM32CubeMX which is a graphical software configuration tool that allows generating C initialization code using graphical wizards.
I also like STM Studio http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC1807/SS1747/PF251373.
STMicroelectronics STM Studio helps debug and diagnose STM32 applications while they are running by reading and and displaying their variables in real-time
STM Studio is a non-intrusive tool, preserving the real-time behavior of applications.
The ARM mbed development site is a great way to try bare metal STM32 with an Arduino like environment. You don't need to install any software, just develop on the website and down load the bin file. If you choose, you can install the open source libraries locally. With Nucleo you just drag and drop the bin file into the Nucleo mass storage volume that appears on your computer.
Here is output from a simple test program that writes the time in seconds and analog value to Serial monitor while blinking an led. See the attached screen dump of the development environment.
Hello World !
1 seconds. a0: 982
2 seconds. a0: 1012
3 seconds. a0: 1013
4 seconds. a0: 1013
5 seconds. a0: 1034
6 seconds. a0: 1008
If you click on a class, you get the documentation. I attached the top of the documentation for Serial.
There are many third party libraries available. For example there are FAT files systems libraries for SD cards, USB keys, and other devices.
The total cost here was $10.33 for a NUCLEO_F401RE with 512 KB of flash and 96 KB of RAM.