Ok, adding a new theory here on these odd analog readings...
Over in this thread:
@avidan has been having some problems with a Thermistor set up on one of the analog inputs. It's basically a resistor divider from 3.3V to GND. After going around and round on that thread I realized I have a crappy meat probe that I wouldn't mind Sparkulating
(action verb?), so I set off last night to make it happen. To my surprise I found our old friend "odd analog readings" and recalled all of the things that we've come up with in this thread.
I was getting readings that were about 0.24V lower than they should be, but that makes a huge problem with thermistors.
Adding a 0.1uF cap from the A3 input to GND (and not very cleanly I might add) solved the problem and my readings were very consistently close to expected.
Going back to the ADC setup... Odd analog readings [SOLVED] - #21 by BDub - Troubleshooting - Particle
My new theory is that adding a 0.1uF cap to the A3 input (which in this thermistor circuit has a higher impedance than is expected for the ADC setup) effectively lowers the impedance enough that the sample and hold cap inside the STM32's ADC charges up completely. I suspect that if I changed the ADC setup to allow for higher impedances, the readings would be closer to expected... but some small level of capacitance to GND on each analog input should help in all ADC setup cases. Keep in mind the ADC's sample and hold capacitance is only 8pF, so it doesn't take much to charge it up, but the STM32 does need to allow enough time for that to happen as well. When it doesn't allow enough time, lowering the impedance effectively reduces the RC time constant that governs the speed at which a capacitor charges up.
Probably still helps the noisiness of the breadboard as well.