本帖最后由 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)