“RA MCU眾測(cè)寶典”IIC專(zhuān)題上線啦!這次,瑞薩嵌入式小百科將和大家一起聚焦【瑞薩RA2E1】開(kāi)發(fā)板,一步步玩轉(zhuǎn)IIC通信的OLED顯示。從IIC協(xié)議的核心原理、FSP中I2C Master的配置,到OLED驅(qū)動(dòng)函數(shù)編寫(xiě)、圖像文字取模與顯示,一起感受僅用SDA和SCL兩條線,就能實(shí)現(xiàn)設(shè)備間數(shù)據(jù)交互與可視化的便捷魅力。
開(kāi)啟寶典
簡(jiǎn)介
IIC通信協(xié)議
IIC(Inter-Integrated Circuit)即集成電路總線。它是一種串行通信總線,使用多主從架構(gòu),如圖所示。

點(diǎn)擊可查看大圖
飛利浦Philips公司于二十世紀(jì)八十年代初設(shè)計(jì),最初是為了讓主板、嵌入式系統(tǒng)或手機(jī)用以連接低速周邊設(shè)備。
自2006年10月1日起,使用IIC協(xié)議不需要支付專(zhuān)利費(fèi),但制造商仍然需要付費(fèi)以獲取IIC從屬設(shè)備地址。
IIC通信協(xié)議的功能特點(diǎn)如下:
只需要兩條總線線路;
沒(méi)有嚴(yán)格的波特率要求,例如使用RS232,主站生成總線時(shí)鐘;
所有組件之間存在簡(jiǎn)單的主/從關(guān)系連接到總線的每個(gè)設(shè)備都可通過(guò)唯一地址進(jìn)行軟件尋址;
IIC是真正的多主總線,提供仲裁和沖突檢測(cè)。
IIC使用兩根線進(jìn)行通信:一根時(shí)鐘線SCL,一根數(shù)據(jù)線SDA。
IIC將SCL處于高時(shí)SDA拉低的動(dòng)作作為開(kāi)始信號(hào),SCL處于高時(shí)SDA拉高的動(dòng)作作為結(jié)束信號(hào);
傳輸數(shù)據(jù)時(shí),SDA在SCL低電平時(shí)改變數(shù)據(jù),在SCL高電平時(shí)保持?jǐn)?shù)據(jù),每個(gè)SCL脈沖的高電平傳遞1位數(shù)據(jù)。

7-bit設(shè)備的數(shù)據(jù)傳輸
OLED顯示原理
OLED(Organic Electroluminescence Display)即有機(jī)發(fā)光二極管。

點(diǎn)擊可查看大圖
OLED由于同時(shí)具備自發(fā)光,不需背光源、對(duì)比度高、厚度薄、視角廣、反應(yīng)速度快、可用于撓曲性面板、使用溫度范圍廣、構(gòu)造及制程較簡(jiǎn)單等優(yōu)異特性,被認(rèn)為是下一代的平面顯示器新興應(yīng)用技術(shù)。
0.96英寸OLED基本參數(shù)
工作電壓:3.3~5V(內(nèi)置3.3V LDO,I2C通信接口電平是3.3V的);
像素點(diǎn)陣規(guī)模:128x64(128列,64行,共8192顆LED);
驅(qū)動(dòng)IC:SSD1306。
OLED模塊電路

點(diǎn)擊可查看大圖
SSD1306驅(qū)動(dòng)電路

點(diǎn)擊可查看大圖
詳見(jiàn):oled I2c , SSD1306 Datasheet.
工程建立
新建工程
打開(kāi)e2 studio軟件,依次點(diǎn)擊:文件-新建-瑞薩 C/C++項(xiàng)目-Renesas RA

點(diǎn)擊可查看大圖
依次進(jìn)行工程命名,路徑設(shè)置,F(xiàn)SP版本,目標(biāo)開(kāi)發(fā)板選擇,芯片型號(hào)選擇:R7FA2E1A72DFL,工具鏈選擇GNU ARM Embedded

點(diǎn)擊可查看大圖
工程配置
配置FSP。

點(diǎn)擊可查看大圖
配置IIC引腳。

點(diǎn)擊可查看大圖
配置IIC參數(shù)。
注解
需要注意從機(jī)的地址,在STM32等程序中是0x78,這里的地址位數(shù)是7,因此需要右移一位,為0x3c。

點(diǎn)擊可查看大圖
配置完成后,點(diǎn)擊Generate Project Content生成工程,主要代碼位于src文件夾。
代碼完善
這里首先介紹部分重要函數(shù)的構(gòu)成。
關(guān)鍵函數(shù)
向設(shè)備寫(xiě)控制命令:OLED_WR_CMD()
左右滑動(dòng)查看完整內(nèi)容
//向設(shè)備寫(xiě)控制命令 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; }
向設(shè)備寫(xiě)數(shù)據(jù):OLED_WR_DATA()
左右滑動(dòng)查看完整內(nèi)容
//向設(shè)備寫(xiě)數(shù)據(jù) 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個(gè)文件,其中oled.c是函數(shù)驅(qū)動(dòng)文件,oled.h是頭文件,oledfont.h為文字字模文件,bmp.h為圖片字模文件。
圖像取模
步驟:
1.圖像預(yù)處理,將其尺寸裁剪為寬高比2:1,推薦使用:FastStone Image Viewer軟件;
2.使用Image2Lcd軟件生成BMP格式;
3.使用PCtoLCD軟件生成字模。
Image2Lcd
下載并運(yùn)行Image2Lcd軟件。

點(diǎn)擊可查看大圖
打開(kāi)目標(biāo)圖片,設(shè)置寬度為128像素,高度為64像素(若圖片不規(guī)則,需先進(jìn)行裁剪處理),輸出數(shù)據(jù)類(lèi)型可選擇BMP圖片,或直接生成C語(yǔ)言數(shù)組文件。
PCtoLCD2018
下載并運(yùn)行PCtoLCD2018軟件。

點(diǎn)擊可查看大圖
打開(kāi)目標(biāo)BMP格式圖片,點(diǎn)擊齒輪圖標(biāo)進(jìn)入字模選項(xiàng)界面,參數(shù)設(shè)置完成后點(diǎn)擊確定,回到主界面,點(diǎn)擊生成字模,選擇并復(fù)制生成的字模至bmp.h文件。
左右滑動(dòng)查看完整內(nèi)容
#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
文字取模采用類(lèi)似方案,字模放置代碼如下。
左右滑動(dòng)查看完整內(nèi)容
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_ */
代碼。
左右滑動(dòng)查看完整內(nèi)容
#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);//態(tài) 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}

點(diǎn)擊可查看大圖
效果展示
IIC專(zhuān)題的精彩才剛剛開(kāi)始!下一期我們會(huì)繼續(xù)深挖IIC通信的更多實(shí)用場(chǎng)景。關(guān)注瑞薩嵌入式小百科,一起解鎖更多IIC通信的實(shí)戰(zhàn)玩法,讓嵌入式設(shè)備協(xié)同更高效!
瑞薩樣品/開(kāi)發(fā)板申請(qǐng)入口如下,可掃描二維碼或復(fù)制鏈接到瀏覽器獲得
申請(qǐng)入口
瑞薩樣品/開(kāi)發(fā)板申請(qǐng)入口:
https://jsj.top/f/AgUyYV

需要技術(shù)支持?
如您在使用瑞薩MCU/MPU產(chǎn)品中有任何問(wèn)題,可識(shí)別下方二維碼或復(fù)制網(wǎng)址到瀏覽器中打開(kāi),進(jìn)入瑞薩技術(shù)論壇尋找答案或獲取在線技術(shù)支持。

https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/
-
mcu
+關(guān)注
關(guān)注
147文章
18916瀏覽量
397832 -
IIC
+關(guān)注
關(guān)注
11文章
309瀏覽量
40628 -
RA
+關(guān)注
關(guān)注
0文章
32瀏覽量
25300
發(fā)布評(píng)論請(qǐng)先 登錄
RA MCU眾測(cè)寶典 | I2C讀取EEPROM
使用RA2E1 MCU和FSP實(shí)現(xiàn)超低設(shè)計(jì)
入門(mén)級(jí)RA系列RA2E1 MCU組用于低功耗和空間受限應(yīng)用
RA MCU眾測(cè)寶典 | IIC之【RA2E1】IIC通信的OLED顯示
評(píng)論