新手STM32mini板TFTLCD问题求教!

2019-08-16 19:22发布

在TFTLCD的例程中的LCD_RD_DATA(void) 函数中,有这样一段LCD_RD_CLR; //读取数据(读寄存器时,并不需要读 2 次)
if(lcddev.id==0X8989)delay_us(2);//FOR 8989,延时 2us
t=DATAIN;
LCD_RD_SET;

9341不是在RD上升沿读取数据的吗,为什么这里先读了IO口才把RD拉高的,这样不是读不到数据了吗。

求各位大神指教啊。


完整的函数体如下:
u16 LCD_RD_DATA(void)
{
u16 t;
GPIOB->CRL=0X88888888; //PB0-7 上拉输入
GPIOB->CRH=0X88888888; //PB8-15 上拉输入
GPIOB->ODR=0X0000; //全部输出 0
LCD_RS_SET;
LCD_CS_CLR;
LCD_RD_CLR; //读取数据(读寄存器时,并不需要读 2 次)
if(lcddev.id==0X8989)delay_us(2);//FOR 8989,延时 2us
t=DATAIN;
LCD_RD_SET;
LCD_CS_SET;
GPIOB->CRL=0X33333333; //PB0-7 上拉输出
GPIOB->CRH=0X33333333; //PB8-15 上拉输出
GPIOB->ODR=0XFFFF; //全部输出高
return t;
}  




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
正点原子
1楼-- · 2019-08-17 00:08
这是STM32读取9341的数据,不是9341读取STM32的数据,你对象要搞对
zhsyghhz
2楼-- · 2019-08-17 05:54
 精彩回答 2  元偷偷看……
pkzz021
3楼-- · 2019-08-17 07:16
zhsyghhz 发表于 2017-7-25 08:38
函数没有问题,就是RD的上升沿读取数据。

那为什么是先读再拉高的呢读的时候并没有上升沿啊
pkzz021
4楼-- · 2019-08-17 11:38
正点原子 发表于 2017-7-24 12:58
这是STM32读取9341的数据,不是9341读取STM32的数据,你对象要搞对

还是不理解9341的写入和读取不都是上升沿的吗。这里先把RD拉低,然后读取IDR的内容,然后再拉高RD。这样上升沿不是发生在单片机读取数据之后吗?怎么能读到正确的数据呢
淡定的H羊
5楼-- · 2019-08-17 12:55
看数据手册的时序图 ILI9341读时序.PNG
看中间那三个圆圈下面的话。第一个圆圈那里:在RDX的下降沿,ILI9341就已经把要发给MCU读回的数据放在总线上了,其实这个时候就可以读数据了。
第三个圆圈下面的话说的是ILI9341把总线上的数据撤走,释放总线。而这个动作是发生在RDX的上升沿之后的一段时间。
也就是说,实际上在RDX的下降沿(有一定的时延),ILI9341就已经把给MCU读回的数据发出来了。MCU读了数据之后把RDX拉高,通知ILI9341已经读回了数据,ILI9341可以释放总线了。
pkzz021
6楼-- · 2019-08-17 16:49
淡定的H羊 发表于 2017-7-27 11:01
看数据手册的时序图
看中间那三个圆圈下面的话。第一个圆圈那里:在RDX的下降沿,ILI9341就已经把要发给MC ...

懂了,谢谢!

一周热门 更多>