我用STM32F407+SSD1963(外部时钟4.8MHz)+7寸屏(AT070TN94,800x480)显示,显示的内容(画面)整体右移,不知如何解决。
之前是用5寸屏,使用正常,现升级为7寸屏,就玩不转了。
试了各种参数,屏幕左边总是空出一段空间:
初始化程序:
#define H_RESOLUTION 800 // 800 // 水平像素。
#define H_PULSE_WIDTH 4 // 1 // HPW Hsync同步信号高电平持续周期(脉冲宽度)。
#define H_FRONT_PORCH 210 // 45 // HFP 有效数据结束与Hsync上升沿之间有几个像素时钟周期。
#define H_BACK_PORCH 46 // 210 // HBP Hsync下降沿到有效数据开始有几个像素时钟周期。
#define V_RESOLUTION 480 // 480 // 垂直像素。
#define V_PULSE_WIDTH 4 // 1 // VPW Vsync同步信号高电平持续周期(脉冲宽度)。
#define V_FRONT_PORCH 22 // 10 // VFP 一帧数据结束后、帧同步信号到来之前,无效数据的行数。
#define V_BACK_PORCH 23 // 34 // VBP 帧同步信号结束后、新一帧数据开始之前,无效数据的行数。
#define HDP (H_RESOLUTION-1) // 横向分辨率。
#define HT (H_RESOLUTION + H_PULSE_WIDTH + H_BACK_PORCH + H_FRONT_PORCH - 1) // 水平总周期。
#define HPS (H_PULSE_WIDTH + H_BACK_PORCH - 1)// 水平同步脉冲开始位。
#define LPS 0 // 显示开始位置。
#define HPW (H_PULSE_WIDTH - 1) // 水平同步脉冲宽度。
#define VDP (V_RESOLUTION-1) // 纵向分辨率。
#define VT (V_RESOLUTION + V_PULSE_WIDTH + V_BACK_PORCH + V_FRONT_PORCH - 1) // 垂直总周期。
#define VPS (V_PULSE_WIDTH + V_BACK_PORCH - 1)// 垂直同步脉冲开始位。
#define FPS 0 // 显示开始位置。
#define VPW (V_PULSE_WIDTH - 1) // 垂直同步脉冲宽度。
// -----------------------------------------------------------------------------
void SSD1963_Init_7(void) // 7寸屏显示驱动初始化函数。
{
TFT_CMMD=0xE2; TFT_DATA=0x4A; TFT_DATA=0x02; TFT_DATA=0x04; // PLL 倍频到120M  
LL=4.80*75/3=120M // TFT_CMMD=0xE2; TFT_DATA=0x23; TFT_DATA=0x02; TFT_DATA=0x04; // PLL 倍频到120M PLL=10.0*36/3=120M // N=0x36 for 6.5M, 0x23 for 10M crystal
TFT_CMMD=0xE0; TFT_DATA=0x01; Delay_mS(10); // 将PLL使能。
TFT_CMMD=0xE0; TFT_DATA=0x03; Delay_mS(10); // 将PLL作为时钟。
TFT_CMMD=0x01; Delay_mS(10); // 软件复位
TFT_CMMD=0xA1; SSD_Info[0]=TFT_DATA; SSD_Info[1]=TFT_DATA; // 供应商ID高字节0x01 / 供应商ID低字节0x57
SSD_Info[2]=TFT_DATA; SSD_Info[3]=TFT_DATA; // 产品ID号0x61 / 版本代号0x01
SSD_Info[4]=TFT_DATA; // 固定值0xFF
TFT_CMMD=0xE6; TFT_DATA=0x03; TFT_DATA=0xFF; TFT_DATA=0xFF; // 设置像素时钟频率,目标频率5.3MHz【LCDC_FPR=(4.8MHz*1048576/锁相环MHz)-1】,取决于分辨率。
TFT_CMMD=0xB0; TFT_DATA=0x20; TFT_DATA=0x80; // 设置LCD模式(24位总线宽度和800x400分辨率)、TTL模式。
TFT_DATA=(HDP>>8)&0XFF; TFT_DATA=HDP&0XFF; // Set HDP 横向分辨率 800
TFT_DATA=(VDP>>8)&0XFF; TFT_DATA=VDP&0XFF; // Set VDP 纵向分辨率 400
TFT_DATA=0x00; // RGB顺序。
TFT_CMMD=0xB4; TFT_DATA=(HT >>8)&0XFF; TFT_DATA=HT &0XFF; // Set HT // 水平总周期 HSYNC 设置时序。水平的总时间(显示+非显示),高字节。
TFT_DATA=(HPS>>8)&0XFF; TFT_DATA=HPS&0XFF; // Set HPS // 水平同步脉冲开始位 非显示时间段的开始的水平同步(LLINE)信号和第一个显示数据之间的高字节。水平同步脉冲的起始位置= HPS像素
TFT_DATA=HPW; // Set HPW // 水平同步脉冲宽度 设置在像素时钟的水平同步脉冲的宽度(LLINE)。水平同步脉冲宽度=(HPW+1)个像素
TFT_DATA=(LPS>>8)&0XFF; TFT_DATA=LPS&0XFF; // Set LPS // 显示开始位 设置在像素时钟的水平同步脉冲(LLINE)的开始位置。 / 设置在开始的水平同步脉冲的宽度(线),水平显示周期的开始位置=LPS像素。
TFT_DATA=0x00;
TFT_CMMD=0xB6; TFT_DATA=(VT >>8)&0XFF; TFT_DATA=VT &0XFF; // Set VT // 垂直总周期 VSYNC 在最后的扫描线和下一LFRAME脉冲之间设置的垂直消隐间隔
TFT_DATA=(VPS>>8)&0XFF; TFT_DATA=VPS&0XFF; // Set VPS // 垂直同步脉冲开始位
TFT_DATA=VPW; // Set VPW // 垂直同步脉冲宽度
TFT_DATA=(FPS>>8)&0XFF; TFT_DATA=FPS&0XFF; // Set FPS // 显示开始位置
TFT_CMMD=0xBA; TFT_DATA=0x01; // 设置GPIO[3:0]输出1。 // GPIO[0]:1/TFT显示屏开 - 0/关
TFT_CMMD=0xB8; TFT_DATA=0x05; TFT_DATA=0x01; // 设置GPIO[3:0]为输出方式。 // 设置GPIO_0为普通方式,否则为睡眠开关。
TFT_CMMD=0x36; TFT_DATA=0x03; // 0x03// 0x00 // 旋转(数据送显方式),Rotation。
TFT_CMMD=0xF0; TFT_DATA=0x03; Delay_mS(50); // 设置CPU16位总线接口为16位565模式。
TFT_CMMD=0x29; Delay_mS(5); // 打开显示。
SetColorB(0,0,31); TFT_Clear(); Delay_mS(10); // 显示清屏。 // 200mS的屏幕刷新时间,避免开机闪屏。
Delay_mS(5); // 延时。
}
求各位指点。
这里,改小点
---------------------------------
你好,请问这些参数
#define HDP (H_RESOLUTION-1) // 横向分辨率。
#define HT (H_RESOLUTION + H_PULSE_WIDTH + H_BACK_PORCH + H_FRONT_PORCH - 1) // 水平总周期。
#define HPS (H_PULSE_WIDTH + H_BACK_PORCH - 1)// 水平同步脉冲开始位。
#define LPS 0 // 显示开始位置。
#define HPW (H_PULSE_WIDTH - 1) // 水平同步脉冲宽度。
#define VDP (V_RESOLUTION-1) // 纵向分辨率。
#define VT (V_RESOLUTION + V_PULSE_WIDTH + V_BACK_PORCH + V_FRONT_PORCH - 1) // 垂直总周期。
#define VPS (V_PULSE_WIDTH + V_BACK_PORCH - 1)// 垂直同步脉冲开始位。
#define FPS 0 // 显示开始位置。
#define VPW (V_PULSE_WIDTH - 1) // 垂直同步脉冲宽度。
都是怎么计算的吗??看了1963的数据手册 没理解怎么算啊?谢谢。
FMC 在21Mhz 通信是OK 的显示正常,位是在32M 就颜 {MOD}显示不对了,再高点就是不能显示,望指教
一周热门 更多>