ili9341的某个点的颜 {MOD}的读取程序出错,求大神指正,谢谢

2019-08-16 20:08发布

先说问题再贴代码,写颜 {MOD}都是正确的,在读点的时候只能读出FC和00 这个值,程序看了一遍又一遍就是找不出哪有错,已经卡住一天了,求帮忙,谢谢了

是9341驱动的

我把牵涉到的程序都贴上,大家帮忙看看

//写命令,一般写寄存器编号
void Lcd_wr_cmd(u16 cmd)
{
LCD->lcd_cmd=cmd; //写入要写的寄存器序号
}

//读数据
u16 Lcd_re_data(void)
{
return LCD->lcd_data;  //读数据
}

//设置区间起始位置
u8 Lcd_interval_star(u16 sx,u16 sy)
{
if(sx>lcd_dev.width-1||sy>lcd_dev.height-1) return 1;
Lcd_wr_cmd(SETX_REG);
Lcd_wr_data(sx>>8);
Lcd_wr_data(sx&0x00FF);
Lcd_wr_cmd(SETY_REG);
Lcd_wr_data(sy>>8);
Lcd_wr_data(sy&0x00FF);
return 0;
}

u32 Lcd_re_colour(u16 x,u16 y)
{
u32 point_colour=0;
Lcd_interval_star(x,y);
Lcd_wr_cmd(0X002E);
Delay_us(5);
Lcd_re_data();//第一个读数丢弃
Delay_us(5);
point_colour=((u32)Lcd_re_data()<<16);
Delay_us(5);
point_colour|=(u32)Lcd_re_data();
return point_colour;
}
因为出错,所以读颜 {MOD}的时候就连读两个16位数据组成32位的,然后串口输出出来看,

printf ("FFFF write %x ",Lcd_re_colour(1,1));
这是读取函数其他颜 {MOD}都一样的

再贴串口数据结果
00 1f blue fc 00
ff e0 yellow fc fc 00 fc
ff ff    write fc fc fc fc
0000 black 0
前面是写进去的颜 {MOD},后面是读出来的颜 {MOD}

真心百爪挠心,烦躁的不行,不然不会麻烦大家的,辛苦了,谢谢



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
25条回答
QKX607
1楼-- · 2019-08-17 10:18
回复【7楼】正点原子:
---------------------------------
怪不得一直看不懂。原子哥!!数据手册都有问题,那开发过程中可以参考那些资料去编写这些程序呢??
正点原子
2楼-- · 2019-08-17 15:23
回复【8楼】QKX607:
---------------------------------
还是数据手册。或者问厂家要资料。
合肥-文盲
3楼-- · 2019-08-17 20:01
回复【3楼】八度空间:
---------------------------------
我算是发现了
1.对ILI9341来说,读GRAM,第一个数据是无效的,所以要多读一次。
2.对ILI9341来说,所有的读都是在RD低电平的时候读,千万别等RD上升沿之后再读,否则是错误的。
3.对ILI9341来说,所有的写是正常的时序,都是WR的上升沿的时候写。
八度空间
4楼-- · 2019-08-17 20:10
 精彩回答 2  元偷偷看……
合肥-文盲
5楼-- · 2019-08-17 22:56
回复【11楼】八度空间:
---------------------------------
BGA为啥设为1    而不是0?      我设为0和设为1  发现没影响   难道要读点的时候才能看出影响吗   但是读点函数的设计也是按照RGB的顺序读点的啊
八度空间
6楼-- · 2019-08-18 00:11
回复【12楼】合肥-文盲:
---------------------------------
会处理一下的吧,9341这货数据手册原子哥说是错的,不知道哪个是对的


你说的这个问题我那时侯也遇到了,就是奇怪不知道怎么没影响

一周热门 更多>