[STM32L4+] 【STEVAL-STWINKT1B测评】6、驱动LCD屏

[复制链接]
 楼主| xinmeng_wit 发表于 2024-9-16 15:35 | 显示全部楼层 |阅读模式
<
ev, TE, ST, LCD, CD, win
一、介绍
STEVAL-STWINKT1B开发板虽然没有板载的显示屏,但是预留了40Pin的扩展接口,和一个STMod+的接口,可以很方便地连接一些扩展模块。 1.png


本次我们通过40PIN的连接器连接我们的一块LCD屏,通过LCD屏显示之前用到的传感器采集到的信息,本次只做简单的显示功能,并不包含GUI的移植。
GUI又是另外一个大的topic了,不在本次的测评范围内。

二、硬件连接
LCD屏选的是DFROBOT的一款2寸的IPS屏。详细介绍如下:

2.0寸LCD显示模块采用ST7789V驱动芯片,具有320x240个彩色像素点(RGB565)。这是一款IPS显示模块,拥有优秀的可视角度(80/80/80/80);采用SPI(4线)通信方式;支持GDI接口(GDI接口必须和带GDI接口主控配合使用),即插即用。模块具有分辨率高、可视角度广、接线简单等优点,可用于许多显示应用:波形显示器、电子纪念盒、桌面天气摆件等。

2.0寸LCD显示模块支持3.3V和5V,并兼容多个主控:UNO、Leonardo、ESP32、ESP8266、FireBeetle M0等。与M0配合使用GDI接口,即插即用,有效减少接线步骤。模块板载了MicroSD Card卡槽,用户可以显示更多的图片。

2.png



引脚说明:

标号
名称
功能描述

1VCC电源正极
2GND电源负极
3SCLK时钟
4MOSI数据(主机发送从机接收)
5MISO数据(主机接收从机发送
6CS屏幕片选
7RES复位
8DC数据/命令
9BL背光。背光设定了默认值,用户不用连接背光引脚也可点亮;此外,连接背光引脚,输入高电平(1)是将背光亮度调到最大,输入低电平(0)是关闭背光
10SDCSSD卡片选
LCD屏与开发板的引脚连接:
序号 LCD引脚 MCU引脚 备注
1 VCC
3.3v 连接器第40脚(SYS)
2 GND GND 连接器第5脚(GND)
3 SCLK PB13 连接器第1脚(SPI2 SCLK)
4 MOSI PB15 连接器第8脚(SPI2 MOSI)
5 MISO PC2 连接器第9脚(SPI2 MISO)
6 CS PG12连接器第17脚(GPIO)
7 RES PG9 连接器第19脚(GPIO)
8 DC PG10 连接器第18脚(GPIO)
9 BL - 悬空
10 SDCS - 悬空


因为开发板是FPC接口,但是LCD显示屏是2.54插针的接口,无法直接通过杜邦线连接,所以用了一个FPC转2.54的一个转接板,整体接线如下:
561778945.jpg

三、程序
因为该LCD是SPI接口的,所以我们需要对开发板的spi进行配置,SPI选的是SPI2,详细的配置如下:
3.png

LCD驱动程序如下:
  1. /* USER CODE BEGIN Header */
  2. /**
  3.   ******************************************************************************
  4.   * File Name          : lcd.c
  5.   * Description        : Code for lcd application
  6.   ******************************************************************************
  7.   * @attention
  8.   *
  9.   * Copyright (c) 2023 STMicroelectronics.
  10.   * All rights reserved.
  11.   *
  12.   * This software is licensed under terms that can be found in the LICENSE file
  13.   * in the root directory of this software component.
  14.   * If no LICENSE file comes with this software, it is provided AS-IS.
  15.   *
  16.   ******************************************************************************
  17.   */
  18. /* USER CODE END Header */

  19. /* Includes ------------------------------------------------------------------*/
  20. #include "main.h"
  21. #include <string.h>
  22. #include "lcd.h"
  23. #include "spi.h"
  24. #include "FONT.H"
  25. /* Private includes ----------------------------------------------------------*/

  26. /* Private typedef -----------------------------------------------------------*/

  27. /* Private define ------------------------------------------------------------*/

  28. /* Private macro -------------------------------------------------------------*/

  29. /* Private variables ---------------------------------------------------------*/
  30. HAL_StatusTypeDef spi_status = HAL_OK;
  31. /* Private function prototypes -----------------------------------------------*/

  32. /* Private application code --------------------------------------------------*/

  33. /******************************************************************************
  34.       函数说明:LCD串行数据写入函数
  35.       入口数据:dat  要写入的串行数据
  36.       返回值:  无
  37. ******************************************************************************/
  38. void LCD_Writ_Bus(uint8_t data)
  39. {       
  40. //        uint8_t i;
  41.         LCD_CS_L;
  42.         spi_status = HAL_SPI_Transmit(&hspi2,&data,1,0xff);
  43.           //spi_status = HAL_SPI_Transmit_DMA(&hspi1,&data,1);
  44.           LCD_CS_H;       
  45. }


  46. /******************************************************************************
  47.       函数说明:LCD写入数据
  48.       入口数据:dat 写入的数据
  49.       返回值:  无
  50. ******************************************************************************/
  51. void LCD_WR_DATA8(uint8_t dat)
  52. {
  53.         LCD_Writ_Bus(dat);
  54. }


  55. /******************************************************************************
  56.       函数说明:LCD写入数据
  57.       入口数据:dat 写入的数据
  58.       返回值:  无
  59. ******************************************************************************/
  60. void LCD_WR_DATA16(uint16_t dat)
  61. {
  62.         LCD_Writ_Bus(dat>>8);
  63.         LCD_Writ_Bus(dat);
  64. }


  65. /******************************************************************************
  66.       函数说明:LCD写入命令
  67.       入口数据:dat 写入的命令
  68.       返回值:  无
  69. ******************************************************************************/
  70. void LCD_WR_CMD(uint8_t dat)
  71. {
  72.         LCD_DC_L;//写命令
  73.         LCD_Writ_Bus(dat);
  74.         LCD_DC_H;//写数据
  75. }


  76. /******************************************************************************
  77.       函数说明:设置起始和结束地址
  78.       入口数据:x1,x2 设置列的起始和结束地址
  79.                 y1,y2 设置行的起始和结束地址
  80.       返回值:  无
  81. ******************************************************************************/
  82. void LCD_Address_Set(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
  83. {
  84. if(USE_HORIZONTAL==0)
  85.         {
  86.                 LCD_WR_CMD(0x2a);//列地址设置
  87.                 LCD_WR_DATA16(x1);
  88.                 LCD_WR_DATA16(x2);
  89.                 LCD_WR_CMD(0x2b);//行地址设置
  90.                 LCD_WR_DATA16(y1);
  91.                 LCD_WR_DATA16(y2);
  92.                 LCD_WR_CMD(0x2c);//储存器写
  93.         }
  94.         else if(USE_HORIZONTAL==1)
  95.         {
  96.                 LCD_WR_CMD(0x2a);//列地址设置
  97.                 LCD_WR_DATA16(x1);
  98.                 LCD_WR_DATA16(x2);
  99.                 LCD_WR_CMD(0x2b);//行地址设置
  100.                 LCD_WR_DATA16(y1+80);
  101.                 LCD_WR_DATA16(y2+80);
  102.                 LCD_WR_CMD(0x2c);//储存器写
  103.         }
  104.         else if(USE_HORIZONTAL==2)
  105.         {
  106.                 LCD_WR_CMD(0x2a);//列地址设置
  107.                 LCD_WR_DATA16(x1);
  108.                 LCD_WR_DATA16(x2);
  109.                 LCD_WR_CMD(0x2b);//行地址设置
  110.                 LCD_WR_DATA16(y1);
  111.                 LCD_WR_DATA16(y2);
  112.                 LCD_WR_CMD(0x2c);//储存器写
  113.         }
  114.         else
  115.         {
  116.                 LCD_WR_CMD(0x2a);//列地址设置
  117.                 LCD_WR_DATA16(x1+80);
  118.                 LCD_WR_DATA16(x2+80);
  119.                 LCD_WR_CMD(0x2b);//行地址设置
  120.                 LCD_WR_DATA16(y1);
  121.                 LCD_WR_DATA16(y2);
  122.                 LCD_WR_CMD(0x2c);//储存器写
  123.         }
  124. }


  125. /******************************************************************************
  126.       函数说明:液晶初始化
  127.       入口数据:无
  128.       返回值:  无
  129. ******************************************************************************/

  130. void LCD_Init(void)
  131. {
  132. //        LCD_GPIO_Init();//初始化GPIO
  133.        
  134.         LCD_RES_L;//复位
  135.         osDelay(100);
  136.         LCD_RES_H;
  137.         osDelay(100);
  138.        
  139.         LCD_WR_CMD(0x11);                                             //无此指令,不能正常初始化芯片,无显示
  140.         osDelay(120);
  141.         LCD_WR_CMD(0x36);                                             //设置内存扫描方向,0X00正常扫描,从上往下,从左往右,RGB方式
  142.         if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x00);
  143.         else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC0);
  144.         else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x70);
  145.         else LCD_WR_DATA8(0xA0);

  146.         LCD_WR_CMD(0x3A);                                             //数据格式,65K色,565
  147.         LCD_WR_DATA8(0x05);

  148.         LCD_WR_CMD(0xB2);                                             //帧频设置
  149.         LCD_WR_DATA8(0x0C);
  150.         LCD_WR_DATA8(0x0C);
  151.         LCD_WR_DATA8(0x00);
  152.         LCD_WR_DATA8(0x33);
  153.         LCD_WR_DATA8(0x33);

  154.   LCD_WR_CMD(0xC6);                                               //正常模式下的帧速率控制
  155. //  LCD_WR_DATA8(0x01);                                            //正常模式下:屏幕刷新率 111Hz
  156.   LCD_WR_DATA8(0x1F);                                            //正常模式下:屏幕刷新率 39Hz
  157.   
  158.         LCD_WR_CMD(0xB7);                                             //GATE 设置
  159.         LCD_WR_DATA8(0x35);  

  160.         LCD_WR_CMD(0xBB);                                             //VCOM设置
  161.         LCD_WR_DATA8(0x19);

  162.         LCD_WR_CMD(0xC0);                                             //LCM设置,默认0x2c
  163.         LCD_WR_DATA8(0x2C);

  164.         LCD_WR_CMD(0xC2);                                             //VDV&VRH SET ,默认0x01
  165.         LCD_WR_DATA8(0x01);

  166.         LCD_WR_CMD(0xC3);                                             //VRHS SET,默认0x0b
  167.         LCD_WR_DATA8(0x12);                                           //此处根据实际情况修正

  168.         LCD_WR_CMD(0xC4);                                             //VDV SET,默认0x20
  169.         LCD_WR_DATA8(0x20);  

  170.         LCD_WR_CMD(0xC6);                                             // FR SET, 默认0x0F
  171.         LCD_WR_DATA8(0x0F);   

  172.         LCD_WR_CMD(0xD0);                                             //电源控制1
  173.         LCD_WR_DATA8(0xA4);                                           //该参数不变  
  174.         LCD_WR_DATA8(0xA1);                                           //此处根据实际情况修改

  175.         LCD_WR_CMD(0xE0);                                             //正极性GAMMA调整
  176.         LCD_WR_DATA8(0xD0);
  177.         LCD_WR_DATA8(0x04);
  178.         LCD_WR_DATA8(0x0D);
  179.         LCD_WR_DATA8(0x11);
  180.         LCD_WR_DATA8(0x13);
  181.         LCD_WR_DATA8(0x2B);
  182.         LCD_WR_DATA8(0x3F);
  183.         LCD_WR_DATA8(0x54);
  184.         LCD_WR_DATA8(0x4C);
  185.         LCD_WR_DATA8(0x18);
  186.         LCD_WR_DATA8(0x0D);
  187.         LCD_WR_DATA8(0x0B);
  188.         LCD_WR_DATA8(0x1F);
  189.         LCD_WR_DATA8(0x23);

  190.         LCD_WR_CMD(0xE1);                                              //负极性GAMMA调整
  191.         LCD_WR_DATA8(0xD0);
  192.         LCD_WR_DATA8(0x04);
  193.         LCD_WR_DATA8(0x0C);
  194.         LCD_WR_DATA8(0x11);
  195.         LCD_WR_DATA8(0x13);
  196.         LCD_WR_DATA8(0x2C);
  197.         LCD_WR_DATA8(0x3F);
  198.         LCD_WR_DATA8(0x44);
  199.         LCD_WR_DATA8(0x51);
  200.         LCD_WR_DATA8(0x2F);
  201.         LCD_WR_DATA8(0x1F);
  202.         LCD_WR_DATA8(0x1F);
  203.         LCD_WR_DATA8(0x20);
  204.         LCD_WR_DATA8(0x23);

  205.         LCD_WR_CMD(0x21);                                             //反显开,默认是0X20,正常模式
  206.   
  207.         LCD_WR_CMD(0x29);                                             //显示开,等待MCU数传送
  208. }


  209. /******************************************************************************
  210.       函数说明:LCD清屏函数
  211.       入口数据:无
  212.       返回值:  无
  213. ******************************************************************************/
  214. void LCD_Clear(uint16_t Color)
  215. {
  216.         uint16_t i,j;         
  217.         LCD_Address_Set(0,0,LCD_WIDTH-1,LCD_HEIGHT-1);
  218.     for(i=0;i<LCD_WIDTH;i++)
  219.          {
  220.           for (j=0;j<LCD_HEIGHT;j++)
  221.                    {
  222.                 LCD_WR_DATA16(Color);                                  
  223.             }

  224.           }
  225. }


  226. /******************************************************************************
  227.       函数说明:在指定区域填充颜色
  228.       入口数据:xsta,ysta   起始坐标
  229.                 xend,yend   终止坐标
  230.                                                                 color       要填充的颜色
  231.       返回值:  无
  232. ******************************************************************************/
  233. void LCD_Fill(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color)
  234. {         
  235.         uint16_t i,j;
  236.         LCD_Address_Set(xsta,ysta,xend-1,yend-1);//设置显示范围
  237.         for(i=ysta;i<yend;i++)
  238.         {                                                                                                                           
  239.                 for(j=xsta;j<xend;j++)
  240.                 {
  241.                         LCD_WR_DATA16(color);
  242.                 }
  243.         }                                                       
  244. }

  245. /******************************************************************************
  246.       函数说明:在指定位置画点
  247.       入口数据:x,y 画点坐标
  248.                 color 点的颜色
  249.       返回值:  无
  250. ******************************************************************************/
  251. void LCD_DrawPoint(uint16_t x,uint16_t y,uint16_t color)
  252. {
  253.         LCD_Address_Set(x,y,x,y);//设置光标位置
  254.         LCD_WR_DATA16(color);
  255. }


  256. /******************************************************************************
  257.       函数说明:画线
  258.       入口数据:x1,y1   起始坐标
  259.                 x2,y2   终止坐标
  260.                 color   线的颜色
  261.       返回值:  无
  262. ******************************************************************************/
  263. void LCD_DrawLine(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2,uint16_t color)
  264. {
  265.         uint16_t t;
  266.         int xerr=0,yerr=0,delta_x,delta_y,distance;
  267.         int incx,incy,uRow,uCol;
  268.         delta_x=x2-x1; //计算坐标增量
  269.         delta_y=y2-y1;
  270.         uRow=x1;//画线起点坐标
  271.         uCol=y1;
  272.         if(delta_x>0)incx=1; //设置单步方向
  273.         else if (delta_x==0)incx=0;//垂直线
  274.         else {incx=-1;delta_x=-delta_x;}
  275.         if(delta_y>0)incy=1;
  276.         else if (delta_y==0)incy=0;//水平线
  277.         else {incy=-1;delta_y=-delta_y;}
  278.         if(delta_x>delta_y)distance=delta_x; //选取基本增量坐标轴
  279.         else distance=delta_y;
  280.         for(t=0;t<distance+1;t++)
  281.         {
  282.                 LCD_DrawPoint(uRow,uCol,color);//画点
  283.                 xerr+=delta_x;
  284.                 yerr+=delta_y;
  285.                 if(xerr>distance)
  286.                 {
  287.                         xerr-=distance;
  288.                         uRow+=incx;
  289.                 }
  290.                 if(yerr>distance)
  291.                 {
  292.                         yerr-=distance;
  293.                         uCol+=incy;
  294.                 }
  295.         }
  296. }


  297. /******************************************************************************
  298.       函数说明:画矩形
  299.       入口数据:x1,y1   起始坐标
  300.                 x2,y2   终止坐标
  301.                 color   矩形的颜色
  302.       返回值:  无
  303. ******************************************************************************/
  304. void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2,uint16_t color)
  305. {
  306.         LCD_DrawLine(x1,y1,x2,y1,color);
  307.         LCD_DrawLine(x1,y1,x1,y2,color);
  308.         LCD_DrawLine(x1,y2,x2,y2,color);
  309.         LCD_DrawLine(x2,y1,x2,y2,color);
  310. }


  311. /******************************************************************************
  312.       函数说明:画圆
  313.       入口数据:x0,y0   圆心坐标
  314.                 r       半径
  315.                 color   圆的颜色
  316.       返回值:  无
  317. ******************************************************************************/
  318. void Draw_Circle(uint16_t x0,uint16_t y0,uint8_t r,uint16_t color)
  319. {
  320.         int a,b;
  321.         a=0;b=r;          
  322.         while(a<=b)
  323.         {
  324.                 LCD_DrawPoint(x0-b,y0-a,color);             //3           
  325.                 LCD_DrawPoint(x0+b,y0-a,color);             //0           
  326.                 LCD_DrawPoint(x0-a,y0+b,color);             //1               
  327.                 LCD_DrawPoint(x0-a,y0-b,color);             //2            
  328.                 LCD_DrawPoint(x0+b,y0+a,color);             //4               
  329.                 LCD_DrawPoint(x0+a,y0-b,color);             //5
  330.                 LCD_DrawPoint(x0+a,y0+b,color);             //6
  331.                 LCD_DrawPoint(x0-b,y0+a,color);             //7
  332.                 a++;
  333.                 if((a*a+b*b)>(r*r))//判断要画的点是否过远
  334.                 {
  335.                         b--;
  336.                 }
  337.         }
  338. }

  339. /******************************************************************************
  340.       函数说明:显示单个字符
  341.       入口数据:x,y显示坐标
  342.                 num 要显示的字符
  343.                 fc 字的颜色
  344.                 bc 字的背景色
  345.                 sizey 字号
  346.                 mode:  0非叠加模式  1叠加模式
  347.       返回值:  无
  348. ******************************************************************************/
  349. void LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint16_t fc,uint16_t bc,uint8_t sizey,uint8_t mode)
  350. {
  351.         uint8_t temp,sizex,t,m=0;
  352.         uint16_t i,TypefaceNum;//一个字符所占字节大小
  353.         uint16_t x0=x;
  354.         sizex=sizey/2;
  355.         TypefaceNum=(sizex/8+((sizex%8)?1:0))*sizey;
  356.         num=num-' ';    //得到偏移后的值
  357.         LCD_Address_Set(x,y,x+sizex-1,y+sizey-1);  //设置光标位置
  358.         for(i=0;i<TypefaceNum;i++)
  359.         {
  360.                 if(sizey==12)temp=asc2_1206[num][i];                       //调用6x12字体
  361.                 else if(sizey==16)temp=asc2_1608[num][i];                 //调用8x16字体
  362.                 // else if(sizey==24)temp=asc2_2412[num][i];                 //调用12x24字体
  363.                 // else if(sizey==32)temp=asc2_1206[num][i];                 //调用16x32字体
  364.                 else return;
  365.                 for(t=0;t<8;t++)
  366.                 {
  367.                         if(!mode)//非叠加模式
  368.                         {
  369.                                 if(temp&(0x01<<t))LCD_WR_DATA16(fc);
  370.                                 else LCD_WR_DATA16(bc);
  371.                                 m++;
  372.                                 if(m%sizex==0)
  373.                                 {
  374.                                         m=0;
  375.                                         break;
  376.                                 }
  377.                         }
  378.                         else//叠加模式
  379.                         {
  380.                                 if(temp&(0x01<<t))LCD_DrawPoint(x,y,fc);//画一个点
  381.                                 x++;
  382.                                 if((x-x0)==sizex)
  383.                                 {
  384.                                         x=x0;
  385.                                         y++;
  386.                                         break;
  387.                                 }
  388.                         }
  389.                 }
  390.         }                      
  391. }

  392. /******************************************************************************
  393.       函数说明:显示字符串
  394.       入口数据:x,y显示坐标
  395.                 *p 要显示的字符串
  396.                 fc 字的颜色
  397.                 bc 字的背景色
  398.                 sizey 字号
  399.                 mode:  0非叠加模式  1叠加模式
  400.       返回值:  无
  401. ******************************************************************************/
  402. void LCD_ShowString(uint16_t x,uint16_t y,const char *p,uint16_t fc,uint16_t bc,uint8_t sizey,uint8_t mode)
  403. {         
  404.         while(*p!='\0')
  405.         {      
  406.                 LCD_ShowChar(x,y,*p,fc,bc,sizey,mode);
  407.                 x+=sizey/2;
  408.                 p++;
  409.         }  
  410. }
然后在主函数中调用显示函数去更新屏幕显示:
  1. #include "lcd.h"
  2. #include "stts751.h"
  3. #include "lps22hh.h"
  4. #include "hts221.h"
  5. #include <stdio.h>

  6. #define DISPLAY_X_POS       (0U)
  7. #define DISPLAY_Y_POS       (80U)
  8. #define DISPLAY_X_STEP      (0U)
  9. #define DISPLAY_Y_STEP      (20U)
  10. #define DISPLAY_Y_BAIS      (20U)

  11. void display_data( void )
  12. {
  13.     uint8_t str_buffer[100];
  14.     //  获取stts751的数据
  15.     float temp = stts751_get_temperature();
  16.     sprintf((char *)str_buffer, "STTS751 Temp:%3.2f C", temp);
  17.     LCD_ShowString(DISPLAY_X_POS, DISPLAY_Y_POS, (char *)str_buffer, BLUE, YELLOW, 16, 0);

  18.     //  获取lps22hh的数据
  19.     temp = lps22hh_get_temperature();
  20.     sprintf((char *)str_buffer, "LPS22HH Temp:%3.2f C", temp);
  21.     LCD_ShowString(DISPLAY_X_POS + DISPLAY_X_STEP, DISPLAY_Y_POS + DISPLAY_Y_STEP + DISPLAY_Y_BAIS, (char *)str_buffer, BLUE, YELLOW, 16, 0);
  22.     temp = lps22hh_get_pressure();
  23.     sprintf((char *)str_buffer, "LPS22HH Press:%3.2f hPa", temp);
  24.     LCD_ShowString(DISPLAY_X_POS + DISPLAY_X_STEP * 2 , DISPLAY_Y_POS + DISPLAY_Y_STEP * 2 + DISPLAY_Y_BAIS, (char *)str_buffer, BLUE, YELLOW, 16, 0);

  25.     //  获取hts221的数据
  26.     temp = hts221_get_humidity();
  27.     sprintf((char *)str_buffer, "HTS221 Humi:%3.2f %%", temp);
  28.     LCD_ShowString(DISPLAY_X_POS + DISPLAY_X_STEP *3 , DISPLAY_Y_POS + DISPLAY_Y_STEP * 3 + DISPLAY_Y_BAIS * 2, (char *)str_buffer, BLUE, YELLOW, 16, 0);
  29.     temp = hts221_get_temperature();
  30.     sprintf((char *)str_buffer, "HTS221 Temp:%3.2f C", temp);
  31.     LCD_ShowString(DISPLAY_X_POS + DISPLAY_X_STEP * 4 , DISPLAY_Y_POS + DISPLAY_Y_STEP * 4 + DISPLAY_Y_BAIS * 2, (char *)str_buffer, BLUE, YELLOW, 16, 0);         
  32. }


四、显示效果
VID_20240916_152813 -middle-original.gif



 楼主| xinmeng_wit 发表于 2024-9-16 19:23 | 显示全部楼层
手机像素不高,转换成gif后更模糊了
瞎折腾 发表于 2024-9-17 15:13 | 显示全部楼层
我用spi驱动屏幕,屏幕的初始化的时候屏幕反应很慢,刷白的时候都能看到过程,咋办呢?
 楼主| xinmeng_wit 发表于 2024-9-17 19:21 | 显示全部楼层
瞎折腾 发表于 2024-9-17 15:13
我用spi驱动屏幕,屏幕的初始化的时候屏幕反应很慢,刷白的时候都能看到过程,咋办呢? ...

1、使用硬件spi
2、提高spi的时钟频率

评论

是用的硬件spi,最高频率了,不过就是没用dma,f103的片子  发表于 2024-9-18 10:56
铁血丹心LLLL 发表于 2024-9-22 17:33 来自手机 | 显示全部楼层
是预留了40Pin的扩展接口,和一个STMod+的接口
wangtaohui 发表于 2024-9-23 17:38 来自手机 | 显示全部楼层
一个STMod+的接口
电子烂人 发表于 2024-10-3 16:18 | 显示全部楼层
这显示效果牛啊,另外请教下有没有研究过cubemx里的ltdc?这个40pin好像支持更大的屏幕
houjiakai 发表于 2024-10-11 21:54 | 显示全部楼层
STEVAL-STWINKT1B开发板的设计确实考虑到了扩展性,通过40Pin的扩展接口和STMod+接口,用户可以方便地连接各种扩展模块,这为开发者提供了很大的灵活性。
yorkbarney 发表于 2024-10-12 08:17 | 显示全部楼层
计划使用SPI接口来驱动LCD屏?
Stahan 发表于 2024-10-13 20:00 | 显示全部楼层
这个显示效果怎么样
wwppd 发表于 2024-10-14 11:34 | 显示全部楼层
LCD屏采用的是ST7789V驱动芯片。
primojones 发表于 2024-10-14 18:11 | 显示全部楼层
在使用GDI接口时,需要注意哪些事项,以确保其与STM32的兼容性和稳定性?
averyleigh 发表于 2024-10-16 13:27 | 显示全部楼层
ESP32或ESP8266,是否也能通过简单的接线实现与LCD屏的通信?
uiint 发表于 2024-10-16 20:05 | 显示全部楼层
LCD屏的高分辨率和广视角使其适用于多种显示应用,如波形显示器、电子纪念盒等。这些特性为开发者提供了丰富的创意空间,以实现各种复杂的图形和数据可视化。
 楼主| xinmeng_wit 发表于 2024-10-16 20:51 | 显示全部楼层
averyleigh 发表于 2024-10-16 13:27
ESP32或ESP8266,是否也能通过简单的接线实现与LCD屏的通信?

可以的呀
 楼主| xinmeng_wit 发表于 2024-10-16 20:51 | 显示全部楼层
Stahan 发表于 2024-10-13 20:00
这个显示效果怎么样

非常不错,显示很细腻
 楼主| xinmeng_wit 发表于 2024-10-16 20:54 | 显示全部楼层
电子烂人 发表于 2024-10-3 16:18
这显示效果牛啊,另外请教下有没有研究过cubemx里的ltdc?这个40pin好像支持更大的屏幕 ...

没研究过,手头没有大屏
youtome 发表于 2024-10-18 11:21 | 显示全部楼层
在使用GDI接口时,是否需要在开发板上进行额外的硬件设置或软件配置?GDI接口的优势在哪里?
1988020566 发表于 2024-10-19 09:48 | 显示全部楼层
是否有办法通过软件调整来优化显示效果?
deliahouse887 发表于 2024-10-20 12:20 | 显示全部楼层
如何配置STM32的SPI接口以匹配ST7789V驱动芯片的要求?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

276

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部