4595|4

274

帖子

8

TA的资源

纯净的硅(初级)

楼主
 

[MSPM0L1306 LaunchPad 开发套件] 5-使用SPI接口驱动OLED [复制链接]

 
手上有一块SPI接口的OLED屏,这个屏幕的驱动芯片是SSD1306。SPI是一个常用的接口,通讯数据快。在MSPM0L1306上有1个SPI可用。
上图是OLED屏幕需要的引脚,这里使用SPI0,使用初始化的时候发现CS脚被占用了,所以准备用一个GPIO控制,因此除了设置SPI,还要设置3个GPIO,分别用于RES、DC和CS,对应的引脚则是:PA12,PA16和PA15。初始化的时候,GPIO的配置,可以建立组的概念,这样更方便对IO进行管理,有点像ALTIUM里的线束的概念,见下图,设置了2个组:USER组里是按键和LED,OLED组则是OLED用到的IO。
SPI的配置如下,这里使用的是3线模式,也就是不包含CS脚。
也可以设置SPI只使用PICO引脚,而不是用POCI引脚。解释一下这里的PICO等价于MOSI,P指的是外设,C指的是控制器。这个是在“Advanced Configuration”里进行设置。
这里要注意一点,挺坑的。SPI指定的PA25脚被光传感器占用了,因此如果要使用SPI的话,需要将跳线帽J4拔掉。
初始化设置完成后,接下来就是移植OLED屏幕的驱动程序。这里就用到了两个函数:
  • void DL_SPI_transmitData8(SPI_Regs *spi, uint8_t data)
  • bool DL_SPI_isBusy(SPI_Regs *spi)
第一个函数是负责发送数据的,第二个函数是等待数据发送完成。
下面的代码是硬件相关的驱动代码,完整代码见附件。
void OLED_SCLK(uint8_t x)
{
    if(x == 0){
        DL_GPIO_clearPins(OLED_PORT,OLED_D0_PIN);
    }else{
        DL_GPIO_setPins(OLED_PORT,OLED_D0_PIN);
    }
}

void OLED_SDIN(uint8_t x)
{
    if(x == 0){
        DL_GPIO_clearPins(OLED_PORT,OLED_D1_PIN);
    }else{
        DL_GPIO_setPins(OLED_PORT,OLED_D1_PIN);
    }
}

void OLED_CS(uint8_t x)
{
    if(x == 0){
        DL_GPIO_clearPins(OLED_PORT,OLED_OLED_CS_PIN);
    }else{
        DL_GPIO_setPins(OLED_PORT,OLED_OLED_CS_PIN);
    }
}

void OLED_RES(uint8_t x)
{
    if(x == 0){
        DL_GPIO_clearPins(OLED_PORT,OLED_OLED_RST_PIN);
    }else{
        DL_GPIO_setPins(OLED_PORT,OLED_OLED_RST_PIN);
    }
}

void OLED_DC(uint8_t x)
{
    if(x == 0){
        DL_GPIO_clearPins(OLED_PORT,OLED_OLED_DC_PIN);
    }else{
        DL_GPIO_setPins(OLED_PORT,OLED_OLED_DC_PIN);
    }
}


void OLED_WR_Byte(uint8_t dat,uint8_t cmd)
{
    uint8_t i;
    if(cmd)
        OLED_DC(1);
    else
        OLED_DC(0);
    OLED_CS(0);

    DL_SPI_transmitData8(SPI_0_INST,dat);

    while(DL_SPI_isBusy(SPI_0_INST));

    OLED_CS(1);
    OLED_DC(1);
}

运行效果如下图所示:

完整代码如下:

ssd1306_oled驱动.zip (7.28 KB, 下载次数: 72)
此帖出自MSPM0 MCU论坛

最新回复

本帖最后由 leeve 于 2024-5-2 15:23 编辑       详情 回复 发表于 2024-5-2 15:19
点赞(1) 关注(1)
 
 

回复
举报

670

帖子

0

TA的资源

纯净的硅(高级)

沙发
 

这个小屏幕我也有。

玩起来相当爽

此帖出自MSPM0 MCU论坛
 
 
 

回复

6495

帖子

10

TA的资源

版主

板凳
 

不错,不过有没有遇到过复制GPIO的name时会被初始化 

此帖出自MSPM0 MCU论坛

点评

遇到了,我还纳闷为什么设置好的引脚,生成工程的时候引脚号就变了。我还以为是因为我没有保存  详情 回复 发表于 2023-11-11 09:19
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

274

帖子

8

TA的资源

纯净的硅(初级)

4
 
秦天qintian0303 发表于 2023-11-11 07:15 不错,不过有没有遇到过复制GPIO的name时会被初始化 

遇到了,我还纳闷为什么设置好的引脚,生成工程的时候引脚号就变了。我还以为是因为我没有保存

此帖出自MSPM0 MCU论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
本帖最后由 leeve 于 2024-5-2 15:23 编辑

 

 

此帖出自MSPM0 MCU论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
C程序中嵌入汇编新方法

由于C语言在定时方面的缺陷,在某些场合下,C程序中需要嵌入汇编代码,以弥补C的缺陷。通常,在C语言程序中嵌入汇编的方法,无外 ...

【EEWORLD模块整理】+步进电机

再来一个步进电机的驱动,我用的是这里的那个142驱动的。

关于cortex-M3中断优先级如何使用的解答

最近在帖子上看到有童鞋在问关于M3的优先级的问题,很多人都不太了解IntPriorityGroupingSet()和IntPrioritySet()的用户, ...

DO了一个逻辑分析仪,Show一下

最近在学AD画板子,做了一块逻辑分析仪,蛮好用,支持Logic,USBee Suite,USBee AX Pro,可以分析uart,spi,iic等协议,很实用哦。 ...

锂电池剩余电量SOC的估计方法介绍

本帖最后由 qwqwqw2088 于 2020-6-19 08:52 编辑 荷电状态又叫剩余电量,SOC,StateofCharge,是反应电池包内当前电量占总体 ...

基于Verilog的顺序状态逻辑FSM的设计与仿真.pdf

基于Verilog的顺序状态逻辑FSM的设计与仿真.pdf

【e络盟e选】快速下单晒单

1、在e络盟e选选了几样东东,虽然还有海外的部分,但是都极速到货 2、下单物料 652896 3、开箱晒图 652895 H ...

42“万里”树莓派小车——ROS学习(Android使用ROSBridge控制小乌龟)

本帖最后由 lb8820265 于 2022-11-8 23:14 编辑 前面通过网页使用ROSBridge控制小乌龟,这里介绍使用Android手机来控制小乌 ...

清华AI医院首批42位AI医生亮相,诊断覆盖300余种疾病

11月23日,人民日报健康客户端记者从清华大学获悉,清华大学智能产业研究院团队打造的首家“AI医院”Agent Hospital正 ...

【FRDM-MCXN947】UTICK定时器

测试N947内部的UTICK定时器,定时1MS中断。 一、UTICK内部框图 870274 二、程序部分 2.1、utick.c ...

关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表