打印

用STM32驱动TFT液晶碰到的问题

[复制链接]
4730|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
雨落沉轩|  楼主 | 2013-7-28 17:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚买了一块TFT液晶,用STM32对其进行驱动,对其画点出现问题:

个点正常:LCD_DrawPoint(100,100);

连续画多个点就不行
        LCD_DrawPoint(100,100);                       
        LCD_DrawPoint(200,200);       
这时,只会显示第一个点。               

画一片区域正常:LCD_Fill(50,50,100,100,POINT_COLOR);
其中
void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color){         
        u16 i,j;
        LCD_SetAddress(xsta,ysta,xend,yend);  //设定区域
        for(i=ysta;i<=yend;i++)
        {                                                                                                                           
                for(j=xsta;j<=xend;j++)LCD_WR_DATA(color);
        }                                                       
}

也就是不能不连续的点,求大神给点解决问题的提示。
沙发
orangelxlf| | 2013-7-28 18:01 | 只看该作者
写的时候有没有“判忙”?就是确定液晶的CPU是空闲的时候写的才有效。或者加个延迟也可以。

使用特权

评论回复
板凳
雨落沉轩|  楼主 | 2013-7-28 19:45 | 只看该作者
orangelxlf 发表于 2013-7-28 18:01
写的时候有没有“判忙”?就是确定液晶的CPU是空闲的时候写的才有效。或者加个延迟也可以。 ...

加了延时,还是没用,怎么判忙呢?

使用特权

评论回复
地板
orangelxlf| | 2013-7-28 19:55 | 只看该作者
有的液晶会有一个BUSY的管脚,此脚电平表明CPU是否处于空闲状态。
也有的是返回特定的指令来表明CPU的状态,仔细看下说明。

使用特权

评论回复
5
lukehua1990| | 2013-7-29 07:04 | 只看该作者
来个完整程序吧,fsmc还是io口?

使用特权

评论回复
6
Regsen| | 2013-7-29 09:17 | 只看该作者
是不是控制命令有要求呢。写完一个数据后,要重新给写控制命令呢,这种情况有没有可能

使用特权

评论回复
7
雨落沉轩|  楼主 | 2013-7-29 10:02 | 只看该作者
本帖最后由 雨落沉轩 于 2013-7-29 11:14 编辑
lukehua1990 发表于 2013-7-29 07:04
来个完整程序吧,fsmc还是io口?

好的,我把整个工程文件贴上(用的是IO,F3没有FSMC):

我的开发板是:stm32F3_discovery  (芯片 stm32F303VC)
液晶型号: S95417-AAA   液晶驱动芯片:S6D1121(这个感觉用的人比较少)我是这里买的:http://item.taobao.com/item.htm?id=17728895360

代码:
TFT_test.rar (1.72 MB)

S6D1121数据手册:

控制器资料-S6D1121.pdf

3.35 MB

使用特权

评论回复
8
hxb20122012| | 2013-7-29 10:03 | 只看该作者
应该不是忙的问题,你能在设定的x,y点画出来的话,那应该是另外寄存器的配置有问题,你仔细看一下你的寄存器配置,比如画完一个点,AC是否+1,已经你的整个刷屏的区域设置等等。

使用特权

评论回复
9
hxb20122012| | 2013-7-29 10:04 | 只看该作者
你也可以刷一下整个屏幕试下看。

使用特权

评论回复
10
雨落沉轩|  楼主 | 2013-7-29 10:17 | 只看该作者
Regsen 发表于 2013-7-29 09:17
是不是控制命令有要求呢。写完一个数据后,要重新给写控制命令呢,这种情况有没有可能 ...

每次画点应该已经定位了,看我的画点函数:
void LCD_DrawPoint(u16 x,u16 y)
{
        LCD_SetAddress(x,y,x,y);  //LCD_SetAddress是定位一个区域,这个定位一个点,所以是(x,y,x,y)
        LCD_WR_DATA(POINT_COLOR);
}

void LCD_SetAddress(uint x1, uint y1, uint x2, uint y2)  //定位(x1,y1)为起点,(x2,y2)为终点的区域
{
    LCD_WriteCmdWithData(0x46, (x2<<8)|x1);   //S6D1121定位横坐标区域是通过一个命令的,详见数据手册的指令描述的R46H(P151页)
    LCD_WriteCmdWithData(0x47, y2); //设定Y2
    LCD_WriteCmdWithData(0x48, y1);  //设定y1
    LCD_WriteCmdWithData(0x20, x1);  //设定RAM开始写的地址(x1, y1)
    LCD_WriteCmdWithData(0x21, y1);
    LCD_WriteCmd(0x22); //设定好寄存器开始写
}

所以每次画点都会定位,现在感觉就是每次只有第一次定位有用,
比如说先画一个点,它会定位准确,并画出点来。可后面再画一个点(或者一片区域)时就都不行,但其实画第二个点时,也会调用定位的函数呀。

再比如说先画一片区域,也能正常,但后面再加画点(或其他区域)就又没用了。

求指点呀。。。。。

使用特权

评论回复
11
雨落沉轩|  楼主 | 2013-7-29 10:18 | 只看该作者
hxb20122012 发表于 2013-7-29 10:04
你也可以刷一下整个屏幕试下看。

刷屏正常,只要是连续的一片都可以,就是不能分开画

使用特权

评论回复
12
hxb20122012| | 2013-7-29 10:25 | 只看该作者
你每次画点有没有设置当前x,y的地址,这个寄存器。

使用特权

评论回复
13
雨落沉轩|  楼主 | 2013-7-29 10:28 | 只看该作者
hxb20122012 发表于 2013-7-29 10:25
你每次画点有没有设置当前x,y的地址,这个寄存器。

都有设的,就在画点函数里设的:
void LCD_DrawPoint(u16 x,u16 y)
{
        LCD_SetAddress(x,y,x,y);//ÉèÖùâ±êλÖÃ
        LCD_WR_DATA(POINT_COLOR);
}

使用特权

评论回复
14
linfeng24| | 2013-7-29 17:46 | 只看该作者
一一对比别人写的例程就很快发现问题的!!

使用特权

评论回复
15
lukehua1990| | 2013-7-29 18:10 | 只看该作者
我也用过这个屏。给你我的驱动程序,试一下,16位的,基于stm32f103rc,3.4的库,没用fsmc

新建文件夹.rar

4.58 KB

使用特权

评论回复
16
lukehua1990| | 2013-7-29 19:49 | 只看该作者
雨落沉轩 发表于 2013-7-29 10:28
都有设的,就在画点函数里设的:
void LCD_DrawPoint(u16 x,u16 y)
{

试试不要每次都设置,设一个大的区域,在里面画几个点,如果成功,就说明是你的XY方向搞错了或者点位置不对之类的

使用特权

评论回复
17
雨落沉轩|  楼主 | 2013-8-13 17:36 | 只看该作者
问题已经解决,回了趟家,不方便上网,所以现在才结贴。顺便说一下我的程序的问题:
void LCD_WriteCmd(uchar cmd
{
  LCD_CS_L; //加入这个OK,
  LCD_RS_L;//RS:0 读写命令
  LCD_WriteBus(cmd);
LCD_CS_H;//加入这个OK,
}
在每次写命令时,先将CS拉低,之后再拉高,可以正常显示。

谢谢大家之前的回答。。。。

使用特权

评论回复
18
hawksabre| | 2013-8-13 20:25 | 只看该作者
问题解决了就好  楼主  很不错   先谢谢了

使用特权

评论回复
19
岁月如割| | 2013-9-18 18:29 | 只看该作者
很不错的程序

使用特权

评论回复
20
onepiece120116| | 2013-10-9 17:00 | 只看该作者
mark一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

250

帖子

0

粉丝