查看: 1208|回复: 0

[原创] 【NXP共享】+LPC845驱动OLED时遇到的问题

[复制链接]
  • TA的每日心情
    开心
    13 小时前
  • 签到天数: 1096 天

    连续签到: 14 天

    [LV.10]以坛为家III

    28

    主题

    4259

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5762
    最后登录
    2025-7-22
    发表于 2024-6-10 13:29:20 | 显示全部楼层 |阅读模式
    本帖最后由 suncat0504 于 2024-6-10 13:34 编辑

    为了调试程序以及显示测试信息,给LPC845赔了一个OLED的显示。使用P0.16和 P0.17作为SCL和SDA驱动0.96英寸的OLED。
    图片1.png
    程序可以参考其他ARM32下。在把程序弄到工程里,并进行必要的改编后,运新程序并没有获得想要的结果。
    静下心来考虑了下,觉得是时序匹配问题的可能性最大。于是修改脉冲时序,加上以前常用的循环延时处理,结果依然不成功。本来觉的十拿九稳的事情,结果在折腾了几个小时后,终于还是使用示波器检查。在检查中发现,那种无实质代码的延时处理,没有任何效果,在示波器上看到有没有延时,代码之间的延时都是几十纳秒级别的,OLED根本无法及时响应传输指令和数据。
    于是把延时处理,改成利用系统滴答器产生的延时。这个延时最低是1ms。再次烧录程序,终于看到OLED的显示有了变化。虽然清屏处理和显示字符串能成功了,但由于1模式的延时,对整个处理,还是太慢了,所以显示的速度是无法忍受的。但着至少证明接口没有问题了。下一步就是如何加快延时,以适应OLED的接口时序了。
    尝试使用定时器来实现延时。由于延时很短,挂上定时器后,对于微妙级别的处理,等于是主程序还没咋运行呢,大量的处理都花在了定时器的中断处理上了。看来这个方式也不行啊。
    有仔细考虑了下,无有效代码的延迟无效,是不是编译器变的结果呢?如果加上有效的处理代码,但对程序运行有没有影响的话,会怎么样呢。修改延迟处理代码,在空循环中加入一个读取Pin状态值的代码,然后替换给OLED的处理时序中,编译、下载程序。
    void delayclk(uint32_t n) {
        uint32_t i,j;

        for (i=0;i<n;i++) {
            for (j=0;j<5;j++) {
                GPIO_PinRead(GPIO, 0U, 16U);   
            }
        }
    }

    这次看到结果是有效的了。
    图片2.png

    哎...今天够累的,签到来了~
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 20:24 , Processed in 0.153802 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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