硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1061|回复: 5
收起左侧

[有问必答] sh1108驱动的OLED如何使用DMA刷新全屏

[复制链接]

17

主题

42

回帖

93

积分

初级会员

积分
93
发表于 2024-10-23 11:48:46 | 显示全部楼层 |阅读模式

以sh1108为主控的OLED每次只能刷新一行或一列,目前的刷新方式是使用硬件SPI每次发送一字节,现在想使用DMA刷新全屏,想法是使用DMA刷新一行后再在中断里换行,直到刷新完全屏,弄了几次没成功,有没有代码可以参考一下,希望大佬指点一下

[C] 纯文本查看 复制代码
uint8_t OLED_GRAM[128][20];
void OLED_WR_Byte(uint8_t dat,uint8_t cmd)
{	
	uint8_t i;			  
	if(cmd)
	  OLED_DC_Set();
	else
	  OLED_DC_Clr();
	OLED_CS_Clr();
//	SPI1_WriteByte(dat);	
	HAL_SPI_Transmit(&hspi1,&dat,1, 1000);	
	OLED_CS_Set();
	OLED_DC_Set();   	  
}

//更新显存到OLED	
void OLED_Refresh(void)
{
	uint8_t i,n;
	for(i=0;i<20;i++)
	{
	   OLED_WR_Byte(0xb0,OLED_CMD); //设置行起始地址
		OLED_WR_Byte(i,OLED_CMD); 
	   OLED_WR_Byte(0x00,OLED_CMD);   //设置低列起始地址
	   OLED_WR_Byte(0x11,OLED_CMD);   //设置高列起始地址
	   for(n=0;n<128;n++)
		 OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);
  }
}

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2024-10-23 13:09:39 | 显示全部楼层
OLED使用DMA并不方便
回复

使用道具 举报

17

主题

42

回帖

93

积分

初级会员

积分
93
 楼主| 发表于 2024-10-23 13:19:19 | 显示全部楼层
eric2013 发表于 2024-10-23 13:09
OLED使用DMA并不方便

为啥,我看网上好多使用DMA后帧率爆涨
回复

使用道具 举报

2

主题

8

回帖

14

积分

新手上路

积分
14
发表于 2024-10-23 15:27:40 | 显示全部楼层
没用过sh1108驱动的不清楚,SD1306的0.96屏是可以DMA一次刷整屏的
回复

使用道具 举报

0

主题

50

回帖

50

积分

初级会员

积分
50
发表于 2024-10-23 16:32:18 | 显示全部楼层
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7385


刚查到的资料,讲的是sh1106,参考一下,大概意思是说sh1106不能采用水平地址扫描的方式,而且起始列坐标要右移2才能正常显示

可以每页128字节开启一次dma发送,但是还是要循环8次,感觉没啥必要用dma了,我把iic速率设置到了400k一样很快,大概28ms一整屏数据
回复

使用道具 举报

0

主题

50

回帖

50

积分

初级会员

积分
50
发表于 2024-10-23 16:33:00 | 显示全部楼层
厉飞雨 发表于 2024-10-23 13:19
为啥,我看网上好多使用DMA后帧率爆涨

ssd1306可以这么搞
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 06:33 , Processed in 0.043962 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表