OLED:有機發光二極體,又稱為有機鐳射顯示
ASCII字元:http://c.biancheng.net/c/ascii/
內碼:計算機使用的二進位制字元編碼,就叫內碼,簡稱編碼。
將字元顯示在OLED上:
1,顯示字元,必須先有其點陣資料,點陣資料的集合,叫做字型檔
2,微控制器根據點陣資料按取模方向進行描點還原,就能顯示字元
3,ASCII字元寬度 = 漢字寬度的一半
ASCII字型檔製作:PCtoLCD2002.exe軟體
OLED基本驅動實現:
1,確定IO連線關係:開發板OLED介面原理圖
2,初始化IO口
3,編寫8080介面函式:oled_wr_byte
4,編寫OLED初始化函式:oled_init
5,編寫OLED畫點函式:oled_draw_point
記憶體保護單元:MPU
MPU的功能:
1.設定不同儲存區域的儲存器訪問許可權(特權級、使用者級)
2.設定儲存器(記憶體和外設)屬性(可快取、可緩衝、可共享)
設定記憶體區域的訪問許可權:
MPU_REGION_NO_ACCESS:無訪問(特權級&使用者級都不可訪問)
MPU_REGION_PRIV_RW:僅支援特權級讀寫訪問
MPU_REGION_PRIV_RW_URO:禁止使用者寫訪問(特權可讀寫訪問)
MPU_REGION_FULL_ACCESS:全訪問(特權級&使用者級都可訪問)
MPU_REGION_PRIV_RO:僅支援特權讀訪問
MPU_REGION_PRIV_RO_URO:只讀(特權&使用者都不可以寫)
配置記憶體區域的訪問屬性
三種記憶體型別:
Normal memory(ROM、FLASH、SRAM):CPU以最高效的方式載入和儲存位元組、半字和字, CPU對於這種記憶體區的載入或儲存不一定要按照程式程式碼的順序執行
Device memory(外設):載入和儲存要嚴格按照次序進行,確保暫存器按照正確順序設定
Strongly ordered memory:程式完全按照程式碼順序執行,CPU會等待當前載入儲存執行完畢後才執行下一條指令,導致效能下降。
Cache(高階快取)是提升STM32效能的關鍵一步
Cache支援4種基本操作:1,使能;2,禁止; 3,清空; 4,無效化
讀操作:CPU要讀取的SRAM區資料在Cache中已經載入好,叫讀命中(Cache hit);如果Cache裡面沒有,這就是讀Cache Miss。
寫操作:CPU要寫的SRAM區資料在Cache中已經開闢了對應的區域,這就叫寫命中(Cache hit);如果Cache裡面沒有開闢對應的區域怎麼辦,這就是所謂的寫Cache Miss。
Cache hit:直接從cache中讀出資料即可
Cache miss:
兩種處理方式:
read through:直接從記憶體中讀出,不用cache
read allocate:把資料從記憶體載入到cache,再從cache讀取
MPU基本配置步驟
1、禁止MPU:void HAL_MPU_Disable();
2、配置某個區域的MPU保護引數:透過呼叫HAL_MPU_ConfigRegion()函式去設定
3、使能MPU:void HAL_MPU_Enable();
4、編寫MemManage中斷服務函式:void MemManage_Handler(void)
LCD介面分類
MCU(≤800*480):帶SRAM,無需頻繁重新整理,無需大記憶體,驅動簡單
RGB(≤1280*800):不帶SRAM,需要實時重新整理,需要大記憶體,驅動稍微複雜
MIPI(4K):不帶SRAM,支援解析度高,省電,大部分手機屏用此介面
LCD驅動原理:驅動LCD驅動晶片
LCD驅動基本知識:
1,8080時序,LCD驅動晶片一般使用8080時序控制,實現資料寫入/讀取
2,初始化序列(陣列),屏廠提供,用於初始化特定螢幕,不同螢幕廠家不完全相同!
3,畫點函式、讀點函式(非必需),基於這兩個函式可以實現各種繪圖功能!
8080並口模式
8個資料引腳和5個控制引腳
引腳說明:
1.CS(片選):選中器件,低電平有效,先選中,後操作
2.WR(寫):寫訊號,上升沿有效,用於資料/命令寫入
3.RD(讀):讀訊號,上升沿有效,用於資料/命令讀取
4.RS(資料/命令):表示當前是讀寫資料還是命令,也叫DC訊號
5.D[15:0](資料線):雙向資料線,可以寫入/讀取驅動IC資料
英特爾匯流排:並口匯流排時序,常用於螢幕驅動IC的訪問
8080時序--寫時序
在WR上升沿,使資料寫入到SSD1306裡
設定DC引腳電平:資料型別(高:資料;低:命令)->CS引腳拉低:選中SSD1306->WR拉低:寫資料->準備資料:資料線->WR拉高:資料寫到SSD1306->釋放CS->釋放DC引腳
LCD驅動晶片簡介:6條指令即可完成對LCD的基本使用
1.0XD3(讀ID):用於讀取LCD控制器的ID,區分型號用
2.0X36(訪問控制):設定GRAM讀寫方向,控制顯示方向
3.0X2A(列地址):一般用於設定X座標
4.0X2B(頁地址):一般用於設定Y座標
5.0X2C(寫GRAM):用於往LCD寫GRAM資料
6.0X2E(讀GRAM):用於讀取LCD的GRAM資料
LCD基本驅動實現
1,確定IO連線關係
2,初始化IO口、初始化FSMC外設
3,編寫讀寫介面函式:lcd_wr_data、lcd_wr_regno、lcd_write_reg、lcd_rd_data
4,編寫LCD初始化函式:lcd_init
5,編寫LCD畫和讀點函式:lcd_draw_point
硬體IO連線關係
1.LCD_RST(RESET):LCD復位引腳,連線MCU復位腳,一起復位
2.LCD_BL(PC10):LCD背光引腳,控制LCD背光亮滅,高電平亮
3.LCD_CS(PC9):LCD片選,選中LCD,低電平有效
4.LCD_WR(PC7):LCD寫訊號,上升沿有效,用於資料/命令寫入
5.LCD_RD(PC6):LCD讀訊號,上升沿有效,用於資料/命令讀取
6.LCD_RS(PC8):LCD資料/命令線,表示當前是讀寫資料還是命令
7.LCD_D0~D15(PB0~PB15):LCD資料線,16位,一次可以寫入一個畫素
FSMC簡介:靈活的靜態儲存控制器
用途:用於驅動SRAM,NOR FLASH,NAND FLASH及PC卡型別的儲存器
FSMC通訊引腳介紹
1.FSMC_NE[x](輸出):片選引腳,x=1…4,每個對應不同的記憶體塊
2.FSMC_CLK(輸出):時鐘(同步突發模式使用)
3.FSMC_A[25:0](輸出):地址匯流排
4.FSMC_D[15:0](輸出/輸入):雙向資料匯流排
5.FSMC_NOE(輸出):輸出使能(“N”表明低電平有效訊號)
6.FSMC_NWE(輸出):寫使能
7.FSMC_NWAIT(輸入):NOR快閃記憶體要求FSMC等待的訊號
8.FSMC_NADV(輸出):地址、資料線複用時作鎖存訊號
LCD的RS訊號線與地址線關係:8080介面中RS(資料/命令選擇線),用FSMC的某根A地址線進行替換
當FSMC_A10為高電平時(即RS為高電平),FSMC_D[15:0]被理解為資料
當FSMC_A10為低電平時(即RS為低電平),FSMC_D[15:0]被理解為命令
FSMC相關暫存器介紹
1.FSMC_BCR4(片選控制暫存器):包含儲存器塊的資訊(儲存器型別/資料寬度等)
2.FSMC_BTR4(片選時序暫存器):設定讀操作時序引數(ADDSET/DATAST)
3.FSMC_BWTR4(寫時序暫存器):設定寫操作時序引數(ADDSET/DATAST)
SRAM/NOR快閃記憶體片選控制暫存器(FSMC_BCRx)
EXTMOD:擴充套件模式使能位,控制是否允許讀寫不同的時序。讀和寫用不同的時序,該位設定為1
WREN:寫使能位。該位設定1
MWID[1:0]:儲存器資料匯流排寬度。00,表示8位資料模式;01表示16位資料模式;10和11保留。
MTYP[1:0]:儲存器型別。00表示SRAM、ROM;01表示PSRAM;10表示NOR FLASH;11保留。
MBKEN:儲存塊使能位。該位設定1
SRAM/NOR快閃記憶體片選時序暫存器(FSMC_BTRx)
ACCMOD[1:0]:訪問模式。
00:模式A;
01:模式B;
10:模式C;
11:模式D。
DATAST[7:0]:資料保持時間,等於DATAST(+1)個HCLK時鐘週期,DATAST最大為255。
對於ILI9341來說,其實就是RD低電平持續時間,最小為355ns。
對於F1,一個HCLK = 13.9ns(1/72M),設定為15
對於F4,一個HCLK = 6ns(1/168M),設定為60
ADDSET[3:0]:地址建立時間。表示ADDSET(+1)個HCLK時鐘週期,ADDSET最大為15。
對於ILI9341來說,相當於RD高電平持續時間,為90ns。
F1即使設定為0,RD也有超過90ns的高電平,這裡設定為1。F4對該位設定為15。
SRAM/NOR快閃記憶體寫時序暫存器(FSMC_BWTRx)
ACCMOD[1:0]:訪問模式。
00:模式A;
01:模式B;
10:模式C;
11:模式D。
DATAST[7:0]:資料保持時間,等於DATAST(+1)個HCLK時鐘週期,DATAST最大為255。
對於ILI9341來說,其實就是WR低電平持續時間,最小為15ns。
對於F1,一個HCLK = 13.9ns,設定為3
對於F4,一個HCLK = 6ns,設定為9
ADDSET[3:0]:地址建立時間。表示ADDSET(+1)個HCLK時鐘週期,ADDSET最大為15。
對於ILI9341來說,相當於WR高電平持續時間,為15ns。
F1即使設定為1,WR也有超過15ns的高電平,這裡設定為1。
F4對該位設定為8。
ST官方提供的暫存器定義對應關係如下:
BTCR[0]對應FSMC_BCR1,BTCR[1]對應FSMC_BTR1
BTCR[2]對應FSMC_BCR2,BTCR[3]對應FSMC_BTR2
BTCR[4]對應FSMC_BCR3,BTCR[5]對應FSMC_BTR3
BTCR[6]對應FSMC_BCR4,BTCR[7]對應FSMC_BTR4
FSMC_BWTRx則組合成BWTR[7]暫存器組,他們的對應關係如下:
BWTR[0]對應FSMC_BWTR1,BWTR[2]對應FSMC_BWTR2,
BWTR[4]對應FSMC_BWTR3,BWTR[6]對應FSMC_BWTR4,
BWTR[1]、BWTR[3]和BWTR[5]保留,沒有用到
FSMC相關HAL庫函式簡介
HAL_StatusTypeDef HAL_SRAM_Init ( SRAM_HandleTypeDef *hsram, FSMC_NORSRAM_TimingTypeDef *Timing,FSMC_NORSRAM_TimingTypeDef *ExtTiming )
為什麼需要外部SRAM:跑演算法、跑GUI
SRAM 讀寫操作步驟
1、設定地址訊號線:發出要訪問的儲存器目標地址
2、控制片選訊號:選中器件
3、決定資料操作方式:
讀操作,控制讀使能訊號OE表示讀資料
寫操作,控制寫使能訊號WE表示寫資料
4、設定獲取資料方式:掩碼訊號BLE和BHE指示要訪問目標地址的高、低位元組部分
5、獲取資料:
讀過程,儲存器透過資料線向主機輸出目標地址資料
寫過程,使用資料線向儲存器目標地址寫入目標資料
FSMC,靈活的靜態儲存控制器,能驅動SRAM、NOR/NAND Flash等儲存器。
SRAM驅動步驟
1、配置FSMC:使能FSMC時鐘,並配置FSMC相關的IO(複用輸出)及其時鐘使能
2、設定FSMC相關引數:設定Bank1第三區的儲存器 工作模式、位寬和讀寫時序引數
3、進行資料訪問:根據區域,決定操作外部記憶體的首地址
為什麼需要外部SDRAM:LTDC驅動RGB屏、跑演算法、跑GUI
NAND FLASH:非易失性儲存器,其內部採用非線性宏單位模式,為固態大容量記憶體的實現提供了廉價有效的解決方案。
RGB介面:24根顏色資料線(RGB各佔8根即RGB888,1600W色)
USMART:串列埠除錯元件,可以大大提高程式碼除錯效率
USMART可以直接透過串列埠呼叫使用者編寫的函式,隨意修改函式引數
USMART主要特點:
1,可以呼叫絕大部分使用者直接編寫的函式
2,佔用資源少(最小:4KB FLASH, 72B SRAM)
3,支援引數型別多(整數(10/16)、字串、函式指標等)
4,支援函式返回值顯示且可對格式進行設定
5,支援函式執行時間計算
不支援浮點數引數
USMART原理:
透過對比使用者輸入字串和本地函式名,用函式指標實現呼叫不同的函式
USMART組成:
usmart .c/h:核心檔案,用於處理命令以及對外部互動
usmart_config.c:函式管理檔案,用於新增使用者需要USMART管理的函式
usmart_port.c/h:移植檔案,用於USMART移植
usmart_str.c/h:字串處理檔案,用於字串轉換、引數獲取等
USMART掃描函式:void usmart_scan(void);
USMART移植:
獲取USMART元件->新增到工程->適配硬體->新增執行函式:usmart_config.c->透過串列埠互動
RTC:實時時鐘(Real Time Clock,RTC),本質是一個計數器,計數頻率常為秒,專門用來記錄時間。