The problem is that the external pulldown is FAR from ideal. It creates a useless (at best) voltage divider. It wastes current whenever the pin is high. It’s not really an option, I don’t think, on analog inputs. I don’t know how one would deal with it.
In my case, I would’ve had 16 solenoids pull open 16 water valves, only to have them crash closed all at once seconds later. This would have been disastrous for my setup (as in, damaging to the water lines). I ended up using two shift registers instead of using GPIO directly, but that shouldn’t be strictly necessary.
I can’t find clear documentation for either LPC2387 nor STM32 on what the internal firmware does with pins on startup. Anyone know off the top of their head?
Note that we’re not the only ones with this “issue”. The Netduino people deal with it. It seems to me (and I’ve got practially no experience here) that the “normal” thing that microncontrollers do is set pins to high-Z on reset (input with no pullup/pulldown). This has the effect that they “float” somewhat randomly. It’s more useful in specific settings (where each pin that is being used is being used for a specific use), but makes it more complex to do general prototyping (because you’d need to use external pullups/pulldowns for pretty much every GPIO pin you used). Just my interpretation.
I asked a question some time ago about this very phenomenon on electronics.stackexchange: http://electronics.stackexchange.com/questions/17377/pulldown-resistor-on-mcu-output
With OSS systems like Cerberus and Hydra, one could modify the NETMF to set pins to do whatever they liked on reset. For production systems, it seems to me that the standard high-Z would be best.
We could petition the NETMF team to change this, but I doubt we’d get very far, as it’d be a massively breaking change with previous releases.
The next best strategy seems to be to design your GPIO circuits such that they’re “active low”, meaning, use PNP transistors instead of NPN transistors. I know, that doesn’t help with analog inputs.