STM32H750VBT6 DMA驱动TFT-LCD(ST7789V)

news/2024/11/26 13:36:46/

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;
}

 


http://www.ppmy.cn/news/220249.html

相关文章

linux 核显驱动程序,在Ubuntu系统上安装英特尔核显驱动安装器的方法

Intel HD Graphics是Intel一系列的集成显示核心。不同于以往集成在芯片组的显示核心,显示核心是集成于处理器上,并且拥有独立的品牌。中国大陆官方中文品牌名称为“核芯显卡”,而台湾仍采用半直译的“Intel HD 图形”,而港澳地区则继续沿用官方的英文名称“Intel HD Graphi…

ubuntu16.04server安装dell服务器H750raid卡驱动

1.下载 avago megaraid-9560-8i驱动 MegaRAID 9560-8i 2.因为需要提取驱动内的megaraid_sas.ko文件&#xff0c;所以要先找一台可以正常安装的电脑&#xff0c;先安装一遍系统&#xff0c;找到下载驱动内的.deb驱动文件&#xff0c;安装驱动 sudo apt install dkms sudo dpk…

移植Linux Kernel SM750 驱动到VxWorks 7

一、SM750简介 SM750 是SiliconMotion 推出的一款适合嵌入式设备的显卡&#xff08;Embedded GPU&#xff09;&#xff0c;采用PCIe接口与CPU连接&#xff0c;内部集成16MB DDR SDRAM显存&#xff0c;产品具有低功耗特性&#xff0c;适合工业、医疗、军工等领域。 图 1 SM750…

SpringCloudAlibaba

Spring Cloud Alibaba 是 Spring Cloud 的一个子项目&#xff0c;它是由阿里巴巴开发的一套微服务解决方案&#xff0c;旨在为微服务架构提供一站式解决方案&#xff0c;包括服务注册与发现、配置中心、消息总线、负载均衡、熔断器、限流器、分布式事务等组件。 Spring Cloud A…

Java实现LL1语法分析器【编译原理】

java通过预测分析法实现语法分析程序【编译原理】 前言推荐实验要求需知LL1工作原理 Java实现LL1语法分析器0实验步骤LL1.javaGrammar.javaLeftRecursion.javaFirstAndFollow.javaAnalyzeTable.javaLL1Stack.java实验结果 Java实现LL1语法分析器1Grammar.javaProduction.javaFi…

实用小软件合集

实用小软件合集 原始位置&#xff1a; http://softbbs.zol.com.cn/redirect.php?tid5614590&gotolastpost 都是些小软件&#xff01;图片就不发了!自己体会感受&#xff01; 附件&#xff1a; (CPU主频调整)P4MAGICSPEED.rar (84 K) 下载次数:259 附件&#xff1a; 1秒…

Spring Boot 集成并开发 Sa-token

1 Spring Boot集成Sa-token 1.1 前言 Sa-token是一款高可用的权限认证框架&#xff0c;他带我们用最简化的配置完成用 spring security 需要进行大量配置的才能完成的工作。 Sa-Token 是一个轻量级 Java 权限认证框架&#xff0c;主要解决&#xff1a;登录认证、权限认证、单…

数据库系列:数据库高可用及无损扩容

1 背景 在大型互联网场景中&#xff0c;数据库的高可用性显得尤为重要&#xff0c;为了保证稳定性&#xff0c;一般需要采用强化的架构模式&#xff0c;以保证数据层能够提供持续有效的稳定支撑。 2 高可用架构的基本演进过程 2.1 基本的数据库架构 每个服务对应一个存储服…