平头哥CDK W806-KIT单片机技术交流组
直播中

qjp1988113

12年用户 343经验值
擅长:测量仪表 嵌入式技术 处理器/DSP 控制/MCU EDA/IC设计
私信 关注
[经验]

【联盛德W806-KIT开发板试用体验】+硬件SPI驱动ST7780_240X240_LCD

今天我们在昨天的基础上测试下硬件SPI驱动LCD~
由于昨天的连下,我们考虑到硬件SPI,连线就连得LSPI对于的引脚~
今天直接用就行了~
/****************************************
*             SPI-TFT LCD For W806 BOARD(LSPI)
*              GND -------------- GND
*              VCC --------------  3.3V
*              SCL --------------   PB1
*              SDA --------------  PA7
*              RES --------------   PB27
*              DC  --------------   PB3
*              BLC --------------   PB2
* ***************************************/
我们开始配置SPI相关:
  1. SPI_HandleTypeDef hspi;

  2. static void LSPI_Init(void)
  3. {
  4.         hspi.Instance = SPI;
  5.         hspi.Init.Mode = SPI_MODE_MASTER;            //设置为SPI主机模式
  6.         hspi.Init.CLKPolarity = SPI_POLARITY_HIGH;   //设置为CLK空闲时高电平  
  7.         hspi.Init.CLKPhase = SPI_PHASE_2EDGE;        //设置为第二个时钟沿捕获
  8.         hspi.Init.NSS = SPI_NSS_SOFT;                //设置为软件CS  实际上CS压根就没用到
  9.         //hspi.Init.NSS =SPI_NSS_HARD;
  10.         hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;    //设置SPI分频速率,最快2分频 20M,详见wm_spi.h
  11.         hspi.Init.FirstByte = SPI_LITTLEENDIAN;
  12.        
  13.         if (HAL_SPI_Init(&hspi) != HAL_OK)
  14.         {
  15.                 Error_Handler();
  16.         }
  17. }

  18. static void Lspi_WriteOneData(u8 data)
  19. {
  20.         HAL_SPI_Transmit(&hspi, &data, 1, 100);
  21. }

  22. static void Lspi_WriteMoreData(u8* data,u32 len)
  23. {
  24.         HAL_SPI_Transmit(&hspi, data, len, 1000);
  25. }
然后我们把SPI的引脚复用一下并把SPI初始化函数放到之前的LCD初始化里面:
  1. void LCD_GPIO_Init(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStruct = {0};
  4.        
  5.         __HAL_RCC_GPIO_CLK_ENABLE();

  6.         GPIO_InitStruct.Pin =/* GPIO_PIN_1 |*/ GPIO_PIN_2 | GPIO_PIN_3|GPIO_PIN_27;
  7.         GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT;
  8.         //GPIO_InitStruct.Pull = GPIO_NOPULL;
  9.         GPIO_InitStruct.Pull = GPIO_PULLUP;
  10.         HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  11.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3|GPIO_PIN_27, GPIO_PIN_SET);
  12.         /*
  13.         GPIO_InitStruct.Pin = GPIO_PIN_7;
  14.         HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  15.         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET);*/
  16.         //LSPI初始化
  17.         __HAL_RCC_SPI_CLK_ENABLE();
  18.         __HAL_AFIO_REMAP_SPI_CS(GPIOB, GPIO_PIN_4);
  19.         __HAL_AFIO_REMAP_SPI_CLK(GPIOB, GPIO_PIN_1);
  20.         __HAL_AFIO_REMAP_SPI_MOSI(GPIOA, GPIO_PIN_7);
  21.         LSPI_Init();
  22. }
把LCD最基本的读写,由原来的模拟,改成SPI读写:
  1. /******************************************************************************
  2.       函数说明:LCD串行数据写入函数
  3.       入口数据:dat  要写入的串行数据
  4.       返回值:  无
  5. ******************************************************************************/
  6. void LCD_Writ_Bus(u8 dat)
  7. {       
  8.         Lspi_WriteOneData(dat);
  9. }
  10. /******************************************************************************
  11.       函数说明:LCD串行多个数据写入函数
  12.       入口数据:dat  要写入的串行数据
  13.       返回值:  无
  14. ******************************************************************************/
  15. void LCD_Writ_BusMore(u8* data,u32 len)
  16. {
  17.         Lspi_WriteMoreData(data,len);
  18. }

  19. /******************************************************************************
  20.       函数说明:LCD写入数据
  21.       入口数据:dat 写入的数据
  22.       返回值:  无
  23. ******************************************************************************/
  24. void LCD_WR_DATA8(u8 dat)
  25. {
  26.         LCD_CS_LOW();               
  27.         LCD_Writ_Bus(dat);
  28.         LCD_CS_HIGH()        ;
  29. }


  30. /******************************************************************************
  31.       函数说明:LCD写入数据
  32.       入口数据:dat 写入的数据
  33.       返回值:  无
  34. ******************************************************************************/
  35. void LCD_WR_DATA(u16 dat)
  36. {
  37.         u8 temp[2];
  38.        
  39.         temp[0] = dat >> 8;
  40.         temp[1] = dat;
  41.        
  42.         LCD_CS_LOW();               
  43.         LCD_Writ_BusMore(temp, 2);
  44.         LCD_CS_HIGH();               
  45. }


  46. /******************************************************************************
  47.       函数说明:LCD写入命令
  48.       入口数据:dat 写入的命令
  49.       返回值:  无
  50. ******************************************************************************/
  51. void LCD_WR_REG(u8 dat)
  52. {
  53.         LCD_DC_Clr();//写命令
  54.         LCD_CS_LOW();       
  55.         LCD_Writ_Bus(dat);
  56.         LCD_CS_HIGH();       
  57.         LCD_DC_Set();//写数据
  58. }
其他的不做变化,我们编译下载后,查看,速度确实比 模拟SPI快了许多~
11.gif

回帖(1)

jinyi7016

2021-11-25 17:56:04
感觉刷新率还是不太高啊
举报

更多回帖

发帖
×
20
完善资料,
赚取积分