2837|6

309

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

[RTT&瑞萨高性能 CPK-RA6M4] 4、SPI驱动OLED评测 [复制链接]

本帖最后由 kit7828 于 2022-6-2 10:34 编辑

一、开发板硬件功能及外设介绍

瑞萨RA6M4的硬件手册中,对SPI部分的描述可以知道,该系列MCU的SPI资源为SPI0和SPI1


在FSP的缩略管脚中,可知SPI所对应的管脚

 通过对排针的对比,选择采用SPI1,接线比较近,杜邦线方便连接

 手上的OLED屏,是在老王家淘的1.5寸128*128的

 驱动是SSD1327,引线需要7根,即GND、VCC、SCK、SDA、RST、DC#、CS#

对应的接线如下

 实物图

 

二、Rt-Thread Studio 下的软件开发

1、软件框架说明

OLED屏一向用的微雪驱动,在stm32、兆易GD32、雅特力AT425等开发板上成功点亮过,具体可参考本人的评测文章。因此,RTT下尽管会有OLED相应的软件包,但还是希望能将手头的驱动代码移植成功。而评测用到的资源跟前期的项目不冲突,就在原来的项目基础上增加这部分资源了。

2、瑞萨FSP的配置

在FSP中,点击New Stack,添加SPI资源

添加完成后,修改相应参数

 并且,能够看到所采用的Pin

 和MCU中的SPI1的资源所对应

 OLED屏幕中还需要RST和DC引脚,就选择J2排针旁边的引脚P409和P408了

首先,将Pin管脚设置为GPIO

 然后在Pin的资源图中,将GPIO模式改成输出

 点击上方的Generate Project Content保存

 

3、RTT Settings的配置

RTT中的设置项目比较简单,添加SPI1的支持就可以了

Ctrl-S保存后会自动更新代码 

4、移植代码部分

由于微雪的驱动代码文件有点多,需要逐个添加

 然后在相应的代码中进行适合RTT的修改

主要涉及以下几个方面:

A、数据类型方面的定义修改,如u16改成rt_uint16_t等

B、对输出高低电平的宏定义,如#define OLED_CS_1        rt_pin_write(OLED_CS_PIN, PIN_HIGH)

C、对延时函数的修改,#define Driver_Delay_ms rt_thread_mdelay

5、RTT Studio的代码

除了上述的修改,还要处理硬件初始化代码和核心的数据收发代码,就是核心的驱动代码部分

int OLED_Pin_Init(void)//IO初始化
{
    char user_data[] = {1};
    if (rt_spi_bus_attach_device(&spi_dev_oled, "oled", "spi1", user_data) != RT_EOK)
        return -RT_ERROR;

    /* config spi */
    {
        struct rt_spi_configuration cfg;
        cfg.data_width = 8;
        cfg.mode = RT_SPI_MASTER | RT_SPI_MODE_0 | RT_SPI_MSB;
        cfg.max_hz = 5 * 1000 * 1000; /* 42M,SPI max 42MHz,lcd 4-wire spi */

        rt_spi_configure(&spi_dev_oled, &cfg);
    }

    rt_pin_mode(OLED_RST_PIN, PIN_MODE_OUTPUT);
    rt_pin_mode(OLED_DC_PIN,  PIN_MODE_OUTPUT);
    rt_pin_mode(OLED_CS_PIN,  PIN_MODE_OUTPUT);

    return RT_EOK;
}

数据收发代码

static void SPI1_WriteReadByte(const rt_uint8_t Data)
{

    rt_spi_transfer(&spi_dev_oled, (const void *)&Data, NULL, 1);

}

接下来就是代码的调用了,依然在hal_entry中进行处理

void hal_entry(void)
{
    rt_kprintf("\nHello RT-Thread!\n");
    pwm_led_sample();
    if(RT_ERROR == OLED_Pin_Init())
        rt_kprintf("\nCan't attach spi1 !\r\n");

    OLED_1in5_test();

    while (1)
    {
        //rt_pin_write(LED3_PIN, PIN_HIGH);
       // rt_thread_mdelay(500);
       // rt_pin_write(LED3_PIN, PIN_LOW);
        rt_thread_mdelay(50);
        PWM_Led();
        draw_page();

    }
}

6、实现结果

 测试了3个页面,分别是英文字符、中文字符和图形

OLED-Disp

三、心得体会

由于对RTT的操作还有很多不熟悉,在移植代码的时候,只能在src目录下,改了目录,有一堆的设置,暂时就全部放在这个目录下了。

另外,RTT的软件包中有OLED的相关资源

 由于自己的OLED屏相对小众,就没有选择这个软件包,今后有时间的话,也会处理一下,直接用软件包的话,应该会很方便。

整体来说,RTT下面这种图形化的配置,确实加快了开发速度,对硬件的要求和理解也降低了不少。或许对硬件工程师来说,增加了难度,但相对而言,软件的开发要更频繁些。

最后,提供下本次工程的代码,需要的网友可以自取哈。

RA6M-0.rar (10.03 MB, 下载次数: 10)

最新回复

感谢版主大大的分享!共同学习共同进步,加油!加油!  详情 回复 发表于 2022-6-3 22:36
点赞 关注

回复
举报

9792

帖子

24

TA的资源

版主

沙发
 

好一个老王家,我没用过OLED屏,你这个是单色的能显示灰度?

点评

这个是带灰度的,所以可以显示图片,128*128的  详情 回复 发表于 2022-6-2 15:57
 
 

回复

309

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
littleshrimp 发表于 2022-6-2 15:39 好一个老王家,我没用过OLED屏,你这个是单色的能显示灰度?

这个是带灰度的,所以可以显示图片,128*128的

 
 
 

回复

6969

帖子

11

TA的资源

版主

4
 
用心了,很精彩的帖子,分享快乐!

点评

谢谢鼓励,互相学习,共同进度。  详情 回复 发表于 2022-6-5 23:20
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

5
 
感谢版主大大的分享!共同学习共同进步,加油!加油!

点评

评测是提升自我学习的很好的方法  详情 回复 发表于 2022-6-5 23:21
 
 
 

回复

309

帖子

0

TA的资源

纯净的硅(初级)

6
 
lugl4313820 发表于 2022-6-3 21:27 用心了,很精彩的帖子,分享快乐!

谢谢鼓励,互相学习,共同进度。

 
 
 

回复

309

帖子

0

TA的资源

纯净的硅(初级)

7
 
ZanbaTea 发表于 2022-6-3 22:36 感谢版主大大的分享!共同学习共同进步,加油!加油!

评测是提升自我学习的很好的方法

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 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
快速回复 返回顶部 返回列表