CH585 实现的屏幕直驱
Flash_SPI原理及操作手册
原理:

l MCU与spi flash和OLED两个外设通信,两个外设共用data线及SCLK线,通过两个片选信号实现分时访问,实现指令和数据的发送,使得oled显示屏通过DMA方式读取并显示spi flash中内容
硬件:
|
|
OLED |
FLASH |
MCU |
|
OLED片选 |
CS |
|
PB12 |
|
数据/命令选择 |
DC |
|
PB18 |
|
复位 |
RES |
|
PB23 |
|
数据 |
D1 |
SO |
|
|
时钟 |
D0 |
SCLK |
PA13 |
|
flash数据输入 |
|
SI |
PA14 |
|
Flash片选 |
|
CS |
PA12 |
软件:
主要参数设置:
|
系统主频 |
78MHz |
|
SPI时钟频率 |
(78/8)MHz |
|
oled时钟分频 |
5 |
|
oled振荡器频率 |
1000 |
|
oled复用率 |
64 |
|
oled显示偏移 |
0 |
|
oled 电荷泵 |
使能 |
|
oled 寻址方式 |
页寻址 |
|
oled SEG重映射方式 |
正常 |
|
oled COM扫描方式 |
上下反置 |
|
oled 对比度 |
239 |
Main:
OLED_Init() :
l OLED_SPI初始化
l OLED初始化:
n 关闭显示
n 设置时钟频率、偏移、内存寻址方式等
n 开启显示
OLED_FILL(x1, x2, y1, y2, s) : 控制OLED(x1,y1)至(x2,y2)对角线的长方形上的像素亮灭
l OLED_DrawPoint(x,y,s) : 限制屏幕像素小于128*64;三个临时变量pos,page,temp,将屏幕所有行分为8个page,每个page包含(所有行/8=8),7-y实现page的反转,pos为像素点在page内的偏移,temp实现对应位置1,将oled数据缓存至OLED_GRAM二维数组中置1或置0,实现点亮或熄灭像素点
W25Q_Init() : flash初始化
W25Q_EraseAll():对flash内容全部擦除
OLED_ShowString():将字符串单个字符取出并利用OLED_ShowChar()函数显示
l 此函数会调用OLED_DrawPoint(x,y,s)来更新OLED_GRAM内容
W25Q_MemWrite(addr, len, buf):将OLED_GRAM数据存入flash中
l addr:起始页地址,必须地址对齐,为256整数倍
l len:要写入的数据的字节数
l buf:要写入的数据所在的缓冲区地址
l 返回值:此次写入占用页的数量
l 该函数的使用需保证写入的flash已擦除
Main_Circulation() : 利用DMA方式实现从falsh中读取缓存数据显示到oled上
l W25Q_DMAMemRead(addr, len, buf):首先等待写操作完成(wait 20ms); 拉低片选,开始通信,发送读命令,发送24位地址,MOSI失能,片选拉低,启动DMA接受buf数据,拉高片选,释放flash,失能MOSI
浙公网安备 33010602011771号