完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前天学习了韦东山老师的嵌入式linux教学的一期视频中关于LCD的刷新显示章节,对于显示的机制有了一些略微的理解,回想起来之前一直在用的OLED不禁想要去看看有没有人做过相应的程序, 结果没有找到! 于是自己做了一个底层的代码。
还是老规矩 先来展示效果图 图片展示的是OLED 的显示数字和字符串,OLED屏幕的刷新频率达到了惊人的40Hz,而且几乎不占用 CPU时间(数据全部走DMA) 我的程序是基于其他大佬的硬件IIC和DMA程序改编的,程序的整体框架如下 在编写用户程序之前 我需要先实现 单片机内存到 OLED内存的这个工作,这一部分我选择使用的是STM32F407的硬件IIC 集合DMA来实现的,虽然网上对STM32F407的硬件IIC诟病比较大,但是我测试的时候还是勉强可以接受,代码是借鉴的网上大佬的,我拿到手就可以实现DMA对IIC设备的读写操作了。 在解决这一部分问题时 我借鉴了 大佬的经验 博客地址如下 https://blog.csdn.net/qq_24896591/article/details/86287443 (介绍STM32F4 硬件IIC +DMA的) 在解决了硬件IIC向 OLED 内存写数据的问题后,我发现OLED的数据只能刷新一行(最上面的 128*8的区域),效果暂且不展示,于是去查询各种资料 我查询到了一个重要的信息 : SSD1306 控制器的刷新模式是行刷新! https://blog.csdn.net/W1107101310/article/details/79829063 仔细看了一下确实是这样! ,然后我再初始化函数里面添加了 修改地址模式 通过修改指令,我实现了对Gram的整体刷新!(插播一句 OLED内部的叫 GDDRAM) 刷新过程如下: 我向Gram里面一次性的写入1024个 byte 刚好对应于整个GDRAM,可以一次刷新一整屏。而这个过程消耗的时间几乎可以忽略(甚至我可以配置一个DMA 的循环模式,自动刷新!!!) 接下来就是处理现实函数部分了,首先要处理的就是ASCII码的显示,也就是我们的showchar 函数,这一部分的实现我参考了中景园的参考例程(字库也是直接copy的),相比较于官方的代码 我自己的代码实现起来更加的容易 我的代码里面还加入了反白的选项,可以让字符反白显示(这里的反白是基于软件反白的,不是使用指令操作 OLED寄存器实现的!)实现了 字符显示函数,剩下的 显示字符串和 数字的函数就简单了!,字符串显示的函数,几乎是完全照搬的官方代码,但是数字显示部分的函数加进去了我的一些个人的解决方案,数字显示部分代码如下 我个人感觉代码用起来还行,前面补的几个0影响不是很大。。。。(借口,只是懒得解决而已) 之后的画点画圆的代码是从 正点原子的代码里面抄的,,,, 我记得原子哥将视频的时候好像说自己也是抄的。。。 算法这种东西就交给大佬们去解决了,咱也看不懂, 咱也想不明白, 确实可以运行。 不过在这之前我们还是需要完善一个底层的画点的函数,这个函数实现起来还是很简单的 这就是我的画点的函数,只有一行代码, 一次可以添加一个点。。。。 只要在我们的内存buffer中的指定值的指定位置1,剩下的DMA 这个苦力会去给我们完成! 有了画点函数的支持,我们的画圆,画线,画正方形 等等函数都不是梦! 然后就有了我先前展示的第二章图片 接下来是反白显示的介绍,反白显示也是很简单就实现了的,,, 主要的代码就是一句话 , 给我们的字库数据按位取反。。 至此,程序的实现就大致完成了。 代码的链接 在我整理完会上传,目前还是处于编写阶段,还有待优化。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1097 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1111 浏览 1 评论
549 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
415 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
996 浏览 2 评论
1594浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
263浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
276浏览 3评论
245浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
238浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-16 20:43 , Processed in 0.627422 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号