基于立创梁山派GD32F470ZGT6移植RGB屏幕拓展板例程
一、移植前准备
硬件方面准备好立创梁山派

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
}
更多推荐

所有评论(0)