Hi, I was able to increase the SPI speed (SPI_BaudRatePrescaler_2) by changing the pad config: static inline void init_board(GDisplay *g) { (void) g; g->board = 0; //Set up the pins.. palSetPadMode(SPI_PORT, CS_PAD, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); palSetPadMode(SPI_PORT, SCK_PAD, PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); palSetPadMode(SPI_PORT, MISO_PAD, PAL_MODE_ALTERNATE(5)); palSetPadMode(SPI_PORT, MOSI_PAD, PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); palSetPadMode(RESET_PORT, RESET_PAD, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); palSetPadMode(DNC_PORT, DNC_PAD, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); //Set pins. palSetPad(CS_PORT, CS_PAD); palSetPad(RESET_PORT, RESET_PAD); palClearPad(DNC_PORT, DNC_PAD); //Start SPI1 with our config. spiStart(SPI_DRIVER, &spi_cfg); spiSelect(SPI_DRIVER); /* Slave Select assertion. */ } And did some marginal optimalisations: static inline void write_index(GDisplay *g, uint8_t index) { (void) g; palClearPad(DNC_PORT, DNC_PAD); spiSend(SPI_DRIVER, 1, &index); } static inline void write_data(GDisplay *g, uint8_t data) { (void) g; palSetPad(DNC_PORT, DNC_PAD); spiSend(SPI_DRIVER, 1, &data); } But the speed is still (visually) slower then my mbed demo. Both are compiled with µVision 5.13 if this should influence something. Maybe a µGFX setting? DMA (but GDISP_USE_DMA = TRUE)?