找回密码
 立即注册
楼主: 大刀阔斧

【开源】GUI-OLED12864: U8g2/OLED12864 for STC32G12K128

[复制链接]
  • 打卡等级:以坛为家III
  • 打卡总天数:605
  • 最近打卡:2025-10-15 13:39:10
已绑定手机

8

主题

119

回帖

2879

积分

金牌会员

积分
2879
发表于 2025-7-12 22:45:06 | 显示全部楼层
这个OLED12864 for STC32G12K128是不是直接用到屠龙刀3上,不要做任何修改?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:591
  • 最近打卡:2025-10-15 09:49:21
已绑定手机
已实名认证

116

主题

2889

回帖

7364

积分

版主

积分
7364
发表于 2025-9-8 15:35:22 | 显示全部楼层
11318*** 发表于 2025-1-16 12:11
使用DMA是为了空出CPU时间来。 我用SPI DMA的U8G2例程做了测试,发现每次刷屏,即完成调用 u8g2.firstPage( ...

使用显存方式才能解放CPU,简单来讲,就是将绘制和显示分开
这需要将DMA设置为1024,建立一个显存,这样每次只需要一个触发发送指令即可实现刷屏。
在此过程中,可以对显存进行改写,类似同步进行操作,DMA负责刷屏(也就是之前说的等待),CPU负责处理图像绘制部分
以下是我之前做过的一个OLED显示,就是采用的DMA整屏刷新
可以做到处理和显示还有其他任务都同时进行(采用随机数满屏绘制矩形)

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-10-02 16:24:55

0

主题

11

回帖

70

积分

等待验证会员

积分
70
发表于 2025-10-2 16:24:55 | 显示全部楼层
王*** 发表于 2025-9-8 15:35
使用显存方式才能解放CPU,简单来讲,就是将绘制和显示分开
这需要将DMA设置为1024,建立一个显存,这样每 ...

我觉得您说得对,我对工程进行了如下修改:
1 将SPI和DMA配置打开,DMA的BUF设置成1024
2 将U8G2的SETUP函数选择F结尾的,即使用全缓冲。
3 将发送数据到屏幕的方式由FIRSTPAGE() NEXTPAGE() 改为clearbuffer()  和sendbuffer().
编译成功后,没能成功显示,白屏了。我在想会不会是因为DMA发送数据时不会等待,而U8G2在底层会自动对指令/数据进行切换,数据发送不等待就导致DC切换时时序错误。
另外我也没有加入RTOS。
再请大佬指导一下。

点评

dma发送需要读取dma的发送完成标志位 需要类似的替换原来等待的部分,不然可能会造成没读到完成标志位一直等待或者一直发送 dma的发送和正常的速度一样,也是需要时间的,只不过dma的过程中,cpu可以干点别的事情 这  详情 回复 发表于 2025-10-2 20:27
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:591
  • 最近打卡:2025-10-15 09:49:21
已绑定手机
已实名认证

116

主题

2889

回帖

7364

积分

版主

积分
7364
发表于 2025-10-2 20:27:04 | 显示全部楼层
11318*** 发表于 2025-10-2 16:24
我觉得您说得对,我对工程进行了如下修改:
1 将SPI和DMA配置打开,DMA的BUF设置成1024
2 将U8G2的SETUP ...

dma发送需要读取dma的发送完成标志位
需要类似的替换原来等待的部分,不然可能会造成没读到完成标志位一直等待或者一直发送
dma的发送和正常的速度一样,也是需要时间的,只不过dma的过程中,cpu可以干点别的事情
这里可能要处理一下发送逻辑,在每次sendbuff的时候判断dma是否已经完成,已完成就触发一次再次发送,没完成就不发送本次dma,这样可以最大化的利用时间
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-16 05:42 , Processed in 0.111739 second(s), 69 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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