求救,关于SSD1963读写时序问题

2019-07-24 13:21发布

本帖最后由 ZDawn 于 2018-1-4 21:23 编辑

麻烦各位大佬帮帮忙,我用10MHz晶振接SSD1963,上电后直接读取SSD1963的ID发现一直是0,我的读写时序中,CS引脚都是拉低600ns,WR和RD引脚分别也是拉低200~300ns。手册也没说时序最大能取多少,不知道我这个读写的时间有没有合理,无论读取哪个寄存器都是返回0。


以下是读写程序:
//写命令
void Write_Cmd(uint16_t LCD_Reg)     //GPIOE0~15用作数据线
{

        LCD_CS = 0;
        LCD_RS = 0;

        LCD_WR = 0;
        GPIOE->ODR = LCD_Reg;

        LCD_WR = 1;        
        LCD_CS = 1;
}
//写数据
void Write_Dat(uint16_t LCD_Dat)
{

        LCD_CS = 0;
        LCD_RS = 1;

        LCD_WR = 0;
        GPIOE->ODR = LCD_Dat;

        LCD_WR = 1;        
        LCD_CS = 1;
}


//读数据
uint16_t LCD_ReadReg(uint16_t LCD_Reg)
{
        uint16_t temp;
        Write_Cmd(LCD_Reg);  //写入要读的寄存器号  

        GPIOE->CRH = (GPIOE->CRH & 0x00000000) | 0x44444444; //将端口高8位配置成输入(上下拉输入模式)
        GPIOE->CRL = (GPIOE->CRL & 0x00000000) | 0x44444444; //将端口低8位配置成输入  
        LCD_CS = 0;
        LCD_RS = 1;
        LCD_RD = 0;
        temp = GPIOE->IDR; //读取数据
        
        LCD_RD = 1;
        LCD_CS = 1;
        GPIOE->CRH = (GPIOE->CRH & 0x00000000) | 0x33333333; //释放端口高8位为输出(通用推挽输出模式)
        GPIOE->CRL = (GPIOE->CRL & 0x00000000) | 0x33333333; //释放端口低8位为输出
        return temp;   
}


//读取SSD1963的ID语句
uint16_t DeviceCode;
DeviceCode = LCD_ReadReg(0x00A1);
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
ZDawn
1楼-- · 2019-07-24 17:29
傻了傻了,原来是RESET引脚我没有初始化,直接让它悬空了。原本测着有1到2V想着不管它的,在初始化并且把RESET引脚拉高后就可以了。。。
ZDawn
2楼-- · 2019-07-24 19:01
SSD1963的RESET引脚无论置高还是置低,外接的晶振都没有被拉低。那这个IC是不是烧了。。
正点原子
3楼-- · 2019-07-24 19:38
你这种操作,不需要考虑延迟,再快也能支持

一周热门 更多>