1、查阅ST7789V手册

(1)显示属性

(2)像素格式

LCD 驱动部分:

const unsigned char ord[]={0x36,0x3A,0xB2,0xB7,0xBB,0xC0,0xC2,0xC3,0xC4,0xC6,0xD0,0xE0,0xE1,0x2A,0x2B,0x29,0x2C};
const unsigned char dat[]={0x20,
                                            0x65,
                                            0x0C,0x0C,0x00,0x33,0x33,
                                            0x72,
                                            0x3D,
                                            0x2C,
                                            0x01,
                                            0x12,
                                            0x20,
                                            0x0F,
                                           0xA4,0xA1,                                                                      0xD0,0x04,0x0D,0x11,0x13,0x2B,0x3F,0x54,0x4C,0x18,0x0D,0x0B,0x1F,0x23,                              0xD0,0x04,0x0C,0x11,0x13,0x2C,0x3F,0x44,0x51,0x2F,0x1F,0x1F,0x20,0x23,
                                            0x00,0x00,0x00,0x86,
                                            0x00,0x00,0x00,0xEF
                                                                                
};//数据
const unsigned char ofs[]={0,1,2,7,8,9,10,11,12,13,14,16,30,44,48,0,0};//数据偏移位置
const unsigned char num[]={1,1,5,1,1,1,1,1,1,1,2,14,14,4,4,0,0};//连续发送个数
    
inline static void ST7789_Config(unsigned char order,unsigned char* pData,unsigned char Size)
{
    unsigned short i=0;
    //
    SPI4->CR2 =1;
    SPI4->CR1 = SPI_CR1_SPE;
    
  SPI4->TXDR=order;
    SPI4->CR1|=SPI_CR1_CSTART;
    
    //发送命令 
    IO_Write(DCX,cmd);
    while(!(SPI4->SR & SPI_SR_TXC));
    SPI4->IFCR |= SPI_IFCR_EOTC+SPI_IFCR_TXTFC;
    SPI4->CR1 &=~ SPI_CR1_SPE;

if(Size>4)
    {
        xplay->NDTR=Size;
        xplay->M0AR=(unsigned int)pData;
        
        SPI4->CR2 = Size;
      SPI4->CR1 = SPI_CR1_SPE;
      SPI4->CR1|=SPI_CR1_CSTART;
        
        IO_Write(DCX,data);//发送数据
        xplay->CR |= EN;
        
        //此处经验证其他非阻塞方案会影响后续初始化,此处使用堵塞等待发送完毕,此处使能了dma的FIFO,不能判断DMA是否完成了发送
        while(SPI4->CR1 & SPI_CR1_CSTART);
    
        DMA1->LIFCR|=(DMA1->LISR & 0x3F0000);
        
        
    }
    else if(Size>0)
    {
        SPI4->CR2 = Size;
        SPI4->CR1 = SPI_CR1_SPE;
        SPI4->CR1|= SPI_CR1_CSTART;
        SPI4->TXDR=*(unsigned int*)pData;
        IO_Write(DCX,data);//发送数据
        while(!(SPI4->SR & SPI_SR_TXC));
        //while(SPI4->CR1 & SPI_CR1_CSTART);
    }
    
    SPI4->CR1 &=~ SPI_CR1_SPE;
    SPI4->IFCR |= SPI_IFCR_EOTC+SPI_IFCR_TXTFC;
    //IO_Write(DCX,cmd);
    
}

void ST7789_Init(void)
{
    unsigned int   sCR = 0;//config spi4 dma cr
    
    xplay->FCR = DMA_SxFCR_DMDIS|LL_DMA_FIFOTHRESHOLD_1_4;
    xplay->PAR= (unsigned int)&(SPI4->TXDR);
    
    ((SxCR*)&sCR)->PL=LoW;
    ((SxCR*)&sCR)->MINC=EN;
    ((SxCR*)&sCR)->PINC=DIS;
    ((SxCR*)&sCR)->CIRC=DIS;
    ((SxCR*)&sCR)->DIR=M2P;
    ((SxCR*)&sCR)->MBST=FOUR;
    ((SxCR*)&sCR)->PBST=SINGLE;
    xplay->CR = sCR;     
    //发送softreset

ST7789_Config(0x01,NULL,0);//软件复位

//需要延时130ms,由系统自动调用后续任务ST7789_SlpOut
}
__USED void ST7789_MoreInit(void)
{
    //在主循环中完成后续初始化
    unsigned char i=0,*loc=(unsigned char*)dat;
    for(i=0;i<sizeof(ord);i++)
    {
        ST7789_Config(ord[i],loc+ofs[i],num[i]);
    }

xplay->NDTR=1000;
    xplay->M0AR=(unsigned int)gram;
    SPI4->CR2 = 1000;
    SPI4->CR1 = SPI_CR1_SPE;
    SPI4->CR1|= SPI_CR1_CSTART;
    SCB_CleanInvalidateDCache_by_Addr((unsigned int*)gram,sizeof(gram));    
    IO_Write(DCX,data);//发送数据
    xplay->CR |= EN;
}

STM32H750VBT6 DMA驱动TFT-LCD(ST7789V)相关推荐

  1. 简单明了操作——ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏)

    简单明了操作--ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏) 前言 准备材料 esp8266 NodeMCU(串口WiFi模块) 1.44inch SPI Arduin ...

  2. AT32驱动TFT LCD显示示例

    1.1 案例 TFT LCD显示 1.1.1 简介 TFT LCD液晶显示屏是薄膜晶体管型液晶显示屏,TFT液晶每个像素都可以单独控制,因而每个节点都相对独立,并可以连续控制,这不仅提高了显示的反应速 ...

  3. stm32 驱动 TFT LCD

    LCD/LCM的基本概念 液晶显示器(Liquid Crystal Display: LCD)的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状 ...

  4. S3C2440A驱动RGB接口TFT LCD的研究(转载)

    S3C2440A驱动RGB接口TFT LCD的研究 时间: 2009-02-25 11:29:50 来源:嵌入式在线 作者:纪宁宁,孙灵燕 1 引言     随着科技的进步,TFT LCD作为显示器件 ...

  5. ESP8266-Arduino编程实例-2.8寸TFT LCD驱动(ILI9341控制器)

    2.8寸TFT LCD驱动(ILI9341控制器) 液晶显示器 (LCD) 是一种平板显示器或其他电子调制光学设备,它利用液晶与偏振器的光调制特性.液晶不直接发光,而是使用背光或反射器来产生彩色或单色 ...

  6. STM32 FSMC接口驱动4.3寸TFT LCD屏

    STM32 FSMC接口驱动4.3寸TFT LCD屏 STM32的FSMC接口是并行总线接口,可以用于驱动存储芯片如FLASH/SRAM等,也可以用于驱动并口LCD屏. 这里以STM32F103VET ...

  7. STM32 驱动4.3寸TFT LCD 触摸屏

    STM32 驱动4.3寸TFT LCD 触摸屏 STM32的FSMC接口是并行总线接口,可以用于驱动存储芯片如FLASH/SRAM等,也可以用于驱动并口LCD屏.触摸屏是在显示屏上覆盖一层触摸感应的外 ...

  8. 基于STM32F411使用SPI+DMA驱动LCD

    先看效果 F411CE 硬件SPI+DMA驱动LCD 基于HAL库 其实HAL库我用不太习惯,一直也是用的标准库 但HAL库确实是好上手一些,就迅速创建一个新的template 这次就当尝试一下吧,因 ...

  9. Linux驱动之LCD驱动编写

    在Linux驱动之内核自带的S3C2440的LCD驱动分析这篇博客中已经分析了编写LCD驱动的步骤,接下来就按照这个步骤来字尝试字节编写LCD驱动.用的LCD屏幕为tft屏,每个像素点为16bit.对 ...

最新文章

  1. 全景分割 | Learning to Fuse Things and Stuff
  2. 获取当前元素在兄弟元素节点中的索引
  3. spring-boot-mybatis
  4. [luogu1131][bzoj1060][ZJOI2007]时态同步【树形DP】
  5. matlab save txt 乱码,matlab代码或中文复制到word就变成乱码怎么办?
  6. zabbix计算型监控项函数last_zabbix 自定义key类型之计算(Calculated items)-阿里云开发者社区...
  7. java 保存 设置_java – 保存设置的实现
  8. android新版本广告,新增朋友圈广告?微信6.1安卓新版发布
  9. VirtualBox 复制虚拟机 克隆系统
  10. 戴尔科技集团公布 2019 财年第四季度及全年财报,巨大进步和强劲发展的一年...
  11. 在Zabbix中添加交换机端口监控
  12. js获取url后面的参数值
  13. 与其他库一起使用jQuery
  14. 从零开始学数据库-MySQL
  15. 【炫丽跑车win7主题】
  16. AUTOCAD——超级填充命令3
  17. JAVA Swing添加表格
  18. 方舟生存进化服务器存档位置,方舟生存进化如何转移存档
  19. 诺禾:和Java一样能用汉字编程的神奇语言
  20. 如何将一个HTML页面嵌套在另一个页面中

热门文章

  1. 探索企业即时通讯软件的发展趋势
  2. data.frame中的NA值怎么替换成0 把na变为0 把na变为想要的数 改变na 是否为na is.na()是否为null is.null() is.null() 删除去掉NA的行
  3. 北京PM2.5浓度回归分析
  4. OpenGL--混合
  5. win10 tensorflow MTCNN Demo
  6. Oracle打补丁步骤
  7. 爬虫获取的数据和在自己浏览器看到的不一样
  8. 长链剖分 总结 【知识点】
  9. 程序员的跳槽人生(跳槽攻略)
  10. 夏普计算机怎么弹音乐,夏普歌手版电视 为你提升歌唱技巧的利器