I'm currently exploring embedded programming with ARM processors. My embedded systems class has us programming on an Atmel SAMD20 (Cortex M0+). Our lab manual explains in detail how to utilize an Atmel library to access the registers on the processor to control GPIO pins.
What I've been trying to learn on my spare time is how to get up and running on my own with a different microcontroller, knowing that the code will be somewhat different. I read about CMSIS which seems like a convenient way to start programming on new microcontrollers using the same ARM core. However, different silicon vendors will have a different number of GPIO ports/peripherals connected to the microcontroller. How can CMSIS keep consistency between these GPIO ports when they are different between different chips? Or does CMSIS not handle GPIO ports and only things pertaining to the ARM Core?
If the latter is the case, does this mean I must look at vendor datasheets to understand how to code a specific microcontroller? I am looking at STM32 microcontrollers at the moment and am having trouble locating anything that documents their header files. I am a little lost and overwhelmed at the moment, so any advice and direction would be appreciated.