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

【经验分享】STM32 FSMC TFT LCD

[复制链接]
STMCU小助手 发布时间:2022-1-29 01:04
STM32+SSD1963+TFT(FSMC)已调试通过的代码。
其中要注意的两点:
1.外部访问地址需加volatile,否则keil MDK 优化会将部分代码优化掉,造成错误。
 volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。
2 o/ i- Y' A) }0 x4 [& G( q2. FSMC内部地址和外部实际地址有区别。如A18连线对应内部地址是A19。
  1. <div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">// ssd1963 #d/c   -------- STM32F103VCT6 A18
    5 ]) m- M) D# C1 R9 y4 o. d
  2. </font></div><font face="Tahoma" color="#000000">1 t7 ?; Q% A$ c' B% V; z! D( G) s
  3. </font><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">#define LCD_COMM_ADD  *((volatile u16 *)0X60000000)0 ?4 b) J+ l. m" N; A
  4. #define LCD_DATA_ADD  *((volatile u16 *)0X60080000)% V( Z% T3 j# Q+ Q
  5. </font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000"> #define WriteCommand(cmd) {LCD_COMM_ADD = cmd;}0 h" v3 c+ S) C: v1 b
  6. #define WriteData(data)  {LCD_DATA_ADD = data;}</font></div><font face="Tahoma" color="#000000">" j0 M. r7 _8 ~
  7. </font><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">void LCDFSMCConfig(void). C) g4 j1 ?1 C* h( m3 x9 \, m
  8. {
    # K: q! |' \' e6 c8 Q/ h
  9.   FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;& s- c, B5 d) h! Z/ n
  10.   FSMC_NORSRAMTimingInitTypeDef  p;
    4 |) Z( x" s3 L4 c) _
  11.   GPIO_InitTypeDef GPIO_InitStructure;! T4 X4 F5 J: p, S! v2 c' f
  12. /*-- FSMC Configuration ------------------------------------------------------*/</font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">/* Enable FSMC, GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */5 T, h* Z0 }$ p5 C
  13.   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
    # y8 S; _4 ~3 q. B5 Y% F+ q
  14.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |1 x2 C5 Q: Y8 t  m! B' R" C
  15.              RCC_APB2Periph_AFIO, ENABLE);</font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">/*===========GPIO For the LCD_Bus========================*/ 4 z: U9 i5 G2 E+ F0 q" T
  16.   /*  Data /Address lines configuration */
    6 A4 {! o2 O# B
  17.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
    % L3 j8 ]4 d2 X/ `& s) W
  18.           GPIO_Pin_14 | GPIO_Pin_15;. j4 x/ [' W8 ?( D) n; R1 o3 X
  19.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    " f) ]5 L, B" B3 B# G6 ?
  20.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    ! g& S5 a0 _6 P( y# H8 h
  21.   GPIO_Init(GPIOD, &GPIO_InitStructure);</font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 |
      D, n, G9 {- ?! b# \
  22.           GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
    # ~2 B; C6 O3 E1 T+ L, [4 h
  23.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;! Y/ q, ~6 l: d! Q& Q, T
  24.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;6 ]) G/ n% c5 _/ q
  25.   GPIO_Init(GPIOE, &GPIO_InitStructure);</font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">  /*  Address lines configuration: A18*/
    ! y) D  u$ a; R3 L. Q' U5 \* a+ Y
  26.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;3 |$ A# M  ?6 a
  27.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
      c; V$ R; f  R& j7 }: E1 J
  28.   GPIO_Init(GPIOD, &GPIO_InitStructure); </font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">  /*===========GPIO For the Control========================*/
    , u+ v4 \" ?4 A  Q0 \8 E
  29. /*!< NOE and NWE configuration */
    ' E# X3 I+ q& A: v4 P
  30. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5;6 ^6 E' E& Y5 Y, X( s1 `) ^! }

  31. ' n# d1 V) ^3 e2 t% I1 u
  32. GPIO_Init(GPIOD, &GPIO_InitStructure);  r8 B, O, P& b3 s0 R& n+ B: I1 m7 W

  33. ) i) y7 ]$ F* _) ^# g  f' z1 l
  34. /*!< NE1 configuration */4 v5 p  Q0 E  G0 g" z+ I7 u
  35.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;+ G% V1 k5 u. z: g3 O9 u
  36.     GPIO_Init(GPIOD, &GPIO_InitStructure);( j5 l3 r4 o* E5 A3 \

  37. ; a5 b* F4 V; S: k
  38. /*!< NADV configuration */* P0 R7 W2 T: Q/ k
  39. // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;" z# y0 ?/ I$ E- V+ a
  40. // GPIO_Init(GPIOB, &GPIO_InitStructure);
    % S4 P) \% X% m- r
  41. #ifdef LCD_USE_TE4 t1 h2 f, A" F& m" B
  42. /*TE :busy*/2 h$ t& X/ D9 y! Y( t
  43.    GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LCD_TE;& I+ M0 X+ l: q$ K3 h" o: k' L6 j) f
  44.    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 6 Q0 r  \; N1 s! H% U5 i
  45.    GPIO_Init(GPIO_PORT_LCD_TE, &GPIO_InitStructure);+ V  T4 {4 _/ p/ @% ]9 L9 E
  46.     #endif4 f. L& O& A% k: Z: Y  S
  47. /*!< NBL0, NBL1 configuration */9 ]4 \4 W6 k" O3 J1 F9 M* O
  48. // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
    0 g/ \- `4 b% D* E
  49. // GPIO_Init(GPIOE, &GPIO_InitStructure);
    ) a) N7 O: S+ ]6 m
  50.   GPIO_SetBits(GPIOD, GPIO_Pin_7);   //CS=15 B* J" V' z7 y. ]- Q  H
  51.   GPIO_SetBits(GPIOD, GPIO_Pin_14| GPIO_Pin_15 |GPIO_Pin_0 | GPIO_Pin_1);   
    % F. w7 ?# `' R% P
  52.   GPIO_SetBits(GPIOE, GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10);  " K* s3 T! z+ X
  53.   GPIO_ResetBits(GPIOE, GPIO_Pin_0);9 C1 v  I6 Z+ Z' L' k5 `
  54.   GPIO_ResetBits(GPIOE, GPIO_Pin_1);   //RESET=0
    ' I0 c9 r5 R* @/ c
  55.   GPIO_SetBits(GPIOD, GPIO_Pin_4);      //RD=1
    * t2 u1 x: J$ R* `
  56.   GPIO_SetBits(GPIOD, GPIO_Pin_5);   //WR=1   
    - }3 I/ i$ B% W/ G; F5 O% ]
  57. /*-- FSMC Configuration ------------------------------------------------------*/% n* J  {$ z( ~8 {) H) j* P
  58. + e: e1 q" l) V, F; c7 f
  59. /*----------------------- SRAM Bank 1----------------------------------------*/" i3 i% o) D3 R8 r& ?
  60.   /* FSMC_Bank1_NORSRAM1 configuration */6 J3 g) C1 `2 r. \. ^) y9 b
  61.   p.FSMC_AddressSetupTime = 0x02;//1;% O% r. c8 e. h5 j6 ?
  62.   p.FSMC_AddressHoldTime = 0x00;//0;
    2 y9 k+ a/ _* L3 |$ \
  63.   p.FSMC_DataSetupTime = 0x05;//5//2;
    * I4 A# S9 a* s6 f$ c% V
  64.   p.FSMC_BusTurnAroundDuration = 0;% i9 w% `/ y4 O2 G) ]
  65.   p.FSMC_CLKDivision = 0;
      k: H* [" N( F, e5 a+ T! A0 B  M
  66.   p.FSMC_DataLatency = 0;
    % R; B4 r3 m) m6 J% N' c0 F! P6 h
  67.   p.FSMC_AccessMode = FSMC_AccessMode_B;//FSMC_AccessMode_A;
    & D2 e, j% I) ^3 Y( D# M
  68.   /* Color LCD configuration ------------------------------------) w8 a! |. p: Q0 a, a  {
  69.      LCD configured as follow:
    5 _$ d9 Y( `/ C4 F& E6 A& r
  70.         - Data/Address MUX = Enable9 m) F8 u! B4 p: ~
  71.         - Memory Type = SRAM% M# c- Q9 V( U/ k+ N% s
  72.         - Data Width = 16bit) s% o; G) X. \/ A  q
  73.         - Write Operation = Enable+ |' T* H  U7 K  d" @; d3 x2 D; N) G
  74.         - Extended Mode = Enable
    1 c0 _) b! J3 B
  75.         - Asynchronous Wait = Disable */. c0 F' x0 d2 Q; l& z4 V
  76.   FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;& v* }! J9 z( N3 @3 ~, c) [& ^# x
  77.   FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;  //hy@" G+ k1 c& H* u/ V5 p+ G" @# A. [
  78. // FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Enable;  //hy@ % P- h  P: W, H, B, V! m! U. E( z- G- f
  79. // FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;//FSMC_MemoryType_NOR;//FSMC_MemoryType_SRAM;//
      o& P5 e. P3 T9 I6 J
  80.   FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;//FSMC_MemoryType_SRAM;//</font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;! I$ w1 r6 S; ^- v
  81.   FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
    . z  o8 Q2 f$ h9 C5 T# {, I
  82. //  FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
    6 p( q& Z( ?4 W3 Q
  83.   FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
    ( u3 j+ T' O! X  t2 S
  84.   FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;- P1 w: h/ n6 |1 g! E) M
  85.   FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;" ~' h7 M! k" P9 m7 a: _5 U
  86.   FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
    & a- l& e  F% V( S
  87.   FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;$ O  X; q- P* l  C
  88.   FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
    / T8 {; O0 O; B' Z  L& c+ ?
  89.   FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;  D, g% d! i5 M# D
  90.   FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;; K2 o8 r' {2 C, T+ C
  91.   FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;3 d. ~6 p# l+ z$ s6 F$ [
  92.   FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
    ( Q1 X4 m9 f& e& b: ]& M: W. C' H
  93.   /* BANK 1 (of NOR/SRAM Bank 1~4) is enabled */3 z+ O$ p9 E' A" d, m# B0 M
  94.   FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
    . l! G! R5 a' O# j' ^3 F, O& r2 q
  95. }</font></div><font face="Tahoma" color="#000000">
    7 W1 e. ?4 G: K! A( Z3 _" k
  96. </font><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">/**
    : }* l4 u  r6 K) h9 _% f1 G- k8 E& ~
  97.   * @brief  Initializes the LCD.
    - p+ h9 X" ]7 |: d1 c
  98.   * @param  None
    " B+ y* P3 Y) J& t
  99.   * @retval None# Z; i* z# f$ |! U4 M4 _7 P
  100.   */+ j/ m. a4 r7 U. G! [* W
  101. void IzLCDDisplayInit(void)
    . I5 q3 b2 m# _" z$ t
  102. {</font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">/* Configure the FSMC Parallel interface -------------------------------------*/
    ' N0 p, j9 O* o6 N# s  O
  103.   LCDFSMCConfig();/ a2 q6 y4 ^% @: f

  104. 1 F, m7 i+ H* h  Y3 M& e- J  `
  105.   DelayLoop(5); /* delay 50 ms */
    - _4 ?9 \6 X4 ?* P2 y- {+ P9 P
  106.   //LCD_SetFont(&LCDDEFAULTFONT);
    9 n. h+ N8 ]+ \# p
  107.   LCDSetFont(&LCDDEFAULTFONT);
    , z$ T8 Z6 D1 M/ ]
  108.   InitSSD1963();</font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">
    ( \- q6 t/ K  V1 R, j
  109. }</font></div>
复制代码
9 P( j4 z- f5 ^- b6 Q
收藏 评论0 发布时间:2022-1-29 01:04

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版