stm32驱动_嵌入式STM32驱动ST77xx系列LCD刷图算法优化

本文介绍了如何使用STM32的SPI接口驱动LCD并进行初始化,针对传统刷图效率低下的问题,提出了一种优化方法。通过改变16位图片的取模方式为高位在前,结合32位芯片SPI的最大写入能力,实现了更高效的刷图算法,显著提升了刷图速度,使得显示效果更加流畅。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、初始化

利用STM32的IO口将SPI的驱动写好,并完成LCD的初始化

二、刷图

1.常规方法

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

52c5824f529544452eb78569755d8b2e.png

取模软件

//取模方式 水平扫描 从左到右 低位在前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.优化方法

提高刷图效率通过改变取模方式和优化刷图算法来解决,

取模方式:由左往右,从上到下,低位在前 改为 从左往右,从上到下,高位在前

71050eef37d906260b79977bc6dd74a3.png

更改后的取模方式

刷图算法: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值