【扩展】【程序】使用硬件SPI驱动1.3寸TFT彩屏

发布于:2022-12-15 ⋅ 阅读:(700) ⋅ 点赞:(0)

1.3寸TFT屏幕的使用

使用STM32F103C8T6驱动1.3寸TFT屏幕的驱动代码用法

这里使用的开发板和屏幕都来自某宝店家大越创新

1. 硬件接线

开发板上已经预留了屏幕的位置,直接将屏幕插上去就好了

IMG_20220817_162314

发现如果用usb线插电脑供电的话并不能够带动屏幕,而直接用ST-Link供电就能够带动屏幕

供电正常的话屏幕背光是常亮的,没烧程序的时候屏幕可能是黑色的不是图片中的白色

如果开发板上焊的是排母,屏幕的排针插到排母里面可能会松动,导致屏幕显示出现问题。如果发现屏幕点不亮或者显示不正常可以用手把屏幕按稳了再reset单片机,一般都能正常显示

2. 驱动代码准备

店家发过来的例程是用标准库写的,我自己魔改成了HAL库的,便于用CubeMax进行开发

魔改的内容大致如下

  1. 把延时全部换成了HAL_Delay()函数
  2. 改用HAL的SPI函数和GPIO函数

魔改后的驱动代码点击这里下载

3. CubeMax配置

我们需要按照例程中给出的引脚号进行配置

image-20220817152401713

3.1 基础配置

配置晶振、时钟树等等,在这里不细说

3.2 SPI配置

开发板上对应的SPI引脚是C8T6的SPI2,所以我们打开SPI2,SPI配置全都默认

image-20220817152227132

3.2 GPIO配置

我们还需要使能3个GPIO口,这里全部配置成输出模式即可,GPIO的配置也默认

image-20220817153631785

3.3 生成工程

现在必须的引脚就都配置完成了,其他的比如串口就按需开启即可

下一步生成工程,命名为tfttest,开始写代码

image-20220817152754085

注意名字和路径不要有中文和空格,否则可能会出现问题

我使用的IDE是CLion,所以IDE就选择了SW4STM32,使用Keil的朋友照常选MDK-ARM就好

注意:我魔改例程的时候偷懒把延时全部换成了HAL_Delay()函数,这东西有个bug,如果在定时器中断中使用HAL_Delay()将会导致程序卡死,解决方法是修改系统定时器的优先级,使其高于定时器的优先级

image-20220817153912494

👆就是默认优先级为15的那个中断,如果使用了定时器中断,记得使系统定时器的优先级高于定时器中断的优先级

4. 代码编写

4.1 例程移植

下载并打开上面链接里的资料,找到单独的驱动代码文件夹

image-20220817153136949

GBK_LibDrive里面是屏幕PCB中存储字库芯片的驱动代码,用来读取汉字字库的,LCD130H里面是屏幕的驱动代码

我们把这两个文件夹都放到自己工程的Core文件夹中,并在IDE中添加进工程,记得添加.h文件的路径

image-20220817152738820

编译没有问题就说明移植ok了

4.2 点亮屏幕

在main.h中包括相关头文件

image-20220817154222073

在while前面初始化屏幕

image-20220817154616195

现在就可以在while里面用商家写好的示例菜单函数了

image-20220817154710655

如果一切正常,屏幕就会循环播放测试内容了

IMG_20220817_162453

4.3 相关函数的使用

4.3.1 显示英文和数字

调用下面的函数就好,参数都是什么可以直接看lcd.c中的注释

24B的字号会比16B的字号大

这个屏幕的分辨率是240*240,注意不要超出范围

BLACK是黑色,是在lcd.h中的宏定义

	Draw_Font24B(16,40,BLACK,"lalal");//显示英文字母
    Draw_Font24B(16,80,BLACK,"134567890");//显示数字

	Draw_Font16B(16,100,BLACK,"lalal");//显示英文字母
    Draw_Font16B(16,140,BLACK,"134567890");//显示数字

4.3.2 显示变量

uint8_t  num_show = 12;
LCD_ShowNum(16,160,num_show,2,16,BLACK);//变量显示

4.3.3 清屏

这里的清屏是指将屏幕用某种颜色覆盖

LCD_Clear(GRAY0); //清屏

4.3.4 显示汉字

在显示汉字的时候我遇到一个玄学问题,就是显示汉字的函数放在lcd.c中跑正常,放在main.c中跑输出的汉字就乱码了,不知道啥问题,索性就在lcd.h中写一个my_test()函数,在里面调用汉字输出函数,然后再main.c中用my_test()输出汉字

void my_test(void)//放在lcd.c中
{
    Draw_Font24B(48,32,MAGENTA,"大大大大大大");
}

my_test();//在main.c中调用

4.3.5 其他

其他内容比如画线画圆在lcd.c中都有现成的函数,这里不一一列举

如果想显示图片,使用Dis_Picture.c中的函数即可,要显示的图片是存放在Picture.c中的,由于C8T6FLASH装不下图片信息,我这里就不测试了

Show_Picture()函数里面的gImage_LCD280就是Picture.c中存放图片信息数组的名称

image-20220817161118812

如果想新增颜色,自己找好4位16进制表示的颜色,加到lcd.h中就好了

本文含有隐藏内容,请 开通VIP 后查看