分享

STM32|基于 SPI 单向发送的 12864 驱动程序

 龙之吻6iinxl8c 2018-05-04

STM32|基于 SPI 单向发送的 12864 驱动程序

不管是做单片机还是做嵌入式的,要对一块陌生芯片编程是不可避免的工作, 那首先要做的第一步必然是阅读其datasheet,然而时序对于我们是最常见的了,只有针对时序编程,才有可能确实某些硬件工作。今天我们就来讲讲怎么来编写一个特定的时序来驱动硬件,我们就以STM32的载体了。

这里我们选用了一款基于 ST7567 驱动芯片的 128*64 像素 FSTN(格式化超扭曲向列型) 液晶, 当中不集成任何字库, 集成了可独立控制的琥珀色背光板。之所以选择这样的液晶, 是因为其与目前可穿戴设备广泛使用的 OLED(有机发光二极管) 具有相似的控制原理, 并且价格还比 OLED 便宜很多。

我们的引脚控制对应关系是:

  • PB2: 背光开关

  • PB3: 复位

  • PB4: A0, 数据或者命令选择, “1” : 写数据, “0” : 写命令

  • PA5: SCL(时钟端)

  • PA7: SDA(数据端)

SPI 可以有效地减少数据端口的连接, 便于布板和节约端口资源, 因此我们优先推荐。 接下来我们研究一下 LCD 的驱动程序

时序图

要研究 LCD 的驱动程序, 首先必须了解其控制芯片的时序

STM32|基于 SPI 单向发送的 12864 驱动程序

每次需要发出的时候, 先要拉低 CS, 然后 SDA 发出字节中的最高位的bit,接着 SCLK 进行一次上升沿的变化, 然后按照上述内容依次发送其余各位。 在最后全部发送完成数据后, A0 需要根据当前发送的是命令还是数据, 进行变化。发送完成之后, CS 需要拉高, 准备下一次字节的发送。

程序实现步骤

  • 初始化相应的 GPIO

  • 写 LCD 的 SPI 写数据程序

  • 写 LCD 的 SPI 写命令程序

  • 初始化 LCD

程序的具体实施

  • 初始化相应的 GPIO。 在这里, 由于我们仅仅用了单向的通讯, 即控制信号永远从 MCU 到 LCD, 因此只需要配置上面 5 个控制引脚为推挽式输出模式“GPIO_Mode_Out_PP”

STM32|基于 SPI 单向发送的 12864 驱动程序

在定义了以上的初始化程序之后, 为了便于后续的操作方便, 我们可以采用宏定义的方式来定义每个引脚的高低电平输入输出

STM32|基于 SPI 单向发送的 12864 驱动程序

  • 编写 LCD 的写数据程序。 在这里, 我们先来看下时序图, 如果要写命令的话, 首先需要将 A0 拉高, CS 在写的过程中需要拉低, 接着通过 SCK 和 SDA的配合, 即可将数据完整的发送出去。 发送的时候, 以一个字节为最基本单元,从最高位开始发送, 直至最低位发送出去。

STM32|基于 SPI 单向发送的 12864 驱动程序

  • 编写 LCD 的写命令程序。 写命令程序和写数据程序类似, 只需要将A0 设置成低电平即可

STM32|基于 SPI 单向发送的 12864 驱动程序

  • 初始化 LCD。 初始化 LCD 的时候, 我们需要做两件事情, 第一件事设置 LCD 的工作方式; 第二件是控制 LCD 的背光开关(打开或者关闭) 。这里我们直接给出一般的初始化程序:

STM32|基于 SPI 单向发送的 12864 驱动程序

  • lcd 复位程序和转为 lcd 操作编写的延迟程序

STM32|基于 SPI 单向发送的 12864 驱动程序

好了,有这么多,基本上就能跑起来了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多