使用STM32的DMA驱动4线SPI接口OLED高速显示

解决这个问题源于市面上一种常见的OLED显示屏,使用的是SSD13XX系列的接口,可以通过8080,8086,I2C,3/4 wire SPI进行传输显示。

在开发SPI显示的过程中发现,3线的SPI,DC线使用数据帧传输,那么数据传输就变成了9位,如果使用4线的SPI (DC,CS,MOSI,CLK(其中CS可省略))可以使用8位数据,但是需要D/C线的电平来决定传输的命令或是数据。

在大多数包括厂方提供的例程中,都是使用IO来控制DC线,在个别人的努力下,使用STM32F0系列的芯片,使用9位的DMA传输数据成功。但是对于STM32的其他系列的芯片,只支持8位或16位的SPI.

经过一番研究努力,找到了可以使用DMA +8位SPI传输数据的可靠方法。

实现流程:

1.初始化硬件SPI

2.使用SPI对OLED进行初始化工作,并设置特定的OLED行列参数

3.初始化DMA->SP

上面就是全部。这里的核心就是第2步,由于初始化过程需要控制DC线的电平为CMD状态,所以需要操作相应的IO口。

初始化过程中需要设定OLED工作在行列模式(地址自增),而不是那些例子中给出的页模式(因为页模式需要频繁地设置CMD页命令)。

设置完成后DC线就可以一直保持在DATA电平上。再开启DMA传输,这样使用一块内存区域即可对OLED的内存区域进行同步刷新。

我测试了一下,在F401上使用72M的内核频率下,SPI的CLK至少可达到12M,远远高于F0系列的4M左右。(那些例程使用的模拟SPI能达到100K就很不错了,而且还占用资源)

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csaaa2005

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值