当前位置: 首页 > news >正文

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, &reg, 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;}
}

在这里插入图片描述

初始化屏幕

  1. OLED_Init()
    ● 初始化 OLED 屏幕工作状态。
    ● 发送一系列命令以配置页寻址模式、电荷泵开启、对比度调节、显示使能等。
    ● 必须在任何显示函数调用之前执行。
  2. OLED_Clear()
    ● 清空 OLED 显存缓冲区 OLED_GRAM。
    ● 设置为全 0,表示关闭所有像素。
    ● 并通过 OLED_Refresh() 将清空的显存数据刷新到屏幕,确保视觉上是全黑状态。
  3. OLED_ColorTurn(0)
    ● 设置显示颜色模式。
    ○ 0 为正显(背景黑,文字白)。
    ○ 1 为反显(背景白,文字黑)。
    ● 实际通过向 OLED 控制器写入 0xA6(正显)或 0xA7(反显)命令实现。
  4. OLED_DisplayTurn(0)
    ● 设置显示方向。
    ○ 0 表示正常方向;
    ○ 1 表示上下翻转显示。
    ● 对应命令:
    ○ 正常显示:0xC8 + 0xA1
    ○ 翻转显示:0xC0 + 0xA0
  5. OLED_ShowString(84, 0, “RA4M2”, 16, 1)
    ● 在指定坐标位置(x=84, y=0)显示字符串 “RA4M2”。
    ● 字体大小为 16(对应 8x16 字模)。
    ● 第五个参数为显示模式:1 表示正显。
    ● 字模数据来源于 oledfont.h,函数内部会将对应点阵写入显存缓冲 OLED_GRAM。
  6. 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 的情况。

在这里插入图片描述

在这里插入图片描述

http://www.dtcms.com/a/310186.html

相关文章:

  • LangChain框架入门04:10分钟优雅接入主流大模型
  • 智能Agent场景实战指南 Day 28:Agent成本控制与商业模式
  • 常见框架漏洞
  • dify
  • SSL 剥离漏洞
  • vue2实现类似chatgpt和deepseek的AI对话流打字机效果,实现多模型同时对话
  • OpenCV-python小玩意2 摄像头预览时画线以及line的用法
  • Vue 引入字体文件YouSheBiaoTiHei
  • VMware 下 Ubuntu 操作系统下载与安装指南
  • 前沿智能推荐算法:基于多模态图神经网络的隐私保护推荐系统
  • 学习笔记:原子操作与锁以及share_ptr的c++实现
  • 调试 Rust 生成的 WebAssembly
  • OSPF综合实验报告册
  • 1 前言:什么是 CICD 为什么要学 CICD
  • vue打包后如何在本地运行?
  • sqli-labs:Less-17关卡详细解析
  • 数据结构:在链表中查找(Searching in a Linked List)
  • PyTorch分布式训练深度指南
  • Unity 打包程序在大屏上显示的问题、分辨率问题、UI适配问题、字体模糊不清问题
  • androidstudio调试apt
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博评论数据可视化分析-用户评论词云图实现
  • Apple基础(Xcode仨-Singxob)
  • 从零到一:构建基于本地LLM和向量数据库的法律智能问答系统(win11本地搭建)
  • 【C++进阶】一文吃透静态绑定、动态绑定与多态底层机制(含虚函数、vptr、thunk、RTTI)
  • 改进PSO算法!新自组织分层粒子群优化算法,具有变化的时间变化加速系数,附完整代码
  • 交通拥挤识别准确率↑32%:陌讯时空特征融合算法实战解析
  • 【AMD | Docker】超级全面版本:在Docker中验证AMD GPU移动显卡可用性的方法
  • Redis深度剖析:从基础到实战(下)
  • 开源 Arkts 鸿蒙应用 开发(十四)线程--任务池(taskpool)
  • 什么类型网站适合WEB应用防火墙?