显示屏调试(二)"/>
4.0寸86盒显示屏调试(二)
硬件接口有了,连接也做好了,下一步开始编程,在找基本程序时,发现以前有一个4.0显示屏的demo,但好像是没有完成,那么接下来就在这个上面修改,按照正确思路,一步一部驱动它。
当然,既然以前就没能驱动成功,我还是准备好了如果不成功,那也没办法的心态了。当然我的目的依旧是要驱动成功。这个不行,下次一定用新方案。言归正传。
要确定接口,使用的是SPI和RGB。思考SPI应该是用来发指令的,RGB应该仅仅用于发数据,但像素点位置怎么发?估计也是SPI发的。这里从驱动IC手册上发现有3线和4线SPI。
但屏幕规格书上却并没有明确说明是3线,还是4线。从硬件接口上看到有DCX引脚,那先默认是4线试一下。
编写SPI的程序,设定引脚
//SPI_IO口初始化
void Lcd_Spi_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
/* DCX ~ PD4 */
/* SDA ~ PD5 */
/* SCL ~ PD6 */
/* CSB ~ PD7 */
/* RESET ~ PD8 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_SetBits(GPIOD, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8);
}
写SPI输出和读取函数,为了确定SPI的类型,以及确保能够通信,先写指令读取ID号。
找到指令页读ID号的位置:
ID号有三个寄存器组成,使用4线读24位数据的时序图:
注意在指令后又一个空时钟,发现SPI用的SPI-16,ID在0400H后三字节。因此,发送三个指令,即可读取整个ID号。读取ID在串口输出是0xFFFFFF,指令页上没有写默认指令是什么,往下翻发现默认指令就是
本来就想着如果是全1或全0就有可能不对,这个时候查看指令发现真是全1,没法确定是否写对了时序,因此在指令表中找一个可读的指令,数据不是全1或0的。如下这个
读这个0x0A00地址的数据,应该会出现0和1交叉的数据。
读一个数据用的是4线8位数据读取时序,指令和数据间没有间隔,一定要注意时序中细微的不同。
更多推荐
4.0寸86盒显示屏调试(二)
发布评论