一、初始化
利用STM32的IO口将SPI的驱动写好,并完成LCD的初始化
二、刷图
1.常规方法
各大论坛大多数帖子分享的算法都是将16位图片从左到右 从上到下 低位在前的取模,然后在一个点一个点的刷入LCD,如下面代码所示,比如一张240*240的图片就有 240*240=57600个点因为是16位图,那么一个点就是2个Byte,一共有57600*2=115200个Byte,这样极大的影响了刷图效率,最后呈现的现象就是拉窗帘一样,32位芯片的SPI速度都不低于24MHz,可以改进算法,让刷图变得更加流程。

取模软件
//取模方式 水平扫描 从左到右 低位在前void showimage(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1,const uint8_t *p) {uint32_t i; uint16_t display_x = 0,display_y = 0;uint8_t picH,picL;oled_set_pos( LCD_W_Start + x0, y0, LCD_W_Start + (x1-1), y1-1);//坐标设置display_x = (x1-x0);display_y = (y1-y0); for(i=0;i
2.优化方法
提高刷图效率通过改变取模方式和优化刷图算法来解决,
取模方式:由左往右,从上到下,低位在前 改为 从左往右,从上到下,高位在前

更改后的取模方式
刷图算法:32位芯片的SPI写数据一次最大可写入4KB,就是4096个Byte,记住这个4096是一个很特殊的单位,后面介绍外部FLASH需要用到,优化完的算法就是这样,最后的效果会非常的丝滑。
void lcd_show_ram_image(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1,const unsigned char *data){oled_set_pos_1(LCD_W_Start + x0, y0, LCD_W_Start + x1-1, y1-1);//坐标设置LCD_DC_DATA;LCD_CS_CLR_1; if(!((x1-x0)*(y1-y0)*2/4095)){spi_write((void *)data,((x1-x0)*(y1-y0)*2%4095));LCD_CS_SET_1;return ;}else{for(uint8_t line =0;line