OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3601|回复: 1

求ILI9341 2.8寸屏 STM32F103 硬件SPI驱动程序

[复制链接]

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
发表于 2017-1-7 10:14:13 | 显示全部楼层 |阅读模式
50金钱
之前手头有块2.8寸的ILI9341串口屏,只要4个IO口的那种,后面发现屏幕这个屏幕不管是走模拟SPI还是硬件SPI,屏幕刷新都很慢,后来我又买了个并口的ILI9341显示屏,接口很多的那种,但是原子哥的代码都是模拟SPI,本来以为串口屏和并口屏的硬件SPI应该是一样的,于是我照着串口屏的硬件SPI,修改了下并口屏的SPI,结果发现,SPI怎么都读不出数据,读出来要么不对 要么老是0,原始代码中的模拟SPI 每次读取的都是16位数据,但是写入的数据都是8位,所以我好郁闷,这个并口屏的硬件SPI要怎么读写数据。求大神指点。下面是SPI的读写函数

[mw_shl_code=c,true]//SPI写数据
//向触摸屏IC写入1byte数据   
//num:要写入的数据
void TP_Write_Byte(u8 num)   
{  
#if 0
        //模拟SPI的代码
        u8 count=0;   
        for(count=0;count<8;count++)  
        {           
                if(num&0x80)TDIN=1;  
                else TDIN=0;   
                num<<=1;   
                TCLK=0;          
                TCLK=1;                //上升沿有效                
        }       
#else
        //我修改的硬件SPI的代码
        TCS=0;                 //选中触摸屏IC
        SpiReadWriteByte(num);       
        //SPI_Writebyte(num);
        TCS=1;                //释放片选
#endif
}                  

//SPI读数据
//从触摸屏IC读取adc值
//CMD:指令
//返回值:读到的数据          
u16 TP_Read_AD(u8 CMD)          
{          
        //模拟SPI的代码
#if 0
        u8 count=0;           
        u16 Num=0;
        TCLK=0;                //先拉低时钟          
        TDIN=0;         //拉低数据线
        TCS=0;                 //选中触摸屏IC
        TP_Write_Byte(CMD);//发送命令字
        delay_us(6);//ADS7846的转换时间最长为6us
        TCLK=0;                          
        delay_us(1);              
        TCLK=1;                //给1个时钟,清除BUSY                        
        TCLK=0;                          
        for(count=0;count<16;count++)//读出16位数据,只有高12位有效
        {                                   
                Num<<=1;          
                TCLK=0;        //下降沿有效                        
                TCLK=1;
                if(DOUT)Num++;
        }         
        Num>>=4;           //只有高12位有效.
        TCS=1;                //释放片选                
#else
        //我修改的硬件SPI的代码,这个读取的数据不正常,不知道咋改
        u16 Num=0;
        TCS=0;                 //选中触摸屏IC
        SpiReadWriteByte(CMD);
        //delay_us(6);//ADS7846的转换时间最长为6us
        Num = SpiReadWriteByte(0xFF);
        //Num = SPI_Readbyte(CMD);
        Num>>=4;
        TCS=1;                //释放片选         
#endif
        return Num;   
}[/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2017-1-10 14:30:39 | 显示全部楼层
哎~~ 难道大家都是用模拟SPI操作lcd的?? 就没有用硬件SPI的么~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-30 11:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表