Ok im getting tired of how that CMSIS is setup and find it to be more of hassle.Here is a simple but very useful function:
void ConfigPin(GPIO_TypeDef *myGPIO, uint32_t PIN, uint32_t MODE, uint32_t SPEED, uint32_t PUPD) { /* myGPIO: The GPIOx port for the selected pin MODE: 0 = INPUT .... 1 = OUTPUT .... 2 = ALTERNATE FUNCTION .... 3 = ANALOG SPEED: 0 = 2MHz (Low Speed) .... 1 = 25MHz (Med. Speed) .... 2 = 50MHz (Fast Speed) .... 3 = 100MHz/80MHz (High Speed)(100MHz(30pf) - 80MHz(15pf)) PUPD: 0 = No Pull-Up / No Pull-Down .... 1 = Pull-Up Enabled .... 2 = Pull-Down Enabled .... 3 = Reserved */ myGPIO->MODER |= (MODE << (PIN * 2));//OUTPUT myGPIO->OSPEEDR |= (SPEED << (PIN * 2));//50MHz myGPIO->PUPDR |= (PUPD << (PIN * 2)); //Set it for NO PUPD }