一、移植前准备

        硬件方面准备好立创梁山派

        RGB屏幕拓展板

        软件方面准备好要移植的工程文件和立创官方所提供的RGB屏幕资料

下载链接:https://pan.baidu.com/s/1O2XkEvgbB-C2BkRVUJJGEA?pwd=LCKF

二、移植RGB屏幕

(一)、移植相关文件到自己的工程中

        打开名为:RGB_裸机_测试例程 的文件夹,打开其中的Hardware文件夹。

        复制其中的RGB、SDRAM、touch、usart四个文件到你所准备的工程文件的Hardware文件夹(如果你所准备的工程文件已经移植好了usart文件,则可以不用复制usart文件)。

(二)、将相关文件加入工程

        打开所要进行移植的工程文件,启动其工程文件,双击Hardware添加相关RGB的代码(这里我提前添加了usart的相关文件)。

        打开后根据下列图片提示添加相关的.c文件。

        添加相关的.h路径,具体步骤按照下图进行。

        选择相关的.h文件所在的文件夹。

        下图为需要添加的.h文件的路径,确认好之后必须要点击OK,否则不会保存。

(三)、修改报错

        进行编译发现报错,原因是库文件更新出现了拼写错误,将原语句换为下面这个即可。

   // sdram_init_struct.brust_read_switch = ENABLE;

    sdram_init_struct.burst_read_switch = ENABLE;

        改好之后重新编译,发现已经0错误0警告了。

(四)、验证RGB屏幕

        在main.c中添加相关的头文件。

#include "exmc_sdram.h"
#include "lcd.h"
#include "lcd_ui.h"
#include "touch.h"

        在main函数中添加相关的语句,编译下载,发现RGB屏幕可以正常使用了。

int main(void)
{
	ErrStatus init_state;
	int touch_state = 0;
	nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);  // 优先级分组
   
    systick_config();
	led_gpio_config();
	usart_gpio_config(115200U);  					// 串口0初始化
	init_state = exmc_synchronous_dynamic_ram_init(EXMC_SDRAM_DEVICE0);
    if (ERROR == init_state)
    {
        printf("exmc error\r\n");
    }
	
		// 屏幕初始化
		lcd_disp_config();	
		// 触摸初始化
			FT5206_Init();
			
		//画白色矩形填充
		tli_draw_Rectangle(0,0,800,480,WHITE,1);
		//画黑色矩形填充
		tli_draw_Rectangle(400,0,800,480,BLACK,1);
		
    while(1) {
			//触摸扫描
			touch_state = FT5206_Scan(0);
			//如果屏幕被触摸
			if( touch_state == 1 )
			{
				//画出触点一的位置
				point_enlargement(tp_dev.x[0],tp_dev.y[0],BLACK,5);
			}		
    }
}

        具体效果如下图所示(注:在白色区域可以正常的进行绘画,我这里就不演示了):

(五)、各种不正常情况解决办法

(1)、程序锁死,下载不进去

        打开Keil设置界面,选择Target标签,勾选上Use MicroLIB。

        然后选择C/C++标签,将优化选择到0,同时开启C99模式,重新编译下载发现可以正常下载了。

(2)触摸屏幕有问题

        一般这种情况都出现在GD32F470ZGT6上,因为官方的例程都是基于GD32F450ZGT6进行编写的,而GD32F470ZGT6和GD32F450ZGT6两者唯一的区别就在于主频上,GD32F450ZGT6的主频为200MHZ,GD32F470ZGT6的主频为240MHZ,主频的改变就会导致原来确定好的时序出现变化,从而导致最终的结果不符合预期。

        解决方法一:降低GD32F470ZGT6的主频,将其从240MHZ降为200MHZ。点击魔法棒,选择C/C++,将其宏定义改为USE_STDPERIPH_DRIVER,GD32F450。

        解决方法二:如果就要使用240MHZ的主频,由于RGB的驱动是要依靠SDRAM的,就需要修改一下SDRAM的配置,选择exmc_sdram.c文件删除

sdram_init_struct.pipeline_read_delay = EXMC_PIPELINE_DELAY_1_HCLK;

改为:

sdram_init_struct.pipeline_read_delay = EXMC_PIPELINE_DELAY_2_HCLK;

        从原来的200MHZ提升为240MHZ会使得touch.c中的延时函数touch_delay_1us受到影响,其微秒延时是利用__NOP();完成的,其延时时间和芯片的主频息息相关,主频更改会影响到其延时的正常时间,而触摸屏是利用IIC进行通讯的,对其时间要求非常精确。有两种方法重新编写touch_delay_1us函数或者仔细观察发现touch_delay_1us函数又嵌套在CT_Delay函数中,这里可以将其从原来延时2us改为5us,重新编译下载发现RGB屏幕功能都能正常实现了。

// 控制I2C速度的延时
void CT_Delay(void)
{
    touch_delay_1us(5);//将原来延时2us改为延时5us
}

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐