第一次写博客记录以下自己的学习历程,这几天在学习ESP8266的SDK开发,之前使用的是乐鑫提供的SDK,这次使用的是第三方的SDK驱动ST7789显示屏,8266与显示屏通信方式使用的是SPI方式,在esp-open-rtos中提供了SPI的相关demo,所以做起来也是比较方便的。
环境准备:esp-open-sdk(开始使用的是乐鑫提供的SDK,结果编译总通不过)
esp8266模块,ST7789显示屏
1.esp8266 SPI
ESP8266包含两个SPI总线,其中一个是系统总线,另一个是用户总线,系统总线主要与片外flash通信,扩展存储空间,可以使用该总线配置SPIFFS文件系统,用户总线主要用于与其他SPI设备进行通信,ESP8266的各总线接口不像ESP32那样可以映射到指定管脚,而是每条总线都有其对应的引脚。所以使用的是用户总线BUS ID:1连接的显示屏,ESP8266 SPI1管脚如下:
MISO: GPIO12
MOSI: GPIO13
SCK: GPIO14
CS0: GPIO15
使用ST7789时,除使用SPI总线管脚外还有另外的RS(命令/数据选择引脚),RST(复位引脚)
2.代码编写
(1)管脚使能以及初始化SPI总线,SPI初始化根据个人需要,具体参数使用可以在esp-open-rtos/core/include/esp/spi.h中查到,该文件中有详细说明以及用例。
spi_init(1, SPI_MODE0, SPI_FREQ_DIV_1M, 1, SPI_BIG_ENDIAN, false);
(2)发送命令和数据,发送命令和数据主要是先通过RS选择是数据还是命令,然后通过SPI1发送
void writecmd(uint8_t cmd)
{
gpio_write(LCD_RS, CMD_MODE); //RS line output low
spi_transfer_8(SPI_BUS,cmd); //send cmd to lcd
gpio_write(LCD_RS, DATA_MODE); //RS line output high
}
void writedata(uint8_t data)
{
gpio_write(LCD_RS, DATA_MODE); //set as data transfer mode
spi_transfer_8(SPI_BUS,data); //send data
gpio_write(LCD_RS,DATA_MODE); //set as data transfermode
}
void writedata16(uint16_t data)
{
gpio_write(LCD_RS, DATA_MODE); //set as data transfer mode
spi_transfer_16(SPI_BUS,data); //send data
gpio_write(LCD_RS,DATA_MODE); //set as data transfermode
}
然后就可以对LCD发送命令和数据了,发送相关指令初始化LCD后就可以使用STM32上提供的相关函数来进行刷屏和绘图操作了