Hello, i would like to add some lines to the FSMC and Display connectivity. At first, i wondering why the GCC Compiler is prefered to use in combination of the worst IDE like "Eclipse" and their commons. To get the IDE works with the JTAG and the Environment Setup is done, a couple of hours could be passed. For a beginner in Cortex-M programming, the homogene IDE like µVision from Keil make the start easier. The next Point, same reason is the use of the CMSIS-Library and Std-Library instead Manipulation the bits directy. You must beware about the huge amount of available Registers and their names. A good example that demonstrate what i mean is the FSMC init Structure that Needs to be filled with valid Parameters. Every Screw thats required to be turn should be self described by a regular name. This example do a part of the FSMC Setup by using a structure to map the FSMC lines. Looks very understandable, or not ? GPIO_PinAFConfig ( GPIOD, GPIO_PinSource9, GPIO_AF_FSMC ); // D14 // GPIO-PortD Pin9 will used as FSMC GPIO_PinAFConfig ( GPIOD, GPIO_PinSource10, GPIO_AF_FSMC ); // D15 GPIO_PinAFConfig ( GPIOD, GPIO_PinSource11, GPIO_AF_FSMC ); // A16 // use Address A16 as /RS of Display GPIO_PinAFConfig ( GPIOD, GPIO_PinSource14, GPIO_AF_FSMC ); // D0 GPIO_PinAFConfig ( GPIOD, GPIO_PinSource15, GPIO_AF_FSMC ); // D1 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 |GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15; // i will use this PortPins to setup GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; // use the alterative pin function GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; // 100Mhz Clock of I/O Flip-Flop GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // I/O Output will be Push-Pulled GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // no Pull-up or Pull-Down Resistor used GPIO_Init ( GPIOD , &GPIO_InitStructure ); // and finaly i will init the GPIO-Port D with my setup structure. i don't understand why many programmers prefere to use the old school bit names and their maniplation like this: FSMC_Bank1->BTCR[FSMC_Bank + 1] = (FSMC_BTR1_ADDSET_2 | FSMC_BTR1_ADDSET_1) | (FSMC_BTR1_DATAST_2 | FSMC_BTR1_DATAST_1) | FSMC_BTR1_BUSTURN_0; Is line this understandable without a Manual, that further describe the register Function and bit Position. Understand me right - there is nothing wrong to do like this - the final result of the preprocessor of both methodes looks equal. The code result would be similar because both are just preprocessor definitions and declarations. So, it's easier to understand what you had programmed and finaly set, if the CMSIS Lib is used instead direct bit Manipulation.