Hi,

das
Code:
Register |= ~(1<<Bit);
löscht ein Bit und setzt es nicht! Der |-Strich ist ein logisches Oder, die Tilde ~ eine logische Negation.
Mit diesem Konstrukt kannst du alle anderen Bits setzen (sofern sie das noch nicht sind), genau das benötigte Bit wird aber nicht gesetzt.
Um ein Bit zu setzen musst du schreiben:
Code:
Register |= (1<<Bit);
also obiges, nur ohne die Tilde.

Dinge wie
Code:
GPIO_MODE_AF_PP
sind sog. Enums (Enumeration), also chronologische Gebilde, die irgendwo in irgendeiner Datei definiert werden. Wo genau und wie genau das funktioniert kann ich dir jetzt nicht sagen, sorry.