你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

NUCLEO的驱动屏幕TFT的一些疑惑

[复制链接]
一花一世界003 发布时间:2015-2-2 08:46
我有一点点遗憾,就是之前想过为NUCLEO配置一块屏幕,但是一直没有机会,最近有一块TFT屏幕,型号是ILI9225,在KEIL下先编写驱动程序,是初始化,然后写命令,写数据,最后在设置屏幕的寄存器。
, f6 X5 n, i8 }$ g, H( s0 i! }void LCD_GPIO_Init(void)
. \2 @4 a& }9 ]. L# D& _{# P% V" Q! ]- A8 D, ]2 N  m; ^
8 H0 v4 P1 N. r4 i5 Q2 i
        GPIO_InitTypeDef  GPIO_InitStructure;$ p8 d& R, F' i' Q
              " D& Q; ~2 z8 @. T0 I
        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB ,ENABLE);8 t. a/ Q, g7 q
        -----可以看到我的IO口是B9,B10,B11,B12,B13,B14,B153 ^$ `3 j- ^1 ~7 k1 P4 L. m
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14| GPIO_Pin_15;
! T% k1 j* q* J2 j        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  ~* Y: Y  r; S  ^, i; E/ c
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;) ]  x+ Z! F! L" _( F
        GPIO_Init(GPIOB, &GPIO_InitStructure);
$ z6 d9 z/ O& g6 ?3 M
$ Q, d6 f4 d8 c}
! z* N) {5 A* f5 O- H; `' G# f! I
% x& R, J& \$ r% Pvoid  SPIv_WriteData(u8 Data)
6 r! F4 x3 w0 c. i' S" s8 t{//STM32_模拟SPI读写一个字节数据底层函数+ \" N7 {5 Z1 U: X# n; d
        unsigned char i=0;2 c6 Q. \4 g! p- w& {  K2 S+ J
        for(i=8;i>0;i--)
! F* S- t* M. {  {7 e! u        {
( p4 z% e/ E3 y) b! L' Z! e        if(Data&0x80)       
% \* g8 T6 c+ n, e" L       LCD_SDA_SET; //输出数据
( h& w0 K( m. J# u' y/ u      else LCD_SDA_CLR;. L4 R8 M- e" G4 b
      //LCD_SDA   ----->             GPIO_Pin_15/  & v! `8 {5 c+ W
     //LCD_SDA_SET---->          LCD_CTRL->BSRR=LCD_SDA; \+ a' O# E# O! B; Q
      LCD_SCL_CLR;      
! z0 _7 Y9 C: f# h. x      LCD_SCL_SET;$ O' C! T# o$ N1 Z- R- L
      Data<<=1;
* V3 O# w3 e# O. N, P}9 I4 j/ E% [4 P: I- N$ G
}6 }* |! e! a# ~2 ?) U8 T
1 A* u# O. l6 \% r
void Lcd_WriteIndex(u8 Index)9 X0 W1 T, h- F2 R+ T( D0 N
{  l' ^0 `8 g- \" Z* U' Z
   LCD_CS_CLR;# v. Z0 |* A) j" Z/ z* ?: [
   LCD_RS_CLR;+ e4 l- L/ M  M* O0 [  [/ F2 m
#if USE_HARDWARE_SPI   
  [' _; }5 Q9 g3 R3 J! J   SPI_WriteByte(SPI2,Index);- O' {4 K  r! O& N
#else
3 B8 `- K' }' l9 m9 g   SPIv_WriteData(Index);4 j5 X: g4 W& V0 D+ h
#endif   i! p/ i1 j6 m& A
   LCD_CS_SET;
! Q  m0 U6 w) a% Q; a}- U1 E4 X. k% h6 Q9 n' p1 ]- `

  i9 \2 A0 H; q: l7 d1 n4 r2 ^//LCD写命令字,根据ILI9225的读写时序完成,与网上已有资料一致
3 i* I) H: V9 e5 O* m# s这个是写数据,所有液晶屏都是一样的,只是协议有不同,我的是SPI
' }0 Q. T- \- O8 }4 W按照SPI标准硬件读写协议完成的!像12864之类的协议就有I2C等等。
" M0 L5 A" `0 X' m* Ovoid Lcd_WriteData(u8 Data)1 e( _# ]  ]) _
{
% R) e1 @+ B5 |5 N2 e$ c( Q   LCD_CS_CLR;
' z, k' s8 W7 b( N* M- h   LCD_RS_SET;
3 V, w4 Z7 r6 s3 s#if USE_HARDWARE_SPI   % V) ?7 c2 q7 X
   SPI_WriteByte(SPI2,Data);
3 _( n" K9 r# }; W1 v, q6 _# ^6 x( c#else
. x+ A: i3 b; N: k1 j   SPIv_WriteData(Data);
. |  d- x$ N5 g3 m0 v  o2 ?#endif
- w& r. H+ F# A/ h& @8 l6 F# ?9 ~1 f   LCD_CS_SET;5 M; C& F3 z6 |3 z" a
}
* ?- K  D( r! ?1 b: A) `Lcd_Init函数每个液晶屏幕根据其控制芯片的不同也有不一样的写命令,数据组合) E* S$ d  x) v$ R1 F% s: u& V
我的ILI9225与其他的液晶屏幕的初始化,设置位置当然有所区别- o1 V" g; }! T+ t* L

  c, z' q! m+ N) R, L" i//LCD Init For 2.2inch LCD Panel with ILI9225.       
; m0 c7 m  h2 U/ t) m- K9 _. Y) Z        LCD_WriteReg(0x10, 0x0000); // Set SAP,DSTB,STB
  m) M8 T" Y3 z  N5 B  L        LCD_WriteReg(0x11, 0x0000); // Set APON,PON,AON,VCI1EN,VC
  r5 @( F7 u. S5 d) @        LCD_WriteReg(0x12, 0x0000); // Set BT,DC1,DC2,DC3: W6 Y2 f' Q- i) m3 D8 G3 o
        LCD_WriteReg(0x13, 0x0000); // Set GVDD+ C6 r( [% F( x* `$ V. v
        LCD_WriteReg(0x14, 0x0000); // Set VCOMH/VCOML voltage
" c  g+ X+ C. q- \: t# U: b        delay_ms(40); // Delay 20 ms8 B1 Q2 X& v* j6 c( `0 {  X
       
2 X  s! g, o9 K" e# x        // Please follow this power on sequence6 m! W* A; p+ Y1 U
        LCD_WriteReg(0x11, 0x0018); // Set APON,PON,AON,VCI1EN,VC
  ^) N8 f5 v9 S! ]        LCD_WriteReg(0x12, 0x1121); // Set BT,DC1,DC2,DC3
8 n* F% Z. e3 [& ^        LCD_WriteReg(0x13, 0x0063); // Set GVDD
- Y8 z3 d; d) r; n6 w! B        LCD_WriteReg(0x14, 0x3961); // Set VCOMH/VCOML voltage$ ?! I- ?! \# ^6 c
        LCD_WriteReg(0x10, 0x0800); // Set SAP,DSTB,STB" a8 v6 Z4 S$ z& U0 O" d7 r
        delay_ms(10); // Delay 10 ms
! {  e0 p+ ?6 n5 D        LCD_WriteReg(0x11, 0x1038); // Set APON,PON,AON,VCI1EN,VC
8 t  {5 k9 }; S. C        delay_ms(30); // Delay 30 ms
6 L! a6 \$ v0 g, P       
4 n: J+ ?* X8 [' |5 q        7 m7 T* M6 g0 j" O( H# T
        LCD_WriteReg(0x02, 0x0100); // set 1 line inversion等等,由于发帖长度限制,这里就写一下一部分吧。* s' y9 G4 k( `
2 l1 c# F. q6 g5 x
接着我会开一个贴写我在MBED上面是怎么样写SPI来驱动我的ILI9225的
, O7 b2 x) G4 ~7 n8 w
赞 收藏 评论8 发布时间:2015-2-2 08:46

举报

8个回答
aderson 回答时间:2015-2-2 10:16:34
SPI快吗?
一花一世界003 回答时间:2015-2-2 18:35:45
spi速度够快,基本上在SPI速率可以达到MB速度
湛无双 回答时间:2015-2-2 19:25:05
建议使用芯片自带的硬件SPI 这样效果好点 不要用软件模拟
一花一世界003 回答时间:2015-2-3 12:51:56
湛无双 发表于 2015-2-2 19:25  z7 H9 R, F" Z5 G: f- o
建议使用芯片自带的硬件SPI 这样效果好点 不要用软件模拟
) Y, N0 r% O) h1 L
没成功,所以换用模拟的SPI,
时光碎了天 回答时间:2015-2-3 13:13:56
很不错的
20091217083309-1058990770.jpg
cxtarm 回答时间:2015-2-3 13:33:44
硬件SPI更爽
& S! y& `/ w0 F0 ^) s
湛无双 回答时间:2015-2-3 15:14:17
一花一世界003 发表于 2015-2-3 12:51
* P6 @4 G# s; O$ W没成功,所以换用模拟的SPI,
3 M1 Z$ t* e, Y) H& v2 v
可以参考下F4的SPI设置问题,我是用的F4的板子  不知道你用的什么板子 可能是用的F3的 这样的话SPI的配置就大差不差了 我这个程序里面还加了文件操作系统  对于需要外扩大容量的SD卡很有帮助,另外还添加了长文件名支持,这样就有点耗内存了 所以我上传了两个版本,你可以拿去参考下' ^  y. }/ p2 Z$ q7 u; s  T# d( _
https://www.stmcu.org.cn/module/forum/thread-599839-1-1.html
andrewlawww 回答时间:2015-2-3 16:08:55
过来学习了
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版