1.3寸TFT屏幕的使用
使用STM32F103C8T6驱动1.3寸TFT屏幕的驱动代码用法
这里使用的开发板和屏幕都来自某宝店家大越创新
1. 硬件接线
开发板上已经预留了屏幕的位置,直接将屏幕插上去就好了
发现如果用usb线插电脑供电的话并不能够带动屏幕,而直接用ST-Link供电就能够带动屏幕
供电正常的话屏幕背光是常亮的,没烧程序的时候屏幕可能是黑色的不是图片中的白色
如果开发板上焊的是排母,屏幕的排针插到排母里面可能会松动,导致屏幕显示出现问题。如果发现屏幕点不亮或者显示不正常可以用手把屏幕按稳了再reset单片机,一般都能正常显示
2. 驱动代码准备
店家发过来的例程是用标准库写的,我自己魔改成了HAL库的,便于用CubeMax进行开发
魔改的内容大致如下
- 把延时全部换成了HAL_Delay()函数
- 改用HAL的SPI函数和GPIO函数
魔改后的驱动代码点击这里下载
3. CubeMax配置
我们需要按照例程中给出的引脚号进行配置
3.1 基础配置
配置晶振、时钟树等等,在这里不细说
3.2 SPI配置
开发板上对应的SPI引脚是C8T6的SPI2,所以我们打开SPI2,SPI配置全都默认
3.2 GPIO配置
我们还需要使能3个GPIO口,这里全部配置成输出模式即可,GPIO的配置也默认
3.3 生成工程
现在必须的引脚就都配置完成了,其他的比如串口就按需开启即可
下一步生成工程,命名为tfttest,开始写代码
注意名字和路径不要有中文和空格,否则可能会出现问题
我使用的IDE是CLion,所以IDE就选择了SW4STM32,使用Keil的朋友照常选MDK-ARM就好
注意:我魔改例程的时候偷懒把延时全部换成了HAL_Delay()函数,这东西有个bug,如果在定时器中断中使用HAL_Delay()将会导致程序卡死,解决方法是修改系统定时器的优先级,使其高于定时器的优先级
👆就是默认优先级为15的那个中断,如果使用了定时器中断,记得使系统定时器的优先级高于定时器中断的优先级
4. 代码编写
4.1 例程移植
下载并打开上面链接里的资料,找到单独的驱动代码文件夹
GBK_LibDrive里面是屏幕PCB中存储字库芯片的驱动代码,用来读取汉字字库的,LCD130H里面是屏幕的驱动代码
我们把这两个文件夹都放到自己工程的Core文件夹中,并在IDE中添加进工程,记得添加.h文件的路径
编译没有问题就说明移植ok了
4.2 点亮屏幕
在main.h中包括相关头文件
在while前面初始化屏幕
现在就可以在while里面用商家写好的示例菜单函数了
如果一切正常,屏幕就会循环播放测试内容了
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中存放图片信息数组的名称
如果想新增颜色,自己找好4位16进制表示的颜色,加到lcd.h中就好了