[STM32H5]【NUCLEO- H563ZI 测评】+TFT屏显示与图像显示

NUCLEO- H563ZI开发板是一款近于最小系统的开发工具,为此为它配置一个显示器件是十分必要,这样就有了一个人机交互的桥梁。

这里所配置的显示屏是一款2.2寸的TFT显示屏,其显示分辨率为240*320像素点,该显示屏以SPI方式工作。

为了省去线路连接的麻烦,显示屏是通过开发板的Arduino接口来完成,所使用的引脚如图1所示。

1 使用引脚

显示屏与开发板的引脚连接关系为:

CS ---PA5

RST---PG9

DC ---PB5

SDA---PD14

SCL---PD15

BL ---PF3

对显示屏所用引脚的配置函数为:

void tft_gpio(void)

{

  __HAL_RCC_GPIOA_CLK_ENABLE();

  __HAL_RCC_GPIOB_CLK_ENABLE();

  __HAL_RCC_GPIOD_CLK_ENABLE();

  __HAL_RCC_GPIOF_CLK_ENABLE();

  __HAL_RCC_GPIOG_CLK_ENABLE();

  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;

  GPIO_InitStruct.Pull  = GPIO_NOPULL;

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

  GPIO_InitStruct.Pin = GPIO_PIN_5;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = GPIO_PIN_5;

  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;

  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = GPIO_PIN_3;

  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = GPIO_PIN_9;

  HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);

}


对使用引脚输出高低电平的语句定义为:

#define LCD_CS_High()   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET)    //CS
#define LCD_CS_Low()    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET)
#define LCD_REST_High() HAL_GPIO_WritePin(GPIOG, GPIO_PIN_9, GPIO_PIN_SET)    //RES
#define LCD_REST_Low()  HAL_GPIO_WritePin(GPIOG, GPIO_PIN_9, GPIO_PIN_RESET)
#define LCD_DC_High()   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET)   //DC
#define LCD_DC_Low()    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET)
#define LCD_SDI_High()  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET)    //DIN
#define LCD_SDI_Low()   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET)
#define LCD_SCK_High()  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_SET)   //CLK
#define LCD_SCK_Low()   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_RESET)
#define LCD_LED_High()  HAL_GPIO_WritePin(GPIOF, GPIO_PIN_3, GPIO_PIN_SET)    //BLK
#define LCD_LED_Low()   HAL_GPIO_WritePin(GPIOF, GPIO_PIN_3, GPIO_PIN_RESET)


在GPIO口模拟SPI通讯的方式下,其发送字节数据的函数为:
 

void LCD_Writ_Bus(unsigned char com)

{

  unsigned char uci;

  for(uci=0;uci<8;uci++)

  {

     if(com & 0x80)

     {

      LCD_SDI_High();

     }

     else

     {

      LCD_SDI_Low();

     }

     com = com << 1;

     delay_1us(1);

     LCD_SCK_Low();

         delay_1us(1);

     LCD_SCK_High();

         delay_1us(1);

  }

}


实现清屏的功能函数为:
 

void LCD_Clear(unsigned int Color)

{

     char VH,VL;

     unsigned int i,j;

     VH=Color>>8;

     VL=Color;        

     Address_set(0,0,LCD_W-1,LCD_H-1);

     for(i=0;i<LCD_W;i++)

     {

       for (j=0;j<LCD_H;j++)

       {

          LCD_WR_DATA8(VH);

          LCD_WR_DATA8(VL);        

       }

     }

}


实现字符串显示的函数为:
 

void LCD_ShowString(unsigned int x,unsigned int y,const char *p)

{

    while(*p!='\0')

    {       

        if(x>LCD_W-16){x=0;y+=16;}

        if(y>LCD_H-16){y=x=0;}

        LCD_ShowChar(x,y,*p,0);

        x+=8;

        p++;

    }  

}


用于显示满屏图像的显示函数为:
 

void show_pic(const unsigned char *p)

{

    int i,j;

    unsigned char picH,picL;

    Address_set(0,0,LCD_W-1,LCD_H-1);

    for(i=0;i<240;i++)

    {

      for(j=0;j<320;j++)

      {

            picH=*p++;

            picL=*p++;

            LCD_WR_DATA8(picH);

            LCD_WR_DATA8(picL);

      }

  }

}


实现显示测试的主程序为:
 

int main(void)

{

  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();

  MX_ICACHE_Init();

  LED1_GPIO_CLK_ENABLE();

  LED2_GPIO_CLK_ENABLE();

  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;

  GPIO_InitStruct.Pull  = GPIO_NOPULL;

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

  GPIO_InitStruct.Pin = LED1_PIN;

  HAL_GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = LED2_PIN;

  HAL_GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStruct);

  tft_gpio();

  tft_Init();

  BACK_COLOR=YELLOW;

  POINT_COLOR=RED; 

  LCD_Clear(YELLOW);

  LCD_ShowString(80,30,"NUCLEO_H563ZI");

  show_tb(60,20,0);

  HAL_Delay(2000);

  show_pic(gImage_123);

  while (1)

  {

      HAL_GPIO_TogglePin(LED1_GPIO_PORT, LED1_PIN);

      HAL_Delay(100);

      HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);

      HAL_Delay(100);

  }

}


经程序的编译与下载,其显示效果如图2至图4所示。

2 字符显示效果

3 图片显示效果

4  显示细节

---------------------
作者:jinglixixi
链接:https://bbs.21ic.com/icview-3315848-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值