TFT屏幕使用(CUBEMX+SPI)

目  录

1.SPI

2.SPI+DMA


1.SPI

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

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

         引脚设置如下所示。

/*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<yend;i++)
   {                                                
      for(j=xsta;j<xend;j++)
      {
         LCD_WR_DATA(color);
      }
   }                     
}

        在主函数添加以下函数。 

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

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

2.SPI+DMA 

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

void LCD_Writ_Bus(uint8_t dat)

{

        LCD_CS_Clr();  

        HAL_SPI_Transmit_DMA(&hspi1, &dat, 1);

        LCD_CS_Set);

}

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

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值