I love the emphasis on breaking out all of the GPIO pins, it is incredible today how many dev boards either leave pins as not connected or hard wire them (no jumper to disable) to some onboad peripheral. Looking at you stm32 discovery boards...
The Discovery boards are a bit of a minefield over which pins you're allowed to use. It can cause surprising problems if you don't check the dev board manual's pin table, or don't know how to interpret it. Additionally, you need to plug the jumpers into the bottom of the board; it looks like you can use the top, but the jumpers tend to fall out! The nucelo ones are even weirder. The pins aren't labeled on the board,…
Nah, you got it all wrong. You need to pull up the devboard's Pinout, User Guide, and Overview documents. Sometimes cross reference those to the devboard's schematic for the trickier pins. Alongside the specific User Guide and Programming manuals for the MCU on the board. Plus the MCU's guides don't typically cover stuff that's common to all MCUs in a particular Cortex family, so you need to pull up the Cortex documentation. And then, finally, the errata documents.
Typically speaking you'll need to cross reference across all of those documents, all at once, and several places _within_ each document ... all at once.
That's assuming you're using one of the more common pins. If you've decided to dabble with any of the more exotic functionalities you'll want to pull up one or several Application documents, as the former pile of documentation is unlikely to accurately describe the necessary "voodoo" to get things working.
(I kinda wish this comment was a joke ... but it's not. The STM line of chips are truly wonderful machines but ... golly are they a pain to develop on. There's a reason most people just use Arduino to plaster over this stuff.)
EDIT: Oh and make sure you don't confuse the labeling of the pins on the board, with the label of the pins on the pinout, with the label of the pins on the schematic, with the label of the pins in the registers, with the label of the pins in the various HAL libraries...
EDIT2: Geez, how could I forgot the most crucial thing: you of course have to modulate all of these by which specific package of the chip you're actually working with. No sense spending half an hour of your life wadding through all of this documentation only to get to the dev board pinout to find that pin is only available on the largest package and the dev board only came with the 2nd to largest package... (and also doesn't include that one peripheral you were planning to use because ... reasons).