chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南之SPI的OLED屏幕顯示實驗

瑞薩嵌入式小百科 ? 來源:野火電子 ? 2026-02-10 09:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

22.3

OLED相關

OLED,即有機發(fā)光二極管(OrganicLight-EmittingDiode),又稱為有機電激光顯示(OrganicElectroluminesence Display,OELD)。OLED由于同時具備自發(fā)光,不需背光源、對比度高、厚度薄、視角廣、反應速度快、可用于撓曲性面板、使用溫度范圍廣、構造及制程較簡單等優(yōu)異之特性,被認為是下一代的平面顯示器新興應用技術。OLED顯示技術具有自發(fā)光的特性,采用非常薄的有機材料涂層和玻璃基板,當有電流通過時,這些有機材料就會發(fā)光,而且OLED顯示屏幕可視角度大,并且能夠節(jié)省電能。

本文使用是0.96寸的OLED顯示模塊(藍色)作為實驗模塊,詳細資料可以在野火電子官網找到。實物如下所示:

071ffbd2-0248-11f1-90a1-92fbcf53809c.png

? 分辨率為128*64

? 驅動IC芯片為SSD1306

? 4線SPI總線通信方式

原理圖如下:

0791422e-0248-11f1-90a1-92fbcf53809c.png

22.3.1

接口協(xié)議

對于4線制SPI接口協(xié)議,其通信過程對于片選信號和數據/命令切換信號的要求如下圖所示:

080e818a-0248-11f1-90a1-92fbcf53809c.png

通過設置CS引腳為低電平,我們可以確定器件為選中狀態(tài),設置其DC引腳不同的電平狀態(tài),來控制輸出的指令為地址指令還是數據指令。

SSD1306的4線制SPI通信的時序如下圖所示:

087136f4-0248-11f1-90a1-92fbcf53809c.png

我們可以看到,CS信號線由高變低,是SPI通訊的起始信號,MOSI信號線負責傳輸數據,MOSI的數據在SCLK的下升沿或低電平期間變化輸出,在SCLK上降沿的時候,SDIN(MOSI)的數據有效,SDIN(MOSI) 將數據鎖存,高電平時表示數據“1”,為低電平時表示數據“0”。在其它時刻,數據無效。SSD1306芯片則根據DC信號線的電平狀態(tài),來區(qū)分接受到的指令是地址指令還是數據指令,最后,當數據/命令傳輸完畢后,CS信號線由低變高,解除對當前設備的選中狀態(tài),至此,一次數據傳輸完成。

22.3.2

顯存寫入方式

SSD1306的顯存寫入方式有三種,分別是頁地址模式,橫向地址模式和縱向地址模式。不同的地址模式下,把數據寫入顯存后,顯存的地址變化方式是不一樣的。我們這里選擇的是頁地址模式,在頁地址模式下,在發(fā)送完顯示數據后,列地址指針將增加。如果列地址指針到達列結束地址,則列地址指針為重置為列開始地址,而頁地址指針不更改,需要用戶設置新頁面,并且列地址為訪問下一頁顯存。

頁地址與列地址的移動順序如下圖所示:

08da157a-0248-11f1-90a1-92fbcf53809c.png

22.3.3

命令字

關于SSD1306的基本命令字及說明如下表:

表1:SSD1306的基本命令字

094213e6-0248-11f1-90a1-92fbcf53809c.png

22.4

SPI-OLED顯示實驗

野火啟明6M5開發(fā)板的擴展SPI接口電路圖如圖所示:

0a0dbc4e-0248-11f1-90a1-92fbcf53809c.png

因為野火啟明4M2開發(fā)板的擴展SPI接口被下載調試引腳占用,故采用GPIO-軟件SPI的方式來測試實驗。

野火啟明4M2開發(fā)板的擴展OLED6線接口電路圖如圖所示:

0a794e6e-0248-11f1-90a1-92fbcf53809c.png

野火啟明2L1開發(fā)板的擴展SPI接口電路圖如圖所示:

0ae8d68a-0248-11f1-90a1-92fbcf53809c.png

因為對于OLED模塊,主機只需要發(fā)送顯示數據,它也只需要接受顯示數據,所以我們只需要連接MOSI這條線即可。

表2:OLED模塊連接引腳分配

0b51fa98-0248-11f1-90a1-92fbcf53809c.png

使用瑞薩官方提供的FPS庫進行編程,瑞薩官方提供的FPS庫具有方便、快捷、簡潔的特性。

0bae9e88-0248-11f1-90a1-92fbcf53809c.png22.4.1

新建工程

對于e2studio開發(fā)環(huán)境:拷貝一份我們之前的e2s 工程“05_Template”,然后將工程文件夾重命名為“SPI_OLED”,最后再將它導入到我們的e2studio工作空間中。

對于Keil開發(fā)環(huán)境:拷貝一份我們之前的Keil工程模板“05_Template”,然后將工程文件夾重命名為“SPI_OLED”,并進入該文件夾里面雙擊Keil工程文件,打開該工程。

工程新建好之后,在工程根目錄的“src”文件夾下面新建“spi_oled”文件夾,再進入“spi_oled”文件夾里面新建源文件和頭文件:“bsp_spi_oled.c”“bsp_spi_oled.h”,并添加好字庫文件“codetab.h”,具體代碼見下。

整個工程文件結構如下:

列表1:文件結構

左右滑動查看完整內容

SPI_OLED
├─......
└─src
├─ spi_oled
│ ├─ bsp_spi_oled.c
│ ├─ bsp_spi_oled.h
| └─ codetab.h
└─ hal_entry.c

列表2:codetab.h

左右滑動查看完整內容


/************************************************************************************
 * Description:
 * 1. 128*64點整OLED模塊功能演示程序的字表;
 * 2. 字表由打包資料中的“取字軟件”計算得出;
 * 3. 取字方式 -- 共陰、列行式、逆向輸出
 *
 *
 *************************************************************************************/

 /***************************16*16的點陣字體取模方式:共陰——列行式——逆向輸出*********/
 #ifndef __CODETAB_H__
 #define __CODRTAB_H__

 const unsigned char F16x16[] =
 {
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/

 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/

 0x00,0xFE,0x92,0x92,0xFE,0x92,0x92,0xFE,0x00,0x42,0x4A,0xD2,0x6A,0x46,0xC0,0x00,
 0x40,0xC4,0x44,0x44,0x3F,0x24,0x24,0x24,0x00,0x40,0x80,0x7F,0x00,0x01,0x00,0x00,/*"野",0*/
 0x00,0x00,0xC0,0x38,0x00,0x00,0x00,0xFF,0x00,0x00,0x40,0x20,0x18,0x00,0x00,0x00,
 0x80,0x81,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00,/*"火",1*/
 0x24,0x24,0xA4,0xFE,0xA3,0x22,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,
 0x08,0x06,0x01,0xFF,0x00,0x01,0x04,0x04,0x04,0x04,0x04,0xFF,0x02,0x02,0x02,0x00,/*"科",2*/
 0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00,
 0x04,0x44,0x82,0x7F,0x01,0x80,0x80,0x40,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00,/*"技",3*/



 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",6*/
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",6*/
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",7*/
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",7*/

 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/

 0x84,0x84,0xFC,0x84,0x84,0x40,0x5E,0x50,0x50,0x50,0xDF,0x50,0x50,0x50,0x5E,0x00,
 0x10,0x30,0x1F,0x08,0x08,0x00,0xFE,0x02,0x02,0x7F,0x02,0x7E,0x02,0x82,0xFE,0x00,/*"瑞",0*/
 0x04,0xE4,0x24,0x24,0xA4,0x6F,0x04,0x24,0x64,0xAF,0x34,0xA4,0x64,0x24,0x04,0x00,
 0x00,0xFF,0x00,0x11,0x22,0x9C,0x40,0x3F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,/*"薩",1*/

 0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,
 0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00,/*"電",2*/
 0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x00,
 0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"子",3*/

 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",6*/
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",6*/
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",7*/
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",7*/
 };

 /************************************6*8的點陣************************************/
 const unsigned char F6x8[][6] =
 {
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp
 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !
 0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "
 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #
 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $
 0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %
 0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &
 0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// '
 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (
 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )
 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *
 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +
 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,
 0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -
 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .
 0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /
 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
 0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
 0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
 0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
 0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
 0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :
 0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;
 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <
 0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =
 0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >
 0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?
 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @
 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A
 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B
 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C
 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E
 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F
 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G
 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I
 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J
 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K
 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L
 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M
 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P
 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R
 0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S
 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T
 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W
 0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X
 0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y
 0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z
 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [
 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55
 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ]
 0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^
 0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _
 0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// '
 0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a
 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b
 0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c
 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d
 0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e
 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f
 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g
 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h
 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i
 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j
 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k
 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l
 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m
 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n
 0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o
 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p
 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q
 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r
 0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s
 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t
 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
 0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x
 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y
 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z
 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines
 };
 /****************************************8*16的點陣************************************/
 const unsigned char F8X16[] = {
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
 0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
 0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
 0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
 0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
 0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32
 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
 0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60
 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
 0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
 0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
 0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
 };

 const unsigned char BMP1[] = {
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,
 0xC0,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,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,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0x70,0x70,0x70,0xE0,0xC0,0x80,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0x78,0x78,0x78,0xF8,
 0xF8,0xF8,0xF8,0x78,0x78,0x78,0xF8,0xF8,0xF8,0xF8,0x00,0xF8,0xF8,0x78,0x78,0x78,
 0x78,0x78,0x78,0x78,0x78,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,
 0xFE,0xFE,0xFE,0xFE,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xE0,0x80,
 0x00,0x00,0x00,0x00,0x3E,0xFF,0xC1,0xFF,0x7F,0x1F,0x7F,0xE6,0xE3,0xFF,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xFE,
 0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xF0,0xE0,0xE0,0xFF,
 0xFF,0xFF,0xFF,0xE0,0xE0,0xE0,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x60,0xF8,0xF8,0xF8,
 0xF8,0xE0,0xF8,0xFE,0xFF,0x7F,0x1F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0xFC,0xFC,0x18,0x00,0x00,0x00,0x00,0xFF,
 0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xFC,0xFF,0xFF,
 0x00,0x00,0x00,0x80,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFE,0xFF,0xFF,0xFF,0xFF,
 0xFF,0xFF,0x7F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xC0,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xC1,0xC1,0xFF,
 0xFF,0xFF,0xFF,0xC1,0xC1,0xC1,0xFF,0xFF,0xFF,0xFF,0xF8,0xF8,0xF8,0xF8,0xF9,0xF1,
 0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xF6,0xF0,0xF0,0xF0,0xF8,0xF8,0x38,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xFF,
 0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
 0xE0,0xC0,0xE0,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x80,0xF0,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x8F,
 0xE7,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFE,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC7,0xC7,0xC7,0xC7,0x87,0x83,0x87,
 0xFF,0xFF,0xFF,0x83,0x83,0x87,0x87,0xC7,0xC7,0xC7,0x05,0x01,0x01,0x01,0x00,0x00,
 0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x78,0x7F,0x7F,0x7F,0x3F,0x01,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x0E,0x0F,0x0F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,
 0xFF,0xFF,0x3F,0xFF,0xFF,0xFE,0xE0,0x80,0x00,0x00,0x01,0x07,0x07,0x0F,0x0F,0x1F,
 0x1F,0x1F,0x0F,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0xF8,0xFF,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC1,0x7C,0xFF,
 0xFF,0xFF,0xF8,0xF0,0xE0,0xF0,0xF0,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,
 0xFF,0xFF,0xFF,0x07,0x07,0x87,0x87,0x87,0xC7,0xC7,0xC0,0x00,0x00,0x00,0x00,0x00,
 0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF8,0xFE,0xFF,0xFF,0x3F,
 0x0F,0x01,0x00,0x03,0x1F,0x7F,0xFF,0xFF,0xFC,0xF8,0xE0,0xC0,0x80,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,0x01,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0xFF,0xFE,0xFF,
 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x7E,0x7E,0x7E,0x3E,0x3E,0x3E,0x3E,0x1E,
 0x1F,0x1F,0x1F,0x1F,0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x03,0x30,0xF0,0xF0,0xE0,0xE0,
 0xF0,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,
 0xC0,0xE0,0xF0,0xF0,0xF8,0xFC,0xFE,0xFE,0xFF,0x7F,0x1F,0x0F,0x07,0x03,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x1F,0x3F,0x7F,0x7F,0xFF,0xFE,0xFC,
 0xFC,0xF8,0xF8,0xF0,0x70,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,0x01,0x01,
 0x01,0x01,0x01,0x01,0x01,0x01,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,0x07,0x07,0x07,
 0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x01,0x03,0x07,0x07,0x07,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,
 0x03,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 };

 #endif

22.4.2

FSP配置

因為啟明6M5/2L1開發(fā)板采用硬件SPI的方式,而啟明4M2開發(fā)板采用GPIO模擬SPI的方式進行實驗,所以FPS的配置也是不同的。

注解:關于硬件SPI與軟件SPI的區(qū)別:

軟件SPI:軟件SPI需要用IO口模擬時序,這個模擬過程全部由CPU完成,為了能穩(wěn)定的存入數據,可能插入軟件延時,這個時間在讀取數據量小的情況下不明顯,但是基本上你在讀取過程中其他非中斷、非異常程序是無法得到執(zhí)行的。

2.硬件SPI:硬件SPI數據存儲過程是不需要CPU參與的,程序中配置好SPI的訪問時序,開啟中斷,CPU就可以在中斷函數中搬移數據,省下了軟件模擬IO的存取時間。

下面以啟明6M5開發(fā)板為例,進行FSP配置。

首先打開 “41_SPI_OLED” 項目的 FSP 配置界面進行配置。

先配置CS,D/C引腳,在 FSP 配置界面里面點開 “Pins”-> “Poets”-> “P3”-> “P301” ,然后配置CS對應的IO引腳的 “Mode” 屬性配置為 “Output mode (Initial High)”, 表示該引腳默認輸出高電平,其他的屬性默認即可。 D/C引腳也是按照這樣進行配置。 啟明2L1開發(fā)板與其類似,只是需要配置的引腳號不一樣。 配置步驟如下圖所示:

配置Ports

配置SPI,在 FSP 配置界面里面點開 “Pins”-> “Peripherals”-> “Connectivity:SPI”-> “SPI0”,選擇A組并使能, 啟明2L1開發(fā)板與其類似,只是選擇的SPI模塊為SPI1,A組。 配置步驟如下圖所示:

配置SPI引腳

接著在 FSP 配置界面里面依次點擊 “Stacks” -> “New Stack” -> “Connectivity” -> “SPI” 來添加SPI模塊, 配置步驟如下圖所示:

添加SPI模塊

按照如下圖所示對 SPI 模塊屬性進行配置

配置SPI模塊

SPI 模塊的屬性介紹如下:

SPI 屬性介紹
SPI屬性 描述
Name 模塊實例名。設置為g_spi0_flash
Channel 通道。這里選擇spi0
Receive Interrupt Priority 接收中斷優(yōu)先級
Transmit Buffer Empty Interrupt Priority 發(fā)送緩存區(qū)空中斷優(yōu)先級
Transfer Complete Interrupt Priority 發(fā)送完成中斷優(yōu)先級
Error Interrupt Priority 錯誤中斷優(yōu)先級
Operating Mode 操作模式??蛇xSPI主機或從機
Clock Phase SPI時鐘相位(設置CPHA)
Clock Polarity SPI時鐘極性(設置CPOL)
Mode Fault Error 模式錯誤檢測。檢測主從模式沖突
Bit Order 位時序。MSB或LSB
Callback 中斷回調函數。設置為spi_flash_callback
SPI Mode SPI 模式。設置為SPI Operation
Full or Transmit Only Mode 全雙工或僅發(fā)送模式選擇
Slave Select Polarity 從機選擇引腳極性。一般是低電平有效
Select SSL(Slave Select) 從機選擇信號
MOSI Idle State 總線空閑時 MOSI 電平
Parity Mode 極性模式
Byte Swapping 字節(jié)交換模式
Bitrate 比特率
Clock Delay 時鐘延遲
SSL Negation Delay SSL失效延遲
Next Access Delay 下一次訪問延遲

在 FSP 配置界面里面點開 “Pins”-> “Poets”-> “P0”-> “P007” ,然后配置IO引腳的 “Mode” 屬性配置為 “Output mode (Initial High)”, 表示該引腳默認輸出高電平,其他的屬性默認即可。其他三個引腳也是按照這樣進行配置。 配置步驟如下圖所示:

配置GPIO

配置完成之后可以按下快捷鍵“Ctrl + S”保存, 最后點右上角的“Generate Project Content”按鈕,讓軟件自動生成配置代碼即可。

22.4.3.對于啟明6M5/2L1開發(fā)板的 “41_SPI_OLED” 工程:

當使用SPI接口時,我們通過 R_SPI_Write 這個函數,可以直接給我們的OLED模塊發(fā)送指令,進行相應的操作。 R_SPI_Write 的函數原型如下:

fsp_err_t R_SPI_Write (spi_ctrl_t * const    p_api_ctrl,
                    void const          * p_src,
                    uint32_t const        length,
                    spi_bit_width_t const bit_width)

發(fā)送一個數組的數據,p_src 是指需要發(fā)送的數據,length 是指發(fā)送數據的個數,bit_width 是指每個要發(fā)送的數據的位寬。

中斷回調函數的原型已經在hal_data.h中進行了聲明,我們只需要對其進行定義即可。

/** Callback used by SPI Instance. */
#ifndef spi0_callback
void spi0_callback(spi_callback_args_t * p_args);
#endif

在本次實驗中,在中斷回調函數中,我們可以通過檢測發(fā)送完成事件來判斷SPI傳輸是否完成,并且還封裝了一個發(fā)送超時等待函數。

中斷回調函數

/**
* @brief  中斷回調函數
* @param  SPI中斷回調參數指針
* @retval 無
*/
void spi0_callback(spi_callback_args_t *p_args)
{
  if(p_args->event == SPI_EVENT_TRANSFER_COMPLETE)
  {
    g_transfer_complete = true;
  }
}
/**
* @brief  發(fā)送超時等待函數
* @param  無
* @retval 無
*/
static bool SPIWaitgtc(void)
{
  unsigned short wTimeout = 100;
  while(!g_transfer_complete && wTimeout)
  {
      R_BSP_SoftwareDelay(1u, BSP_DELAY_UNITS_MICROSECONDS);
      wTimeout--;
  }
  g_transfer_complete = false;
  if(g_transfer_complete==false && wTimeout==0)
      return false;
  return true;
}

當我們需要對OLED發(fā)送命令/數據時,通過將D/C引腳配置成低電平來確定發(fā)送的為命令指令,而需要發(fā)送數據時,將D/C引腳配置成高電平。

OLED發(fā)送命令/數據函數

void OLED_WrCmd(unsigned char cmd)
{
  OLED_DC_Clr();
  R_SPI_Write(&g_spi0_ctrl,&cmd,1,SPI_BIT_WIDTH_8_BITS);
  SPIWaitgtc();
}
void OLED_WrDat(unsigned char dat)
{
  OLED_DC_Set();
  R_SPI_Write(&g_spi0_ctrl,&dat,1,SPI_BIT_WIDTH_8_BITS);
  SPIWaitgtc();
}

對于CS與D/C引腳的操作我們也是封裝了宏

#define OLED_CS_Pin       BSP_IO_PORT_03_PIN_01
#define OLED_CS_Clr()     R_IOPORT_PinWrite(&g_ioport_ctrl, OLED_CS_Pin, BSP_IO_LEVEL_LOW)
#define OLED_CS_Set()     R_IOPORT_PinWrite(&g_ioport_ctrl, OLED_CS_Pin, BSP_IO_LEVEL_HIGH)

#define OLED_DC_Pin       BSP_IO_PORT_03_PIN_02
#define OLED_DC_Clr()     R_IOPORT_PinWrite(&g_ioport_ctrl, OLED_DC_Pin, BSP_IO_LEVEL_LOW)
#define OLED_DC_Set()     R_IOPORT_PinWrite(&g_ioport_ctrl, OLED_DC_Pin, BSP_IO_LEVEL_HIGH)

最后我們來看一下OLED的初始化,開頭是通過 R_SPI_Open 函數來啟動SPI0,接著是對OLED的寄存器進行操作,這些參數不需要去了解,默認也不需要修改。

OLED初始化

void OLED_Init(void)
{
  fsp_err_t err = FSP_SUCCESS;
  err = R_SPI_Open(&g_spi0_ctrl,&g_spi0_cfg);//打開SPI模塊
  assert(FSP_SUCCESS == err);

  R_BSP_SoftwareDelay(500u, BSP_DELAY_UNITS_MILLISECONDS);//延時500ms

  OLED_CS_Clr();

  OLED_WrCmd(0xae);
  OLED_WrCmd(0xae);//--turn off oled panel
  OLED_WrCmd(0x00);//---set low column address
  OLED_WrCmd(0x10);//---set high column address
  OLED_WrCmd(0x40);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
  OLED_WrCmd(0x81);//--set contrast control register
  OLED_WrCmd(0xcf); // Set SEG Output Current Brightness
  OLED_WrCmd(0xa1);//--Set SEG/Column Mapping     0xa0,0xa1
  OLED_WrCmd(0xc8);//Set COM/Row Scan Direction   0xc0,0xc8
  OLED_WrCmd(0xa6);//--set normal display
  OLED_WrCmd(0xa8);//--set multiplex ratio(1 to 64)
  OLED_WrCmd(0x3f);//--1/64 duty
  OLED_WrCmd(0xd3);//-set display offset      Shift Mapping RAM Counter (0x00~0x3F)
  OLED_WrCmd(0x00);//-not offset
  OLED_WrCmd(0xd5);//--set display clock divide ratio/oscillator frequency
  OLED_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec
  OLED_WrCmd(0xd9);//--set pre-charge period
  OLED_WrCmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
  OLED_WrCmd(0xda);//--set com pins hardware configuration
  OLED_WrCmd(0x12);
  OLED_WrCmd(0xdb);//--set vcomh
  OLED_WrCmd(0x40);//Set VCOM Deselect Level
  OLED_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02)
  OLED_WrCmd(0x02);//
  OLED_WrCmd(0x8d);//--set Charge Pump enable/disable
  OLED_WrCmd(0x14);//--set(0x10) disable
  OLED_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5)
  OLED_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7)
  OLED_WrCmd(0xaf);//--turn on oled panel

  OLED_Fill(0x00);//清屏
  OLED_SetPos(0,0);
}

22.4.4.對于啟明4M2開發(fā)板的 “41_SPI_OLED” 工程:

對于四個要用來模擬SPI的引腳,我們也是封裝了宏

#define SPI_SCK_Pin       BSP_IO_PORT_06_PIN_01
#define SPI_SCK_LOW()     R_IOPORT_PinWrite(&g_ioport_ctrl, SPI_SCK_Pin, BSP_IO_LEVEL_LOW)
#define SPI_SCK_HIGH()    R_IOPORT_PinWrite(&g_ioport_ctrl, SPI_SCK_Pin, BSP_IO_LEVEL_HIGH)

#define SPI_MOSI_Pin       BSP_IO_PORT_06_PIN_02
#define SPI_MOSI_LOW()     R_IOPORT_PinWrite(&g_ioport_ctrl, SPI_MOSI_Pin, BSP_IO_LEVEL_LOW)
#define SPI_MOSI_HIGH()    R_IOPORT_PinWrite(&g_ioport_ctrl, SPI_MOSI_Pin, BSP_IO_LEVEL_HIGH)

#define SPI_CS_Pin       BSP_IO_PORT_00_PIN_07
#define SPI_CS_LOW()      R_IOPORT_PinWrite(&g_ioport_ctrl, SPI_CS_Pin, BSP_IO_LEVEL_LOW)
#define SPI_CS_HIGH()     R_IOPORT_PinWrite(&g_ioport_ctrl, SPI_CS_Pin, BSP_IO_LEVEL_HIGH)

#define SPI_DC_Pin       BSP_IO_PORT_00_PIN_08
#define SPI_DC_LOW()      R_IOPORT_PinWrite(&g_ioport_ctrl, SPI_DC_Pin, BSP_IO_LEVEL_LOW)
#define SPI_DC_HIGH()     R_IOPORT_PinWrite(&g_ioport_ctrl, SPI_DC_Pin, BSP_IO_LEVEL_HIGH)

根據SSD1306的時序圖,在SCLK信號為地電平的時候,改變MOSI的電平狀態(tài),輸出完數據后將其拉高,延時一段時間后進行拉低SCLK,如此循環(huán)8次便可將一字節(jié)的數據傳輸出去。

OLED模擬SPI發(fā)送函數

/**
* @brief  模擬SPI發(fā)送數據函數
* @param  data:待發(fā)送數據
* @retval 無
*/
void SPI_WriteByte(unsigned char data)
{
  unsigned char i = 0;
  unsigned char temp = 0;
  for(i=0; i<8; i++)
  {
    temp = ((data&0x80)==0x80)? 1:0;
    data = data<<1;
    SPI_SCK_LOW();
    if(temp)
    {
      SPI_MOSI_HIGH();
    }
    else
    {
      SPI_MOSI_LOW();
    }
    R_BSP_SoftwareDelay(1u, BSP_DELAY_UNITS_MICROSECONDS);
    SPI_SCK_HIGH();
    R_BSP_SoftwareDelay(1u, BSP_DELAY_UNITS_MICROSECONDS);
  }
  SPI_SCK_HIGH();
}

同樣的,模擬的OLED發(fā)送指令/數據函數與OLED發(fā)送指令數據函數類似,如下

OLED發(fā)送命令/數據函數

void OLED_WrCmd(unsigned char cmd)//寫命令
{
  SPI_DC_LOW();
  SPI_WriteByte(cmd);
}
void OLED_WrDat(unsigned char dat)//寫數據
{
  SPI_DC_HIGH();
  SPI_WriteByte(dat);
}

OLED的初始化,啟明4M2開發(fā)板與啟明6M5/2L1類似。

OLED初始化

void OLED_Init(void)
{
  SPI_CS_HIGH();
  SPI_SCK_HIGH();
  R_BSP_SoftwareDelay(100u, BSP_DELAY_UNITS_MICROSECONDS);

  SPI_CS_LOW();//拉高CS后拉低CS,選中OLED

  OLED_WrCmd(0xae);
  OLED_WrCmd(0xae);//--turn off oled panel
  OLED_WrCmd(0x00);//---set low column address
  OLED_WrCmd(0x10);//---set high column address
  OLED_WrCmd(0x40);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
  OLED_WrCmd(0x81);//--set contrast control register
  OLED_WrCmd(0xcf); // Set SEG Output Current Brightness
  OLED_WrCmd(0xa1);//--Set SEG/Column Mapping     0xa0,0xa1
  OLED_WrCmd(0xc8);//Set COM/Row Scan Direction   0xc0,0xc8
  OLED_WrCmd(0xa6);//--set normal display
  OLED_WrCmd(0xa8);//--set multiplex ratio(1 to 64)
  OLED_WrCmd(0x3f);//--1/64 duty
  OLED_WrCmd(0xd3);//-set display offset      Shift Mapping RAM Counter (0x00~0x3F)
  OLED_WrCmd(0x00);//-not offset
  OLED_WrCmd(0xd5);//--set display clock divide ratio/oscillator frequency
  OLED_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec
  OLED_WrCmd(0xd9);//--set pre-charge period
  OLED_WrCmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
  OLED_WrCmd(0xda);//--set com pins hardware configuration
  OLED_WrCmd(0x12);
  OLED_WrCmd(0xdb);//--set vcomh
  OLED_WrCmd(0x40);//Set VCOM Deselect Level
  OLED_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02)
  OLED_WrCmd(0x02);//
  OLED_WrCmd(0x8d);//--set Charge Pump enable/disable
  OLED_WrCmd(0x14);//--set(0x10) disable
  OLED_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5)
  OLED_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7)
  OLED_WrCmd(0xaf);//--turn on oled panel

  OLED_Fill(0x00);
  OLED_SetPos(0,0);
}

22.4.5.hal_entry函數

在hal_entry函數中,初始化OLED。

hal_entry.c

void hal_entry(void)
{
    /* TODO: add your own code here */
  unsigned char i;
  extern const unsigned char BMP1[];
  OLED_Init();//初始化
  while(1)
  {
    OLED_Fill(0xff);//填充屏幕
    R_BSP_SoftwareDelay(2u, BSP_DELAY_UNITS_SECONDS);
    OLED_CLS();//清屏
    for(i=0; i<8; i++)//通過點陣顯示漢字 -- i表示子表中漢字的位置
    {
      OLED_16x16CN(i*16,0,i);
      OLED_16x16CN(i*16,4,i+8);
    }
    R_BSP_SoftwareDelay(2u, BSP_DELAY_UNITS_SECONDS);
    OLED_CLS();
    //顯示不同字體大小的英文
    OLED_6x8Str(0,1,(unsigned char *)"www.embedfire.com");
    OLED_8x16Str(0,2,(unsigned char *)"Wildfire Tech");
    OLED_8x16Str(10,4,(unsigned char *)"SPI-OLED");
    R_BSP_SoftwareDelay(4u, BSP_DELAY_UNITS_SECONDS);
    OLED_CLS();
    //顯示圖片
    OLED_BMP(0,0,128,8,(unsigned char *)BMP1);
    R_BSP_SoftwareDelay(4u, BSP_DELAY_UNITS_SECONDS);
  }
#if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif
}

在循環(huán)中點亮屏幕,2秒后熄滅屏幕,然后使用 OLED_16x16CN 函數顯示中文,使用 OLED_6x8Str 函數測試6*8字符,使用 OLED_8x16Str函數測試8*16字符,最后只用 OLED_BMP 函數測試BMP位圖顯示。

把代碼下載后,可以看到OLED屏幕上由 清屏-> 顯示中文 -> 顯示英文 -> 顯示圖片 的順序循環(huán)顯示。

啟明6M5/2L1開發(fā)板 SPI_OLED 實驗現(xiàn)象:

啟明6M5/2L1開發(fā)板 SPI_OLED 實驗現(xiàn)象

啟明4M2開發(fā)板 SPI_OLED 實驗現(xiàn)象:

啟明4M2開發(fā)板 SPI_OLED 實驗現(xiàn)象

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • OLED
    +關注

    關注

    121

    文章

    6357

    瀏覽量

    233603
  • 發(fā)光二極管

    關注

    14

    文章

    1243

    瀏覽量

    69108
  • 瑞薩
    +關注

    關注

    37

    文章

    22481

    瀏覽量

    90821
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1885

    瀏覽量

    101179
  • 顯示模塊
    +關注

    關注

    1

    文章

    56

    瀏覽量

    23971

原文標題:OLED及SPI-OLED顯示實驗——瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南(72)

文章出處:【微信號:瑞薩嵌入式小百科,微信公眾號:瑞薩嵌入式小百科】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    RA系列FSP開發(fā)實戰(zhàn)指南I2C讀寫EEPROM實驗

    使用官方提供的FPS進行編程,官方提供的FPS具有方便、快捷、簡潔的特性。
    的頭像 發(fā)表于 01-27 10:02 ?3412次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>庫</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>指南</b><b class='flag-5'>之</b>I2C讀寫EEPROM<b class='flag-5'>實驗</b>

    RA系列FSP開發(fā)實戰(zhàn)指南SPI通訊協(xié)議的物理層和協(xié)議層簡介

    RA芯片的SPI分為簡單SPI和普通SPI,簡單SPI就是SCI模塊(Serial Communications Interface)中的
    的頭像 發(fā)表于 02-04 08:23 ?1.1w次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>庫</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>指南</b><b class='flag-5'>之</b><b class='flag-5'>SPI</b>通訊協(xié)議的物理層和協(xié)議層簡介

    e2studio(1)----芯片搭建FSP環(huán)境

    視頻教學 樣品申請 請勿添加外鏈 e2studio軟件 e2studio是的集成開發(fā)環(huán)境,FSP 提供了眾多可提高效率的工具,用于開發(fā)
    發(fā)表于 09-30 15:28

    RA-Eco-RA4M2開發(fā)板評測】SPI點亮16級灰階OLED顯示

    RA4M2R7FA4M2AD3CFP 有 1 個 SPI 接口,除此之外,還有 6 個 SCI 接口可以實現(xiàn) Simple SPI
    發(fā)表于 05-05 15:12

    RA6E2地奇星開發(fā)板試用】開發(fā)板介紹及環(huán)境搭建

    2.0 Full-Speed、CAN FD、I3C、Quad SPI、HDMI CEC、12-bit ADC/DAC 等豐富外設 二、開發(fā)環(huán)境搭建(推薦 e2 studio + FSP
    發(fā)表于 12-22 00:40

    RA4系列開發(fā)板體驗】開發(fā)環(huán)境搭建和新手點燈指南

    RA4系列開發(fā)板體驗】開發(fā)環(huán)境搭建和新手點燈指南
    發(fā)表于 11-24 22:54

    RA4系列開發(fā)板體驗】6. ADC測量搖桿模塊偏移量

    KEIL下UART實現(xiàn)printf與scanf重定向【RA4系列開發(fā)板體驗】4. PWM驅動LED【
    發(fā)表于 12-09 21:37

    RA4系列開發(fā)板體驗】7. 用DAC輸出正弦波以及余弦波

    KEIL下UART實現(xiàn)printf與scanf重定向【RA4系列開發(fā)板體驗】4. PWM驅動LED【
    發(fā)表于 12-09 22:56

    RA4系列開發(fā)板體驗】10. 我的試用總結

    KEIL下UART實現(xiàn)printf與scanf重定向【RA4系列開發(fā)板體驗】4. PWM驅動LED【
    發(fā)表于 12-10 22:34

    RA4系列開發(fā)板體驗】體驗過程

    拿到板子之后,做了幾個實驗過程,過程如下:1、在好奇心驅動下,逐步接觸;參照網上的實例,學習開發(fā)環(huán)境一、開箱驗貨二、搭建環(huán)境參考“ 【
    發(fā)表于 12-18 16:20

    【有獎直播預報名】電子RA系列產品開發(fā)工具FSP4.0.0新特性介紹

    為使用電子RA系列ARM微控制器的嵌入式系統(tǒng)設計提供簡單易用且可擴展的高質量軟件。 直播主題
    的頭像 發(fā)表于 11-22 12:20 ?1516次閱讀

    【視頻教程】RA單片機FSP開發(fā)(3)FSP架構-解釋Blinky架構[上]

    干貨分享 前篇回顧 【視頻教程】RA單片機FSP開發(fā)(1)環(huán)境搭建(帶RASC) 【視頻教程】
    的頭像 發(fā)表于 12-06 12:15 ?1903次閱讀

    使用e2 studio FSP基于RA2E1定時器配置PWM輸出

    使用e2 studio FSP基于RA2E1定時器配置PWM輸出
    的頭像 發(fā)表于 08-01 00:13 ?1980次閱讀
    使用<b class='flag-5'>瑞</b><b class='flag-5'>薩</b>e2 studio <b class='flag-5'>FSP</b>基于<b class='flag-5'>RA</b>2E1定時器配置PWM輸出

    電子RA系列微控制器的可擴展性強的配置軟件包 (FSP)安裝下載與使用指南

    電子RA系列微控制器的可擴展性強的配置軟件包 (FSP)安裝下載與使用指南
    的頭像 發(fā)表于 06-11 17:21 ?1834次閱讀

    RA系列FSP開發(fā)實戰(zhàn)指南SPI通訊協(xié)議的結構和功能

    RA6M5為例,SPI的功能結構框圖如下圖所示。接下來我們大致地研究一下它的結構和功能。
    的頭像 發(fā)表于 02-03 13:53 ?710次閱讀
    <b class='flag-5'>瑞</b><b class='flag-5'>薩</b><b class='flag-5'>RA</b><b class='flag-5'>系列</b><b class='flag-5'>FSP</b><b class='flag-5'>庫</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>指南</b><b class='flag-5'>之</b><b class='flag-5'>SPI</b>通訊協(xié)議的結構和功能