0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RA MCU众测宝典 | IIC之【RA2E1】IIC通信的OLED显示

RA生态工作室 2026-01-01 10:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

RA MCU众测宝典IIC专题上线啦!这次,瑞萨嵌入式小百科将和大家一起聚焦【瑞萨RA2E1】开发板,一步步玩转IIC通信OLED显示。从IIC协议的核心原理、FSP中I2C Master的配置,到OLED驱动函数编写、图像文字取模与显示,一起感受仅用SDA和SCL两条线,就能实现设备间数据交互与可视化的便捷魅力。


开启宝典

简介

IIC通信协议

IIC(Inter-Integrated Circuit)即集成电路总线。它是一种串行通信总线,使用多主从架构,如图所示。


32b67148-e6b6-11f0-8ce9-92fbcf53809c.png

点击可查看大图


飞利浦Philips公司于二十世纪八十年代初设计,最初是为了让主板、嵌入式系统手机用以连接低速周边设备。

自2006年10月1日起,使用IIC协议不需要支付专利费,但制造商仍然需要付费以获取IIC从属设备地址。


IIC通信协议的功能特点如下:

只需要两条总线线路;

没有严格的波特率要求,例如使用RS232,主站生成总线时钟;

所有组件之间存在简单的主/从关系连接到总线的每个设备都可通过唯一地址进行软件寻址;

IIC是真正的多主总线,提供仲裁和冲突检测。


IIC使用两根线进行通信:一根时钟线SCL,一根数据线SDA。


IIC将SCL处于高时SDA拉低的动作作为开始信号,SCL处于高时SDA拉高的动作作为结束信号;


传输数据时,SDA在SCL低电平时改变数据,在SCL高电平时保持数据,每个SCL脉冲的高电平传递1位数据。


32c19064-e6b6-11f0-8ce9-92fbcf53809c.png

7-bit设备的数据传输


OLED显示原理


OLED(Organic Electroluminescence Display)即有机发光二极管


32e50a76-e6b6-11f0-8ce9-92fbcf53809c.png

点击可查看大图


OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异特性,被认为是下一代的平面显示器新兴应用技术。

0.96英寸OLED基本参数

工作电压:3.3~5V(内置3.3V LDO,I2C通信接口电平是3.3V的);

像素点阵规模:128x64(128列,64行,共8192颗LED);

驱动IC:SSD1306。

OLED模块电路


330e64a2-e6b6-11f0-8ce9-92fbcf53809c.png

点击可查看大图

SSD1306驱动电路


3331ee04-e6b6-11f0-8ce9-92fbcf53809c.png

点击可查看大图


详见:oled I2c , SSD1306 Datasheet.

工程建立

新建工程

打开e² studio软件,依次点击:文件-新建-瑞萨 C/C++项目-Renesas RA


335cbe4a-e6b6-11f0-8ce9-92fbcf53809c.png

点击可查看大图


依次进行工程命名,路径设置,FSP版本,目标开发板选择,芯片型号选择:R7FA2E1A72DFL,工具链选择GNU ARM Embedded


336ad246-e6b6-11f0-8ce9-92fbcf53809c.png

点击可查看大图

工程配置

配置FSP。


33823f9e-e6b6-11f0-8ce9-92fbcf53809c.png

点击可查看大图


配置IIC引脚。


3393705c-e6b6-11f0-8ce9-92fbcf53809c.png

点击可查看大图


配置IIC参数。


注解

需要注意从机的地址,在STM32等程序中是0x78,这里的地址位数是7,因此需要右移一位,为0x3c。


33a18f66-e6b6-11f0-8ce9-92fbcf53809c.png

点击可查看大图


配置完成后,点击Generate Project Content生成工程,主要代码位于src文件夹。


代码完善

这里首先介绍部分重要函数的构成。


关键函数

向设备写控制命令:OLED_WR_CMD()

左右滑动查看完整内容

//向设备写控制命令 voidOLED_WR_CMD(uint8_t cmd){ uint8_t ii[2]={0x00,0x00};
ii[1]=cmd; err =R_IIC_MASTER_Write(&g_i2c_master0_ctrl, ii,0x02,true); assert(FSP_SUCCESS== err); /* Since there is nothing else to do, block until Callback triggers*/ //while ((I2C_MASTER_EVENT_TX_COMPLETE != i2c_event) && timeout_ms) while((I2C_MASTER_EVENT_TX_COMPLETE!= i2c_event) && timeout_ms>0) { R_BSP_SoftwareDelay(1U,BSP_DELAY_UNITS_MICROSECONDS); timeout_ms--; } if(I2C_MASTER_EVENT_ABORTED== i2c_event) { __BKPT(0); } /* Read data back from the I2C slave */ i2c_event =I2C_MASTER_EVENT_ABORTED; timeout_ms =100; }


向设备写数据:OLED_WR_DATA()

左右滑动查看完整内容

//向设备写数据 voidOLED_WR_DATA(uint8_t data){ uint8_t ii[2]={0x40,0x00};
ii[1]=data; err =R_IIC_MASTER_Write(&g_i2c_master0_ctrl, ii,0x02,true); assert(FSP_SUCCESS== err); /* Since there is nothing else to do, block until Callback triggers*/ while((I2C_MASTER_EVENT_TX_COMPLETE!= i2c_event) && timeout_ms>0) { R_BSP_SoftwareDelay(1U,BSP_DELAY_UNITS_MICROSECONDS); timeout_ms--; } if(I2C_MASTER_EVENT_ABORTED== i2c_event) { __BKPT(0); } /* Read data back from the I2C slave */ i2c_event =I2C_MASTER_EVENT_ABORTED; timeout_ms =100; }


需要向:src文件夹添加4个文件,其中oled.c是函数驱动文件,oled.h是头文件,oledfont.h为文字字模文件,bmp.h为图片字模文件。


图像取模

步骤:

1.图像预处理,将其尺寸裁剪为宽高比2:1,推荐使用:FastStone Image Viewer软件;

2.使用Image2Lcd软件生成BMP格式;

3.使用PCtoLCD软件生成字模。


Image2Lcd

下载并运行Image2Lcd软件。


33bfce90-e6b6-11f0-8ce9-92fbcf53809c.png

点击可查看大图


打开目标图片,设置宽度为128像素,高度为64像素(若图片不规则,需先进行裁剪处理),输出数据类型可选择BMP图片,或直接生成C语言数组文件。


PCtoLCD2018

下载并运行PCtoLCD2018软件。


33cfcdae-e6b6-11f0-8ce9-92fbcf53809c.png

点击可查看大图


打开目标BMP格式图片,点击齿轮图标进入字模选项界面,参数设置完成后点击确定,回到主界面,点击生成字模,选择并复制生成的字模至bmp.h文件。

左右滑动查看完整内容

#ifndefBMP_H_#defineBMP_H_constunsignedchar BMP1[] ={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};#endif


文字取模采用类似方案,字模放置代码如下。

左右滑动查看完整内容

constunsignedchar Hzk[][32]={{0x00,0x20,0x18,0xC7,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00},{0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00},/*"年",0*/{0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00},{0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00},/*"月",1*/{0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00},/*"日",2*/};#endif/* OLEDFONT_H_ */


代码。

左右滑动查看完整内容

#include"hal_data.h"#include"oled.h"#include"bmp.h"
FSP_CPP_HEADERvoidR_BSP_WarmStart(bsp_warm_start_event_tevent);FSP_CPP_FOOTER
i2c_master_event_ti2c_event = I2C_MASTER_EVENT_ABORTED;voidIIC_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; }}fsp_err_terr = FSP_SUCCESS;int timeout_ms =100;
voidhal_entry(void){ /*TODO:add your own code here */ /* IIC initicalized*/ err =R_IIC_MASTER_Open(&g_i2c_master0_ctrl, &g_i2c_master0_cfg); assert(FSP_SUCCESS == err); WriteCmd();// initialized while(1){ /*---------- Picture ------------*/ OLED_Clear();// clear screen OLED_DrawBMP(0,0,128,8,BMP1); R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS); /*----------- Text ------------*/ OLED_Clear();// clear screen OLED_ShowString(0,0,"RA",16); OLED_ShowCHinese(16,0,0);//生 OLED_ShowCHinese(32,0,1);//态 OLED_ShowCHinese(48,0,2);//工 OLED_ShowCHinese(64,0,3);//作 OLED_ShowCHinese(80,0,4);//室 OLED_ShowString(0,2,"2024.11.06",16); OLED_ShowString(0,4,"Renesas RA2E1",16); R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS); }
#ifBSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter();#endif}


33e31abc-e6b6-11f0-8ce9-92fbcf53809c.png

点击可查看大图


效果展示


IIC专题的精彩才刚刚开始!下一期我们会继续深挖IIC通信的更多实用场景。关注瑞萨嵌入式小百科,一起解锁更多IIC通信的实战玩法,让嵌入式设备协同更高效!


瑞萨样品/开发板申请入口如下,可扫描二维码或复制链接到浏览器获得

申请入口

瑞萨样品/开发板申请入口:

https://jsj.top/f/AgUyYV

34044c32-e6b6-11f0-8ce9-92fbcf53809c.png


需要技术支持?

如您在使用瑞萨MCU/MPU产品中有任何问题,可识别下方二维码或复制网址到浏览器中打开,进入瑞萨技术论坛寻找答案或获取在线技术支持。

34199d62-e6b6-11f0-8ce9-92fbcf53809c.png

https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    19263

    浏览量

    405323
  • IIC
    IIC
    +关注

    关注

    11

    文章

    311

    浏览量

    40846
  • RA
    RA
    +关注

    关注

    0

    文章

    41

    浏览量

    25402
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RA MCU宝典 | I²C读取EEPROM

    “RAMCU宝典IIC专题继续深耕!上一期我们用【RA-Eco-RA2E1】开发板实现了IIC通信
    的头像 发表于 01-13 18:05 8890次阅读
    <b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>众</b>测<b class='flag-5'>宝典</b> | I²C读取EEPROM

    瑞萨RA MCU宝典 | 环境搭建RA-Eco-RA6E2-64PIN-V1.0 开发板】介绍、环境搭建、工程测试

    “RAMCU宝典”环境搭建专题再添实用干货!这次咱们聚焦高性能入门级开发板——【RA-Eco-RA6E2-64PIN-V1.0】。本文介绍了RA-Eco-RA6E2-64PIN-V
    的头像 发表于 03-20 16:23 8099次阅读
    瑞萨<b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>众</b>测<b class='flag-5'>宝典</b> | 环境搭建<b class='flag-5'>之</b>【<b class='flag-5'>RA-Eco-RA6E2</b>-64PIN-V1.0 开发板】介绍、环境搭建、工程测试

    瑞萨RA MCU宝典 | 串口RA-Eco-RA2L1】RTC日历及串口设置时间

    瑞萨“RAMCU宝典”串口专题添硬核实操!开启宝典前言RAMCU宝典|串口
    的头像 发表于 04-21 18:07 7259次阅读
    瑞萨<b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>众</b>测<b class='flag-5'>宝典</b> | 串口<b class='flag-5'>之</b>【<b class='flag-5'>RA-Eco-RA2L1</b>】RTC日历及串口设置时间

    使用RA2E1 MCU和FSP实现超低设计

      RA2E1 MCU 组评估套件 FPB-RA2E1实施各种连接器,允许访问 RA2E1 MCU、板载
    的头像 发表于 04-25 10:10 3250次阅读
    使用<b class='flag-5'>RA2E1</b> <b class='flag-5'>MCU</b>和FSP实现超低设计

    入门级RA系列RA2E1 MCU组用于低功耗和空间受限应用

      RA2E1 组得到广泛的第三方开发工具以及瑞萨电子原创开发环境的支持。EK-RA2E1评估套件使用户能够无缝评估 RA2E1 MCU 组的功能,并使用一流的灵活软件包 (FSP)和
    的头像 发表于 04-29 14:33 3414次阅读
    入门级<b class='flag-5'>RA</b>系列<b class='flag-5'>RA2E1</b> <b class='flag-5'>MCU</b>组用于低功耗和空间受限应用

    RA2E1数据手册(英)

    RA2E1数据手册(英)
    发表于 11-07 19:49 0次下载
    <b class='flag-5'>RA2E1</b>数据手册(英)

    RA2E1硬件用户手册(中英)

    RA2E1硬件用户手册(中英)
    发表于 11-07 19:49 7次下载
    <b class='flag-5'>RA2E1</b>硬件用户手册(中英)

    RA2E1开发板资料

    RA2E1开发板资料
    发表于 11-07 19:50 7次下载
    <b class='flag-5'>RA2E1</b>开发板资料

    RA2E1 组数据表

    RA2E1 组数据表
    发表于 01-09 19:06 0次下载
    <b class='flag-5'>RA2E1</b> 组数据表

    RA2E1 组用户手册:硬件

    RA2E1 组用户手册:硬件
    发表于 01-09 19:06 5次下载
    <b class='flag-5'>RA2E1</b> 组用户手册:硬件

    CPK-RA2L1/RA2E1 评估板入口

    CPK-RA2L1/RA2E1 评估板入口
    发表于 01-13 19:04 4次下载
    CPK-<b class='flag-5'>RA2L1</b>/<b class='flag-5'>RA2E1</b> 评估板入口

    RA2E1 组用户手册:硬件

    RA2E1 组用户手册:硬件
    发表于 06-30 18:50 4次下载
    <b class='flag-5'>RA2E1</b> 组用户手册:硬件

    CPK-RA2L1/RA2E1 评估板入口

    CPK-RA2L1/RA2E1 评估板入口
    发表于 07-03 19:44 0次下载
    CPK-<b class='flag-5'>RA2L1</b>/<b class='flag-5'>RA2E1</b> 评估板入口

    RA MCU宝典 | 环境搭建【FPB-RA0E2】开发环境搭建

    RA生态工作室关注我们“RAMCU宝典”环境搭建专题更新啦!这次我们聚焦【FPB-RA0E2】开发板,一步步打通开发“第一关”,为后续功能开发筑牢基础。开启
    的头像 发表于 03-11 16:33 1784次阅读
    <b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>众</b>测<b class='flag-5'>宝典</b> | 环境搭建<b class='flag-5'>之</b>【FPB-<b class='flag-5'>RA0E2</b>】开发环境搭建

    瑞萨RA MCU宝典 | OLEDRA-Eco-RA2L1】I²C驱动OLED屏幕 BME280传感器

    “RAMCU宝典”全新专题——OLED显示驱动正式开篇!开启宝典前言瑞萨RAMCU
    的头像 发表于 05-08 16:08 1107次阅读
    瑞萨<b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>众</b>测<b class='flag-5'>宝典</b> | <b class='flag-5'>OLED</b><b class='flag-5'>之</b>【<b class='flag-5'>RA-Eco-RA2L1</b>】I²C驱动<b class='flag-5'>OLED</b>屏幕 BME280传感器