TFT屏幕使用(CUBEMX+SPI)

目  录

1.SPI

2.SPI+DMA


1.SPI

        使用SPI通信协议的器件有很多,这里以TFT屏驱动为ST7735为例。

        设置SPI,因为我使用的是STM32F107ZGT的板子所以我的SPI 速度能达到 42M,还需要设置其它的控制引脚。         

TFT屏幕使用(CUBEMX+SPI)_第1张图片

         引脚设置如下所示。

TFT屏幕使用(CUBEMX+SPI)_第2张图片

/*GPIO的宏定义*/
#define LCD_RES_Clr()  HAL_GPIO_WritePin(RES_GPIO_Port,RES_Pin,GPIO_PIN_RESET)//RES
#define LCD_RES_Set()  HAL_GPIO_WritePin(RES_GPIO_Port,RES_Pin,GPIO_PIN_SET)
                                 
#define LCD_DC_Clr()   HAL_GPIO_WritePin(DC_GPIO_Port,DC_Pin,GPIO_PIN_RESET)//DC
#define LCD_DC_Set()   HAL_GPIO_WritePin(DC_GPIO_Port,DC_Pin,GPIO_PIN_SET)
           
#define LCD_CS_Clr()   HAL_GPIO_WritePin(CS_GPIO_Port,CS_Pin,GPIO_PIN_RESET)//CS
#define LCD_CS_Set()   HAL_GPIO_WritePin(CS_GPIO_Port,CS_Pin,GPIO_PIN_SET)

#define LCD_BLK_Clr()  HAL_GPIO_WritePin(BLK_GPIO_Port,BLK_Pin,GPIO_PIN_RESET)//BLK
#define LCD_BLK_Set()  HAL_GPIO_WritePin(BLK_GPIO_Port,BLK_Pin,GPIO_PIN_SET)

        在购买时我们都可以在淘宝商家处获得一份资料,但是商家提供的资料不一定是用HAL库的,我们需要做的只是修改底层的SPI函数就行,上层的函数都是基于这个基础之上实现的,也就是将模拟SPI移植到HAL库。

void LCD_Writ_Bus(uint8_t dat) 
{
    LCD_CS_Clr();
    HAL_SPI_Transmit(&hspi1, &dat, 1,10);
    LCD_CS_Set);
}
void LCD_WR_DATA8(uint8_t dat)
{
   LCD_DC_Set();//写数据
   LCD_Writ_Bus(dat);
}
void LCD_WR_DATA(uint16_t dat)
{
   LCD_DC_Set();//写数据
   LCD_Writ_Bus(dat>>8);
   LCD_Writ_Bus(dat);
}
void LCD_WR_REG(uint8_t dat)
{
   LCD_DC_Clr();//写命令
   LCD_Writ_Bus(dat);
   LCD_DC_Set();//写数据
}

         最后在测试的时候,通过先初始化LCD,在通过下面函数进行全屏颜色显示。

/******************************************************************************
      函数说明:在指定区域填充颜色
      入口数据:xsta,ysta   起始坐标
                xend,yend   终止坐标
                        color       要填充的颜色
      返回值:  无
******************************************************************************/
void LCD_Fill(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color)
{
   uint16_t i,j; 
   LCD_Address_Set(xsta,ysta,xend-1,yend-1);//设置显示范围
   for(i=ysta;i 
  

        在主函数添加以下函数。 

        注意,需要按照自己LCD尺寸来设置,同样的在初始化时也需要修改。 

         LCD_Fill(0,0,128,160,WHITE);

2.SPI+DMA 

         DMA的使用也很简单。只需要在DMA Setting中设置一下即可,一定要打开中断

TFT屏幕使用(CUBEMX+SPI)_第3张图片

void LCD_Writ_Bus(uint8_t dat)

{

        LCD_CS_Clr();  

        HAL_SPI_Transmit_DMA(&hspi1, &dat, 1);

        LCD_CS_Set);

}

         只需要将函数修改为dma即可。

你可能感兴趣的:(单片机,stm32,嵌入式硬件)