OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6246|回复: 5

哪位有STM32+ST7789V,驱动例程可以分享一下吗

[复制链接]

10

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2019-9-15
在线时间
126 小时
发表于 2020-6-1 15:39:29 | 显示全部楼层 |阅读模式
5金钱
最近拿到一块2.4寸  spi驱动的ST779V得屏,但是根据商家给的驱动程序,改写完后,屏幕只是亮起背光没有其他反应,哪位大神有这块屏的stm32的例程啊,可不可以分享一下,谢谢
下面是我改的LCD的初始化
        SPILCD_RST_SET ;        //LCD_RST=1               
        delay_ms(1);
        SPILCD_RST_RESET ;        //LCD_RST=0         //SPI接口复位
        delay_ms(1); // delay 20 ms
    SPILCD_RST_SET ;        //LCD_RST=1               
        delay_ms(120);

        lcddev.width=240;
        lcddev.height=320;
        lcddev.wramcmd=0X2C;  //存储
        lcddev.setxcmd=0X2A;  //列地址
        lcddev.setycmd=0X2B;  //页地址

//        LCD_RESET=1;
//        delay (100); //Delay 100ms
//        LCD_RESET=0;
//        delay (200); //Delay 200ms
//        LCD_RESET=1;
//        delay (500); //Delay 500ms
        //---------------------------------------------------------------------------------------------------//
        LCD_WR_REG(0x11);
        delay_ms(120); //Delay 120ms
        //------------------------------display and color format setting--------------------------------//
        LCD_WR_REG(0x36);
        LCD_WR_DATA8(0x00);
        LCD_WR_REG(0x3a);
        LCD_WR_DATA8(0x05);
        //--------------------------------ST7789V Frame rate setting----------------------------------//
        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);
        //---------------------------------ST7789V Power setting--------------------------------------//
        LCD_WR_REG(0xbb);
        LCD_WR_DATA8(0x1c);
        LCD_WR_REG(0xc0);
        LCD_WR_DATA8(0x2c);
        LCD_WR_REG(0xc2);
        LCD_WR_DATA8(0x01);
        LCD_WR_REG(0xc3);
        LCD_WR_DATA8(0x0b);
        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);
        //--------------------------------ST7789V gamma setting---------------------------------------//
        LCD_WR_REG(0xe0);
        LCD_WR_DATA8(0xd0);
        LCD_WR_DATA8(0x00);
        LCD_WR_DATA8(0x03);
        LCD_WR_DATA8(0x09);
        LCD_WR_DATA8(0x13);
        LCD_WR_DATA8(0x1c);
        LCD_WR_DATA8(0x3a);
        LCD_WR_DATA8(0x55);
        LCD_WR_DATA8(0x48);
        LCD_WR_DATA8(0x18);
        LCD_WR_DATA8(0x12);
        LCD_WR_DATA8(0x0e);
        LCD_WR_DATA8(0x19);
        LCD_WR_DATA8(0x1e);
        LCD_WR_REG(0xe1);
        LCD_WR_DATA8(0xd0);
        LCD_WR_DATA8(0x00);
        LCD_WR_DATA8(0x03);
        LCD_WR_DATA8(0x09);
        LCD_WR_DATA8(0x05);
        LCD_WR_DATA8(0x25);
        LCD_WR_DATA8(0x3a);
        LCD_WR_DATA8(0x55);
        LCD_WR_DATA8(0x50);
        LCD_WR_DATA8(0x3d);
        LCD_WR_DATA8(0x1c);
        LCD_WR_DATA8(0x1d);
        LCD_WR_DATA8(0x1d);
        LCD_WR_DATA8(0x1e);
        LCD_WR_REG(0x21);
        LCD_WR_REG(0x11);
        delay_ms(120);
        LCD_Clear(BLACK);
        LCD_WR_REG(0x29);
               





SPI_InitTypeDef  SPI_InitStructure;

void SPI1_Init(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_SPI1,  ENABLE );//SPI1时钟使能
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);         //使能A端口时钟   //RES
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;         
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
        GPIO_Init(GPIOA, &GPIO_InitStructure);          //初始化GPIOD3,6
        //GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_4);       
       
//        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);         //使能A端口时钟   PA4 CS  PA6 DC
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_6;         
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
        GPIO_Init(GPIOA, &GPIO_InitStructure);          
//         GPIO_SetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_1|GPIO_Pin_8);       
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;  //sck sda
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
//        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;         
//         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
//        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
//         GPIO_Init(GPIOD, &GPIO_InitStructure);
        GPIO_SetBits(GPIOA ,GPIO_Pin_9|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);



//        GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_7);  //PB13/14/15上拉

        SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工  SPI_Direction_1Line_Tx
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                //设置SPI工作模式:设置为主SPI
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                //设置SPI的数据大小:SPI发送接收8位帧结构
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                //选择了串行时钟的稳态:时钟悬空高
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;        //数据捕获于第二个时钟沿
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
        SPI_InitStructure.SPI_BaudRatePrescaler =SPI_BaudRatePrescaler_8;                //定义波特率预分频的值:波特率预分频值为16
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;        //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
        SPI_InitStructure.SPI_CRCPolynomial = 7;        //CRC值计算的多项式
        SPI_Init(SPI1, &SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器

        SPI_Cmd(SPI1, ENABLE); //使能SPI外设
       
        SPI1_ReadWriteByte(0xff);//启动传输         


//        SPI1_SetSpeed(SPI_BaudRatePrescaler_256);//设置为18M时钟,高速模式



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-12-27
在线时间
0 小时
发表于 2020-6-1 15:39:29 | 显示全部楼层
帮顶!!!!!!!!!!!!!
回复

使用道具 举报

19

主题

113

帖子

0

精华

高级会员

Rank: 4

积分
988
金钱
988
注册时间
2013-4-21
在线时间
307 小时
发表于 2020-6-1 20:05:50 | 显示全部楼层
原子家有款开发板用的7789的芯片,在此基础上移植吧,不难的,以前我就是这么干的!
回复

使用道具 举报

10

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2019-9-15
在线时间
126 小时
 楼主| 发表于 2020-6-2 08:59:53 | 显示全部楼层
若水 发表于 2020-6-1 20:05
原子家有款开发板用的7789的芯片,在此基础上移植吧,不难的,以前我就是这么干的!

谢谢,我不知道他家用过这款屏,我找一找
回复

使用道具 举报

8

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2021-3-11
在线时间
30 小时
发表于 2023-4-18 17:33:23 | 显示全部楼层
你试试修改
1.屏幕的驱动
2.驱动部分复位时间 调整一下,1ms可能太短暂
驱动:





Void ST7789V CTC 28panelgamma(void)
{

//-----------------------------------ST7789V reset sequence------------------------------------//


LCD_RESET=1;
Delayms(1);                  //Delay 1ms
LCD_RESET=0;
Delayms(10);                  //Delay 10ms
LCD_RESET=1;
Delayms(120);                //Delay 120ms
//----------------------------------------------------------------------------------------------------//
LCD_CtrlWrite_ST7789V(0x11);
LCD_Delayms(120); //Delay 120ms
//------------------------------display and color format setting-------------
LCD_CtrlWrite_ST7789V(0x36);
LCD_DataWrite_ST7789V(0x00);
LCD_CtrlWrite_ST7789V(0x3a);
LCD_DataWrite_ST7789V(0x05);//0x55
//--------------------------------ST7789V Frame rate setting-----------------

LCD_CtrlWrite_ST7789V(0xb2);
LCD_DataWrite_ST7789V(0x0c);
LCD_DataWrite_ST7789V(0x0c);
LCD_DataWrite_ST7789V(0x00);
LCD_DataWrite_ST7789V(0x33);
LCD_DataWrite_ST7789V(0x33);
LCD_CtrlWrite_ST7789V(0xb7);
LCD_DataWrite_ST7789V(0x35);
//---------------------------------ST7789V Power setting---------------------

LCD_CtrlWrite_ST7789V(0xbb);
LCD_DataWrite_ST7789V(0x19);//0x28
LCD_CtrlWrite_ST7789V(0xc0);
LCD_DataWrite_ST7789V(0x2c);
LCD_CtrlWrite_ST7789V(0xc2);
LCD_DataWrite_ST7789V(0x01);
LCD_CtrlWrite_ST7789V(0xc3);
LCD_DataWrite_ST7789V(0x12);//0x10
LCD_CtrlWrite_ST7789V(0xc4);
LCD_DataWrite_ST7789V(0x20);
LCD_CtrlWrite_ST7789V(0xc6);
LCD_DataWrite_ST7789V(0x0f);
LCD_CtrlWrite_ST7789V(0xd0);
LCD_DataWrite_ST7789V(0xa4);
LCD_DataWrite_ST7789V(0xa1);
//--------------------------------ST7789V gamma setting----------------------

LCD_CtrlWrite_ST7789V(0xe0);
LCD_DataWrite_ST7789V(0xd0);
LCD_DataWrite_ST7789V(0x04);//0x00
LCD_DataWrite_ST7789V(0x0d);//0x02
LCD_DataWrite_ST7789V(0x11);//0x07
LCD_DataWrite_ST7789V(0x13);//0x0a
LCD_DataWrite_ST7789V(0x2b);//0x28
LCD_DataWrite_ST7789V(0x3f);//0x32
LCD_DataWrite_ST7789V(0x54);//0x44
LCD_DataWrite_ST7789V(0x4c);//0x42
LCD_DataWrite_ST7789V(0x18);//0x06
LCD_DataWrite_ST7789V(0x0d);//0x0e
LCD_DataWrite_ST7789V(0x0b);//0x12
LCD_DataWrite_ST7789V(0x1f);//0x14
LCD_DataWrite_ST7789V(0x23);//0x17
LCD_CtrlWrite_ST7789V(0xe1);
LCD_DataWrite_ST7789V(0xd0);//0xd0
LCD_DataWrite_ST7789V(0x04);//0x00
LCD_DataWrite_ST7789V(0x0c);//0x02
LCD_DataWrite_ST7789V(0x11);//0x07
LCD_DataWrite_ST7789V(0x13);//0x0a
LCD_DataWrite_ST7789V(0x2c);//0x28
LCD_DataWrite_ST7789V(0x3f);//0x31
LCD_DataWrite_ST7789V(0x44);//0x54
LCD_DataWrite_ST7789V(0x51);//0x47
LCD_DataWrite_ST7789V(0x2f);//0x0e
LCD_DataWrite_ST7789V(0x1f);//0x1c
LCD_DataWrite_ST7789V(0x1f);//0x17
LCD_DataWrite_ST7789V(0x20);//0x1b
LCD_DataWrite_ST7789V(0x23);//0x1e

LCD_CtrlWrite_ST7789V(0x29);

}






Void ST7789VPanelTurnOnDisplay (void)
{
Write command 0x29;
}

Void ST7789VPanelTurnOffDisplay (void)
{
Write command 0x28;
}

Void ST7789VPanelTurnOnPartial (void)
{
Write command 0x30;
Write data 0x00;
Write PSL;    //PSL: Start Line
Write data 0x00;
Write PEL;    //PEL: End Line
Write command 0x12;
}

Void ST7789VPanelTurnOffPartial (void)
{
Write command 0x13;
}

Void ST7789VPanelTurnOnIdle (void)
{
Write command 0x39;
}

Void ST7789VPanelTurnOffIdle (void)
{
Write command 0x38;
}
  
Void ST7789VPanelSleepInMode (void)
{
Write command 0x10;

Delayms (120);
}

Void ST7789VPanelSleepOutMode (void)
{
Write command 0x11;
Delayms (120);
}



















                    
勤学如春起之苗,不见其增,日有所长
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2020-10-20
在线时间
2 小时
发表于 2023-6-27 11:45:04 | 显示全部楼层
大家使用st7789v的时候有没有出现SPI+DMA传输时,全屏刷新不同的单色,有时候会有割裂感(就是刷到一半顿了一下),有时候挺丝滑的,而且这个现象随着SPI频率的提高出现的概率变小;割裂感这个现象在用上gui及动画时会比较恶心

下面是SPI频率30MHz和60MHz时的慢动作视频对比,能看到60MHz时有时候好的,有时候割裂的,而30MHz时几乎都是割裂的

刷屏对比.rar

4.63 MB, 下载次数: 15

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 06:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表