I've seen a few reference to GPIO only being able to work with binary values, but other posts which say the value can be from 0-255. I'm assuming this is the difference between analog and digital GPIO.
Raspberry Pi OS is a free, Debian-based operating system optimised for the Raspberry Pi hardware. Raspberry Pi OS supports over 35,000 Debian packages. We recommend Raspberry Pi OS for most Raspberry Pi use cases.
These things are pretty much unrelated to each other. GPIO is a General Purpose IO - meaning these are not connected to a specialized interface. PIO is Programmable IO, meaning that it can be connected to any interface present on the chip. The latter present mostly on FPGAs, while GPIO is on microcontrollers and such.
A GPIO reference can be accessed on your Raspberry Pi by opening a terminal window and running the command pinout. This tool is provided by the GPIO Zero Python library, which is installed by default in Raspberry Pi OS.
Reading through the STM32F051 manual, it looks like it's possible to configure the same alternate function on two pins; for example, you could have multiple USART1_TX pins at the same time. Or for
GPIO pins on microcontrollers and FPGAs are often grouped together in what is sometimes referred to as a "Bank". All the pins within a bank will have their own power supply pin/s.
Of all the GPIO registers available, I do not understand two: GPIO_PUPDR and GPIO_OTYPE which are respectively the "pull-up/pull-down register" and the "output type register".
GPIO Speed is the maximum frequency the GPIO can produce. Lower settings can save power. Output type is whether the pin asserts highs and lows (push pull), or whether the output turns on the gate of a FET that is attached to the pin at the drain (Open drain). This can be convenient if you need any attached pin to be able to pull a bus low without short in out other pins. Pull up resistors ...