OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11948|回复: 11

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

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2015-1-19
在线时间
0 小时
发表于 2015-1-19 16:08:19 | 显示全部楼层 |阅读模式
5金钱
我用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);                                 // 延时。
}
求各位指点。

最佳答案

查看完整内容[请看2#楼]

#define H_FRONT_PORCH    210    这里,改小点
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2013-11-6
在线时间
27 小时
发表于 2015-1-19 16:08:20 | 显示全部楼层
#define H_FRONT_PORCH    210   
这里,改小点

回复

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2015-1-19
在线时间
0 小时
 楼主| 发表于 2015-1-20 13:18:40 | 显示全部楼层
回复【2楼】sugarstan:
---------------------------------
谢谢,改小了,问题解决了。
回复

使用道具 举报

11

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
493
金钱
493
注册时间
2015-3-3
在线时间
114 小时
发表于 2015-5-31 15:02:51 | 显示全部楼层
楼主,可以交流一下吗
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2014-6-4
在线时间
0 小时
发表于 2015-12-23 10:57:47 | 显示全部楼层
回复【2楼】sugarstan:
---------------------------------
你好,请问这些参数
#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的数据手册 没理解怎么算啊?谢谢。
回复

使用道具 举报

17

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2014-6-4
在线时间
19 小时
发表于 2016-1-23 10:09:02 | 显示全部楼层
可以提供程序学习下吗?
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-5-30
在线时间
0 小时
发表于 2016-5-30 14:51:41 | 显示全部楼层
你这个FMC上的时钟是多少啊,我的STM32F429 + SSD1963(外部10M晶振, VCO 300,  PLL 100)

FMC 在21Mhz  通信是OK 的显示正常,位是在32M 就颜色显示不对了,再高点就是不能显示,望指教
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2015-5-18
在线时间
18 小时
发表于 2016-8-6 15:03:59 | 显示全部楼层
darren 发表于 2016-5-30 14:51
你这个FMC上的时钟是多少啊,我的STM32F429 + SSD1963(外部10M晶振, VCO 300,  PLL 100)

FMC 在21Mhz   ...

都用429了,怎么还加个SSD1963?
回复

使用道具 举报

2

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2016-6-18
在线时间
40 小时
发表于 2016-12-17 11:12:36 | 显示全部楼层
楼主,你好,请问,假如你的R数据线和B数据线,反了,会怎样
回复

使用道具 举报

20

主题

143

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-8-28
在线时间
108 小时
发表于 2017-2-17 15:04:02 | 显示全部楼层
HOW 发表于 2015-12-23 10:57
回复【2楼】sugarstan:
---------------------------------
你好,请问这些参数
#define HDP (H_ ...

同问大神,这些参数是怎么算出来的?
回复

使用道具 举报

15

主题

338

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1285
金钱
1285
注册时间
2016-3-16
在线时间
284 小时
发表于 2017-6-2 17:05:08 | 显示全部楼层
无帝老三 发表于 2017-2-17 15:04
同问大神,这些参数是怎么算出来的?

这些参数的设置是根据LCD的数据手册来的
回复

使用道具 举报

50

主题

134

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2014-5-21
在线时间
84 小时
发表于 2018-7-20 14:35:40 | 显示全部楼层
为什么我显示汉字和字符都正常  ,显示图片就是异常   
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-15 02:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表