stm32触摸屏 ILI9341

ILI9341 简介

对于spi速度的参考看这评论区
其他介绍可查看这篇文章
我这里使用的240 * 320 的2.8寸的屏幕。四线SPI

cubemx配置

配置spi推荐不要超过20 m
在这里插入图片描述
配置片选 数据/命令 复位 背光

在这里插入图片描述
背光如果不需要调节的话,直接接在3.3v上就可以亮了

触摸采用的是的spi,读取,使用软件spi
在这里插入图片描述
IRQ要拉高。不然不接屏幕的时候会发送错误。

显示代码移植

参考这里1主要用的这个 ,,额外参考这个
把文件中的这几个添加到keil中
在这里插入图片描述
参考的历程使用的是f7,我们需要修改一些内容
这个#include "stm32f7xx_hal.h"改为main.h
这几个引脚

给为
在这里插入图片描述
这时候编译会在ILI9341_GFX.c里面有好几个报错,
把对于的GPIO的操作修改一下
在这里插入图片描述
初始化的地方也需要修改
在这里插入图片描述
运行一个帧率测试函数

// 获取当前时间,单位为毫秒
uint32_t Get_Time_ms(void) {
    return HAL_GetTick();
}
// 帧率测试函数
void Test_ScreenFrameRate(void) {
    const uint16_t test_color = 0xFFFF;  // 测试颜色,白色
    const uint32_t test_duration_ms = 5000;  // 测试时长5秒
    uint32_t start_time = Get_Time_ms();
    uint32_t end_time = start_time + test_duration_ms;
    uint32_t current_time;
    uint32_t frame_count = 0;
    // 开始测试
    while ((current_time = Get_Time_ms()) < end_time) {
        // 填充屏幕,作为一个帧的绘制操作
        ILI9341_Fill_Screen(test_color);
        frame_count++;  // 记录帧数
    }
    // 测试结束,计算帧率
    uint32_t elapsed_time_ms = Get_Time_ms() - start_time;
    float frame_rate = frame_count / (elapsed_time_ms / 1000.0f);  // 帧数/秒
    // 打印帧率结果
		char xianshi[50];
    sprintf(xianshi,"Total Frames: %d", frame_count);
		ILI9341_Draw_Text(xianshi, 0, 0, WHITE, 2, BLACK);
   sprintf(xianshi,"Elapsed Time: %d ms", elapsed_time_ms);
		ILI9341_Draw_Text(xianshi, 0, 20, WHITE, 2, BLACK);
    sprintf(xianshi,"Frame Rate: %.2f FPS", frame_rate);	
		ILI9341_Draw_Text(xianshi, 0, 40, WHITE, 2, BLACK);
}

主函数这么写


	ILI9341_Init();//initial driver setup to drive ili9341
	ILI9341_Fill_Screen(BLACK);	
	 Test_ScreenFrameRate();
	 

触摸代码移植

#define TP_CLK_PORT								T_CLK_GPIO_Port
#define TP_CLK_PIN								T_CLK_Pin

#define TP_CS_PORT								T_CS_GPIO_Port
#define TP_CS_PIN									T_CS_Pin

#define TP_MISO_PORT							T_MISO_GPIO_Port
#define TP_MISO_PIN								T_MISO_Pin

#define TP_MOSI_PORT							T_MOSI_GPIO_Port
#define TP_MOSI_PIN								T_MOSI_Pin

#define TP_IRQ_PORT								T_IRQ_GPIO_Port
#define TP_IRQ_PIN								T_IRQ_Pin
void touch_test(void)
{
		ILI9341_Fill_Screen(WHITE);
		ILI9341_Set_Rotation(SCREEN_HORIZONTAL_2);
		ILI9341_Draw_Text("Touchscreen", 10, 10, BLACK, 2, WHITE);
		ILI9341_Draw_Text("Touch to draw", 10, 30, BLACK, 2, WHITE);
		ILI9341_Set_Rotation(SCREEN_VERTICAL_1);
		
		while(1)
		{
			
			if(TP_Touchpad_Pressed())
        {
					
					uint16_t x_pos = 0;
					uint16_t y_pos = 0;
					
//					
//					HAL_GPIO_WritePin(GPIOB, LD3_Pin|LD2_Pin, GPIO_PIN_SET);
					led_contral('2',on);
          uint16_t position_array[2];					
					
					if(TP_Read_Coordinates(position_array) == TOUCHPAD_DATA_OK)
					{
					x_pos = position_array[0];
					y_pos = position_array[1];					
					ILI9341_Draw_Filled_Circle(x_pos, y_pos, 2, BLACK);
					
					ILI9341_Set_Rotation(SCREEN_HORIZONTAL_2);					
					char counter_buff[30];								
					sprintf(counter_buff, "POS X: %.3d", x_pos);						
					ILI9341_Draw_Text(counter_buff, 10, 80, BLACK, 2, WHITE);					
					sprintf(counter_buff, "POS Y: %.3d", y_pos);						
					ILI9341_Draw_Text(counter_buff, 10, 120, BLACK, 2, WHITE);
					ILI9341_Set_Rotation(SCREEN_VERTICAL_1);
					}
					
					//ILI9341_Draw_Pixel(x_pos, y_pos, BLACK);
					
        }
			else
			{
				led_contral('2',off);
//				HAL_GPIO_WritePin(GPIOB, LD3_Pin|LD2_Pin, GPIO_PIN_RESET);
			}
			
		}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值