求助:STM32F407+SSD1963+7寸TFT显示异常

2019-07-20 07:10发布

我用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);                                 // 延时。
}
求各位指点。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。