. , , , arduino mbed. LCD ILI9341 STM32L476G DISCOVERY, - ST , mbed, . 27 fps.

ST Microelectronics , , , , . — 
STM32L476G DISCOVERY. — 32 ARM 80MHz . , . LCD 320 240, SPI . , mbed, 
. 
Mbed — , , , mbed- , USB . , . -, mbed-. -, , mbed , , ST. , mbed, ( ) , . , , , 
- ST 10 .
. mbed , -. , DigitalOut . . DigitalOut PinName, — . DigitalOut , - — , . , DigitalOut main. , , . - , , main . ST ( HAL — hardware abstraction level) , , . - , , , . , ( ST C). 
CubeMX, . — , .
mbed HAL ST, . , SPI ( ) 
spi_api.c. spi_init SPI , , init_spi, . 3 SPI
static SPI_HandleTypeDef SpiHandle;
. , , , , .
mbed . ST, 
CubeMX. LCD ST , . — , mbed, , . — mbed . , , mbed LCD SPI. , . — , . — 
wait_api.h. - . mbed . , , . , , — PinName, , , ( SPI), .
class PinName {
public:
	PinName() : m_port(0), m_pin(0), m_obj(0) {}
	PinName(GPIO_TypeDef* port, unsigned pin, void* obj = 0)
		: m_port(port), m_pin(pin), m_obj(obj)
		{
			assert_param(m_port != 0);
		}
	GPIO_TypeDef* m_port;
	unsigned      m_pin;
	void*         m_obj;
	static PinName not_connected;
};
. HAL, , inline, .
class DigitalOut {
public:
	DigitalOut(GPIO_TypeDef* port, unsigned pin)
		: m_port(port), m_pin(pin)
		{
			assert_param(m_port != 0);
		}
	DigitalOut(PinName const& N)
		: m_port(N.m_port), m_pin(N.m_pin)
		{
			assert_param(m_port != 0);
		}
	void operator =(int bit) {
		if (bit) m_port->BSRR = m_pin;
		else     m_port->BRR  = m_pin;
	}
private:
	GPIO_TypeDef* m_port;
	unsigned      m_pin;
};
SPI , 
. , . . 16 , 8 , — 4 . , , 
compat. 
. 
, , .
LCD , . , — SPI, 10MHz, . , 40MHz — , 80MHz. , 100x100 . (, , ). — 11fps 32fps, , 16 . , 
. , , 16 . mbed API. 
SPI , , , . , . SPI , . , , 27fps, .
. IAR Embedded Workbench for ARM 7.50.2. ST. , LCD 
lcd.h.