RA4M2_MINI驱动OLED(1)----驱动OLED
RA4M2_MINI驱动OLED.1--驱动OLED
- 概述
- 视频教学
- 样品申请
- 硬件准备
- 参考程序
- 新建工程
- 工程模板
- 保存工程路径
- 芯片配置
- 工程模板选择
- 时钟设置
- SWD调试口设置
- OLED属性配置
- IIC配置
- 导入驱动
- 头文件
- R_IIC_MASTER_Open()函数原型
- R_IIC_MASTER_Write()函数原型
- R_IIC_MASTER_Read()函数原型
- i2c_master_callback()回调函数
- 初始化屏幕
- OLED 显示方向
概述
本章旨在通过 I²C 接口驱动 OLED 显示屏(常见型号如 SSD1312),实现图形和文本的显示功能。OLED 屏幕具有低功耗、自发光、对比度高等优点,适用于嵌入式人机界面显示。
最近在瑞萨RA的课程,需要样片的可以加qun申请:925643491。
视频教学
https://www.bilibili.com/video/BV12f8RzxEGX/
RA4M2
样品申请
https://www.wjx.top/vm/rCrkUrz.aspx
硬件准备
首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
主控为R7FA4M2AD3CFL
参考程序
https://github.com/CoreMaker-lab/RA4M2_MINI_OLED
https://gitee.com/CoreMaker/RA4M2_MINI_OLED
新建工程
工程模板
保存工程路径
芯片配置
本文中使用R7FA4M2AD3CFL来进行演示。
工程模板选择
时钟设置
开发板上的外部高速晶振为12M.
需要修改XTAL为12M。
SWD调试口设置
OLED属性配置
查看手册,可以得知OLED的IIC地址为“b0111100” or “b0111101”,即0x3c或者0x3d。
IIC配置
IIC接口为P407和P408。
点击Stacks->New Stack->Connectivity -> I2C Master(r_sci_master)。
设置IIC的配置,需要注意从机的地址,这里从机地址为0x3c。
● 名称(Name):设置为 g_i2c_master0,表示这是 I2C 主机的实例名称,用于代码中引用。
● 通道(Channel):设为 0,表示使用的是 IIC 通道 0。
● 通讯速率模式(Rate):设置为 Fast-mode,即使用 400kHz 作为 I2C 通信速度。
● 自定义速率(Custom Rate (bps)):精确设置通信速率为 400000bps。
● 设备地址(Slave Address):设为 0x3C,表示从设备的7位地址,常见于 OLED 屏。
● 地址位数模式(Address Mode):设置为 7-Bit,即使用标准的 7 位地址。
● 超时模式(Timeout Mode):设置为 Short Mode,表示启用短时超时机制。
● 回调函数(Callback):设置为 i2c_master_callback,用于在通信完成或出错时触发处理函数。
● 中断优先级(Interrupt Priority Level):设置为 Priority 12,用于控制中断响应优先级。
● SDA 管脚(SDA0):分配在 P407,引脚用于数据传输线。
● SCL 管脚(SCL0):分配在 P408,引脚用于时钟线。
选择对应的IIC管脚。
导入驱动
将这四个文件成功加入到 src 源文件目录中。
bmp.h这是图像数据头文件,包含多个 BMP[] 数组,例如 BMP1[]、BMP2[]、BMP3[] 等。
● 作用:保存点阵图像的原始像素数据,通常从 .bmp 图转换而来。
● 用途:用于在 OLED 上显示图标、LOGO 或图形界面。
● 配合函数:使用 OLED_ShowPicture() 将这些图片数据渲染到屏幕上。
oled.c这是 OLED 控制逻辑的实现文件,负责初始化和图形绘制等操作。
● 核心功能:
○ OLED_Init():初始化 OLED 显示屏。
○ OLED_WR_Byte()、Send_Byte():通过 I2C 向 OLED 发送命令或数据。
○ OLED_Refresh():将显示缓冲区 OLED_GRAM 中的数据刷新到屏幕。
○ OLED_DrawPoint()、OLED_DrawLine()、OLED_ShowString() 等:提供点、线、字符、字符串的绘制功能。
○ OLED_ShowPicture():显示 bmp.h 中的图片数组。
oled.h是 OLED 驱动函数的头文件,定义了所有对外接口和常量。
● 内容包括:
○ 所有在 oled.c 中实现的函数声明。
○ OLED_CMD 和 OLED_DATA 宏,用于命令/数据标志。
○ 屏幕尺寸相关宏(oled_x, oled_y)自动适配横屏或竖屏。
○ 类型定义:u8, u16, u32。
○ 提供清晰的接口给主程序调用,如 OLED_ShowString()、OLED_Clear() 等。
oledfont.h这是字体库文件,用于显示字符和数字时的字模数据。
● 内容:包含 6×8、8×16 等常用 ASCII 字符的点阵定义。
● 用途:配合 OLED_ShowChar() 或 OLED_ShowString() 函数使用,按指定位置和大小在 OLED 屏幕上显示文字。
头文件
添加头文件。
#include "oled.h"
#include "bmp.h"
R_IIC_MASTER_Open()函数原型
R_IIC_MASTER_Open()函数为执行IIC初始化,开启配置如下所示。
/* Initialize the I2C module */err = R_IIC_MASTER_Open(&g_i2c_master0_ctrl, &g_i2c_master0_cfg);/* Handle any errors. This function should be defined by the user. */assert(FSP_SUCCESS == err);
R_IIC_MASTER_Write()函数原型
R_IIC_MASTER_Write()函数是向IIC设备中写入数据,写入格式如下所示。
err = R_IIC_MASTER_Write(&g_i2c_master0_ctrl, ®, 1, true);assert(FSP_SUCCESS == err);
Send_Byte(u8 dat) 函数的 I2C 发送实现逻辑,原来用的是模拟 I²C(bit-banging)方式,但已经注释掉了那段代码,并改用 Renesas FSP 的 I2C Master API 实现硬件 I2C 发送。
OLED_WR_Byte() 函数是 标准的 Renesas FSP I2C OLED 写入函数,它将命令或数据写入 OLED 控制器,区别在于控制字节 0x00 或 0x40,整个过程使用硬件 I2C 保证时序稳定。
R_IIC_MASTER_Read()函数原型
R_IIC_MASTER_Read()函数是向IIC设备中读取数据,读取格式如下所示。
/* Read data from I2C slave */err = R_IIC_MASTER_Read(&g_i2c_master0_ctrl, bufp, len, false);assert(FSP_SUCCESS == err);
i2c_master_callback()回调函数
对于数据是否发送完毕,可以查看是否获取到I2C_MASTER_EVENT_TX_COMPLETE字段。
fsp_err_t err = FSP_SUCCESS;
/* Callback function */
i2c_master_event_t i2c_event = I2C_MASTER_EVENT_ABORTED;
uint32_t timeout_ms = 1000000;
void i2c_master_callback(i2c_master_callback_args_t *p_args)
{i2c_event = I2C_MASTER_EVENT_ABORTED;if (NULL != p_args){/* capture callback event for validating the i2c transfer event*/i2c_event = p_args->event;}
}
初始化屏幕
- OLED_Init()
● 初始化 OLED 屏幕工作状态。
● 发送一系列命令以配置页寻址模式、电荷泵开启、对比度调节、显示使能等。
● 必须在任何显示函数调用之前执行。 - OLED_Clear()
● 清空 OLED 显存缓冲区 OLED_GRAM。
● 设置为全 0,表示关闭所有像素。
● 并通过 OLED_Refresh() 将清空的显存数据刷新到屏幕,确保视觉上是全黑状态。 - OLED_ColorTurn(0)
● 设置显示颜色模式。
○ 0 为正显(背景黑,文字白)。
○ 1 为反显(背景白,文字黑)。
● 实际通过向 OLED 控制器写入 0xA6(正显)或 0xA7(反显)命令实现。 - OLED_DisplayTurn(0)
● 设置显示方向。
○ 0 表示正常方向;
○ 1 表示上下翻转显示。
● 对应命令:
○ 正常显示:0xC8 + 0xA1
○ 翻转显示:0xC0 + 0xA0 - OLED_ShowString(84, 0, “RA4M2”, 16, 1)
● 在指定坐标位置(x=84, y=0)显示字符串 “RA4M2”。
● 字体大小为 16(对应 8x16 字模)。
● 第五个参数为显示模式:1 表示正显。
● 字模数据来源于 oledfont.h,函数内部会将对应点阵写入显存缓冲 OLED_GRAM。 - OLED_Refresh()
● 显存与实际 OLED 屏幕是分离的。
● 此函数将 OLED_GRAM 中的缓冲数据逐页写入 OLED 控制器,刷新显示内容。
● 若不调用本函数,ShowString() 写入的数据不会真正显示在屏幕上。
/* Initialize the I2C module */err = R_IIC_MASTER_Open(&g_i2c_master0_ctrl, &g_i2c_master0_cfg);/* Handle any errors. This function should be defined by the user. */assert(FSP_SUCCESS == err);OLED_Init(); // 初始化 OLED 屏幕(发送初始化命令序列,设置工作模式)OLED_Clear(); // 清空显存(OLED_GRAM),并刷新,使屏幕全黑OLED_ColorTurn(0); // 设置显示颜色模式:0 为正常显示,1 为反色显示(黑白反转)OLED_DisplayTurn(0); // 设置显示方向:0 为正常方向,1 为上下翻转显示OLED_Clear();//清空 OLED 显存OLED_ShowString(0, 0, "RA4M2", 16, 1);//在坐标 (0,0) 显示RA4M2,字体16,正显OLED_ShowString(0, 16, "hello world!", 16, 0);//在坐标 (0,16) 显示hello world!,字体16,反显OLED_Refresh();// 将 OLED_GRAM 显存内容刷新到 OLED 屏幕上,显示数字和字符串R_BSP_SoftwareDelay(2000, BSP_DELAY_UNITS_MILLISECONDS); // 延时 200 毫秒
OLED 显示方向
OLED_DisplayTurn(uint8_t i) 是用于设置 OLED 显示方向(上下翻转)的函数。
控制 OLED 屏幕是 正常方向显示 还是 上下翻转显示,通常用于设备安装方向不同、或旋转 UI 的情况。