标题 关于全志R11如何驱动ST7789芯片的屏幕
1、本次采用的是4线SPI通信,IM3-0为[1,1,1,0]模式
2、屏的接口为50ping,接线分别为如下
CS接地(或者软件控制)
## 标题
因为是SPI串口通信有些管脚已经被复用,最后二根数据线分别为


目前代码里只控制屏幕所以SDO可以悬空
其他的一些电源接地脚需要自己注意一下,下面为放置在内核中的代码。
#include <linux/init.h>
#include <linux/miscdevice.h>
#include <linux/module.h>
#include <linux/version.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <asm/io.h>
#include <linux/wait.h>
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/gpio.h>

/*本次通信采用的4线SPI通信
RS直接接地没有处理
RS是数据和命令的控制脚
SCLK为时钟
SDI和SDO为数据线(SDO目前是悬空未进行操作)
RST为复位脚
平台为全志R11
*/
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40 //棕色
#define BRRED 0XFC07 //棕红色
#define GRAY 0X8430 //灰色
//GUI颜色

#define DARKBLUE 0X01CF //深蓝色
#define LIGHTBLUE 0X7D7C //浅蓝色
#define GRAYBLUE 0X5458 //灰蓝色
//以上三色为PANEL的颜色

#define LIGHTGREEN 0X841F //浅绿色
#define LGRAY 0XC618 //浅灰色(PANNEL),窗体背景色

#define LGRAYBLUE 0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE 0X2B12 //浅棕蓝色(选择条目的反色)

#define LCD_W 240
#define LCD_H 320
#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long

#define GPIO_PB_0 160
#define GPIO_PB_1 161
#define GPIO_PB_6 164
#define GPIO_PB_7 165

#define SCLK GPIO_PB_0
#define SDI GPIO_PB_1
#define RS GPIO_PB_6
#define Reset GPIO_PB_7

#define OLED_SCLK_Clr() gpio_direction_output(SCLK, 0)//CLK
#define OLED_SCLK_Set() gpio_direction_output(SCLK, 1)

#define OLED_SDIN_Clr() gpio_direction_output(SDI, 0)//DIN
#define OLED_SDIN_Set() gpio_direction_output(SDI, 1)

#define OLED_RST_Clr() gpio_direction_output(Reset, 0)//RES
#define OLED_RST_Set() gpio_direction_output(Reset, 1)

#define OLED_DC_Clr() gpio_direction_output(RS, 0)//DC
#define OLED_DC_Set() gpio_direction_output(RS, 1)

//先释放一下几个gpio口为了方便以后的占用
static void spi_free_gpio(void)
{
gpio_free(SDI);
gpio_free(SCLK);
gpio_free(RS);
gpio_free(Reset);
}

//申请GPIO口资源
static int spi_request_gpio(void)
{
if (gpio_request(SDI, “spi_SDI”) < 0)
{
printk(“fail to request SDI\n”);
return -1;
}
if (gpio_request(SCLK, “spi_sclk\n”) < 0)
{
printk(“fail to request sclk\n”);
return -1;
}
if (gpio_request(RS, “spi_RS”) < 0)
{
printk(“fail to request RS\n”);
return -1;
}
if (gpio_request(Reset, “spi_reset”) < 0)
{
printk(“fail to request reset\n”);
return -1;
}
return 0;
}

u16 BACK_COLOR, POINT_COLOR; //背景色,画笔色
void LCD_Writ_Bus(char dat) //串行数据写入
{
u8 i;

for(i=0;i<8;i++)
{             OLED_SCLK_Clr();if(dat&0x80)OLED_SDIN_Set();else OLED_SDIN_Clr();OLED_SCLK_Set();dat<<=1;
}

}

void LCD_WR_DATA8(char da) //发送数据-8位参数
{ //OLED_CS_Clr();
OLED_DC_Set();
LCD_Writ_Bus(da);
//OLED_CS_Set();
}
void LCD_WR_DATA(int da)
{// OLED_CS_Clr();
OLED_DC_Set();
LCD_Writ_Bus(da>>8);
LCD_Writ_Bus(da);
// OLED_CS_Set();
}
void LCD_WR_REG(char da)
{ // OLED_CS_Clr();
OLED_DC_Clr();
LCD_Writ_Bus(da);
// OLED_CS_Set();
}
void LCD_WR_REG_DATA(int reg,int da)
{// OLED_CS_Clr();
LCD_WR_REG(reg);
LCD_WR_DATA(da);
// OLED_CS_Set();
}

void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
LCD_WR_REG(0x2a);
LCD_WR_DATA8(x1>>8);
LCD_WR_DATA8(x1);
LCD_WR_DATA8(x2>>8);
LCD_WR_DATA8(x2);

LCD_WR_REG(0x2b);
LCD_WR_DATA8(y1>>8);
LCD_WR_DATA8(y1);
LCD_WR_DATA8(y2>>8);
LCD_WR_DATA8(y2);

LCD_WR_REG(0x2C);
}

//清屏函数
//Color:要清屏的填充色
void LCD_Clear(u16 Color)
{
u16 i,j;
Address_set(0,0,LCD_W-1,LCD_H-1);
for(i=0;i<LCD_W;i++)
{
for (j=0;j<LCD_H;j++)
{
LCD_WR_DATA(Color);
}

      }

}

void Lcd_Init(void)
{
// spi_free_gpio();
// mdelay(120);
// spi_request_gpio();
// mdelay(120);
//OLED_CS_Clr(); //打开片选使能
OLED_RST_Clr();
mdelay(20);
OLED_RST_Set();
mdelay(20);
// OLED_BLK_Set();

//************* Start Initial Sequence **********//
LCD_WR_REG(0x36);
LCD_WR_DATA8(0x00);

LCD_WR_REG(0x3A);
LCD_WR_DATA8(0x05);

LCD_WR_REG(0xB2);
LCD_WR_DATA8(0x0C);
LCD_WR_DATA8(0x0C);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x33);
LCD_WR_DATA8(0x33);

LCD_WR_REG(0xB7);
LCD_WR_DATA8(0x35);

LCD_WR_REG(0xBB);
LCD_WR_DATA8(0x19);

LCD_WR_REG(0xC0);
LCD_WR_DATA8(0x2C);

LCD_WR_REG(0xC2);
LCD_WR_DATA8(0x01);

LCD_WR_REG(0xC3);
LCD_WR_DATA8(0x12);

LCD_WR_REG(0xC4);
LCD_WR_DATA8(0x20);

LCD_WR_REG(0xC6);
LCD_WR_DATA8(0x0F);

LCD_WR_REG(0xD0);
LCD_WR_DATA8(0xA4);
LCD_WR_DATA8(0xA1);

LCD_WR_REG(0xE0);
LCD_WR_DATA8(0xD0);
LCD_WR_DATA8(0x04);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x11);
LCD_WR_DATA8(0x13);
LCD_WR_DATA8(0x2B);
LCD_WR_DATA8(0x3F);
LCD_WR_DATA8(0x54);
LCD_WR_DATA8(0x4C);
LCD_WR_DATA8(0x18);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x0B);
LCD_WR_DATA8(0x1F);
LCD_WR_DATA8(0x23);

LCD_WR_REG(0xE1);
LCD_WR_DATA8(0xD0);
LCD_WR_DATA8(0x04);
LCD_WR_DATA8(0x0C);
LCD_WR_DATA8(0x11);
LCD_WR_DATA8(0x13);
LCD_WR_DATA8(0x2C);
LCD_WR_DATA8(0x3F);
LCD_WR_DATA8(0x44);
LCD_WR_DATA8(0x51);
LCD_WR_DATA8(0x2F);
LCD_WR_DATA8(0x1F);
LCD_WR_DATA8(0x1F);
LCD_WR_DATA8(0x20);
LCD_WR_DATA8(0x23);

LCD_WR_REG(0x21);

LCD_WR_REG(0x11);
//Delay (120);

LCD_WR_REG(0x29);

// delay_ms (120);
// LCD_WR_REG(0x23);
}

//入口主函数
static int __init ya15c_spi_init(void)
{

spi_free_gpio();
mdelay(50);
if (spi_request_gpio())
{printk("ya15c spi initializer failure...\n");return -1;
}
mdelay(50);
OLED_SCLK_Set();
OLED_SDIN_Set();
OLED_RST_Set();
OLED_DC_Set();
mdelay(50);

// printk("\n\n\n\n\n\n111111111111111111111111111===================\n\n\n\n\n\n\n\n\n");
// printk(“start 11to set color! …\n”);
Lcd_Init();
mdelay(120);

LCD_Clear(WHITE); //清屏
return 0;
}

static void __exit ya15c_spi_exit(void)
{
printk(“ya15c exit!\n”);
}

module_init(ya15c_spi_init);
module_exit(ya15c_spi_exit);
MODULE_LICENSE(“GPL”);

调试的过程中遇到的坑是真的不少。希望能够帮助到大家

关于全志R11如何驱动4线ST7789芯片的屏幕相关推荐

  1. PlatformIO平台使用TFT_eSPI库驱动IC为ST7789的TFT屏幕(TFT_eSPI详解)

    TFT_eSPI库的安装 首先在Libraries里面搜索安装TFT_eSPI库到你的工程文件里面.   我们需要在这里选择要添加TFT_espi库的工程里面,选择完之后就直接Add就添加好了. TF ...

  2. 全志r11_全志R328 Demo开发板;全志R333开发板/核心板;全志R11开发板/核心板;全志R16开发板/方案设计...

    1.全志R328 Demo开发板 参数: 扫码可见详情信息: 2.全志R333开发板/核心板 硬件特征: 扫码可见详情信息: 3.全志R11开发板/核心板 硬件特征: 具体详情扫码可见: 4.全志R1 ...

  3. 全志R11 SDK版本说明手册

    1. R11 主要内容 [系统] Tina 版本:基于 Tina_v2.5 + Linux-3.4 版本. 支持特性:支持 R11 开发板. 支持 5 寸屏 LCD 显示,分辨率是 800*480. ...

  4. ESP32上手笔记 06 -驱动1.3‘ ST7789 SPI屏幕(TFT_eSPI)

    一.TFT_eSPI库 TFT_eSPI是用于TFT-LCD液晶屏的Arduino图形库,支持多种平台,多种LCD驱动IC. 1. 安装库 下载库:https://github.com/Bodmer/ ...

  5. 全志A64触摸屏驱动调试

    一.前言 linux的触摸屏驱动一般要经历一下几个步骤(以4412为例):1.移植驱动到linux源码"driver/input/touchscreen/"目录下,在Kconfig ...

  6. 全志T7 Display驱动分析

    本文档在<全志T7 Display驱动简介.docx>基础上进行补充说明,主要的目的是想了解系统总共有多少个图像层可以给应用程序使用,好让以后应用程序如何同叠加图像层来高效显示画面. DS ...

  7. 全志T7 Display驱动简介

    可先阅读<Sunxi_display2模块使用文档.pdf>.<图形开发用户指南.pdf> DE:Display Engine Write-Back:capture data ...

  8. 【调音小栈】普瑞声纳Revelator io24直播关联机架驱动跳线设置教程

    小编呢,之前调试过的普瑞声纳(PreSonus)声卡都是录音声卡,默认不支持直播/网络K歌,而现在分享这一款声卡,是一款跳线声卡呢,是普瑞声纳PreSonus Revelator io24声卡,支持直 ...

  9. 全志JAVA_全志R11处理器参数详细说明

    R11代表了Allwinner在智能硬件处理器上的最新成就,它集成了一个以1.2GHz的速度工作的单ARM CortexTM-A7 CPU,并支持多个外围设备. CPU ARM CortexTM-A7 ...

最新文章

  1. 很多人问,到底要不要转管理
  2. java学习笔记 2022.2.11
  3. 项目经理在项目各阶段的工作重点
  4. linux野指针追踪,【华清远见】野指针和空指针的两个小点
  5. c语言数据类型简介表格,C语言基本数据类型简介.docx
  6. 内存条引发的各类故障解析
  7. 路径规划算法3.1 人工势场法APF
  8. astah新建一个项目_Astah SysML
  9. CryEngine3 调试Shader方法
  10. ZCMU-1428: Bit++ (水)
  11. 若依的框架怎么样_若依后台管理系统初识
  12. 阶梯博弈(Staircase Nim)
  13. php邮箱失效链接,wordpress邮件功能设置及密码重置链接失效问题解决
  14. 革新科技的TI+ST+XILINX嵌入式异构多核开发平台教育市场应用
  15. 操作Python列表Ⅰ
  16. ArduinoMega2560 引脚表
  17. 从程序员到项目经理(4):外行可以领导内行吗【转载】
  18. 微信小程序:数独挑战之九宫格-中级-第一题解题思路
  19. 【力扣-动态规划入门】【第 21 天】377. 组合总和 Ⅳ
  20. php显示标题控制长度,wordpress控制文章标题长度的问题

热门文章

  1. html页面的响应式布局,HTML+CSS十分钟实现响应式布局页面,响应式布局实战教程...
  2. 基于最小二乘支持向量机(LS-SVM)进行分类、函数估计、时间序列预测和无监督学习附Matlab代码
  3. WindowsLonghorn开启jade主题
  4. ramdump-parser使用说明
  5. android之DPAD上下左右四个键控制
  6. 录像带/摄像带转光盘(上海)
  7. b级计算机机房标准,B级电子信息系统机房技术要求(国标GB50174–2008)
  8. 【无敌恢复U盘数据的方法】
  9. UE4 获取目录下所有的图片转换成Texture2D并通过UMG显示出来
  10. 校园购物平台功能说明