«

在STM32上使用U8g2图形库并配合DMA发送显示数据(LL库)

izilzty 发布于 阅读:5160


本文将以STM32F103C8T6和GP1287VFD屏为例,说明如何使用DMA来传输U8g2的显示数据。

在U8g2内有一块显示缓冲区,大小和屏幕相同,所有绘制操作均是在此缓冲区上进行的,最后使用SendBuffer();将缓冲区的内容发送到屏幕。

如果想要使用DMA来发送数据,那肯定不能直接将内部的缓冲区发出去,一是因为所有操作都是在缓冲区进行的,如果在发送过程中数据被修改,会造成显示混乱。二是对于大部分屏幕来说,内部缓冲区的布局和屏幕所需要的布局是不相同的,不能直接发送。

我们可以将内部的缓冲区内容复制出来,经过整理,然后再使用DMA统一发送到屏幕,这样可以同时解决上面所说的两个问题。但是这样也有缺点,那就是要再额外占用一块内存才可以,属于用空间换时间的操作了。

在开始前,请先确定使用基础工程可以点亮屏幕。关于基础工程的创建,请参考前一篇文章:https://www.izilzty.com/?post=14 。确定功能正常后,我们将在此基础工程上进行修改。

最后附有创建好的测试工程,如有需要请自行下载。文章所有步骤都有操作验证一遍,但是不排除遗漏的可能,如果按照文章建立工程无法点亮屏幕,但使用后面所附的示例工程可以点亮的话请留言说明,我会再次检查。

1、修改CubeMX创建工程

2、添加DMA传输代码

3、使用DMA传输在屏幕上显示“HelloWorld”

4、U8g2显存说明

5、其他注意事项

END、示例工程下载