Использование mbed кода в собственном проекте на STM32 — опыт разгона китайского LCD

. , , , 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.

Source: https://habr.com/ru/post/id390909/


All Articles