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

【经验分享】STM32 FSMC TFT LCD

[复制链接]
STMCU小助手 发布时间:2022-1-29 01:04
STM32+SSD1963+TFT(FSMC)已调试通过的代码。
其中要注意的两点:
1.外部访问地址需加volatile,否则keil MDK 优化会将部分代码优化掉,造成错误。
 volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。 " o9 p  q2 K" i& _: d! }, v% p
2. FSMC内部地址和外部实际地址有区别。如A18连线对应内部地址是A19。
  1. <div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">// ssd1963 #d/c   -------- STM32F103VCT6 A18& }5 T4 [) ^9 A- |( R/ \4 y3 _' l
  2. </font></div><font face="Tahoma" color="#000000">
    9 C: z  H% |& u
  3. </font><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">#define LCD_COMM_ADD  *((volatile u16 *)0X60000000)
    - O/ o" C! c' s0 L2 k0 H% z$ G4 R
  4. #define LCD_DATA_ADD  *((volatile u16 *)0X60080000)
    ; }, H' H- i$ f
  5. </font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000"> #define WriteCommand(cmd) {LCD_COMM_ADD = cmd;}$ X' s: p0 W1 W  H/ C; F, u
  6. #define WriteData(data)  {LCD_DATA_ADD = data;}</font></div><font face="Tahoma" color="#000000">
    # @6 C+ j( r: _1 y5 F# [* s  e
  7. </font><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">void LCDFSMCConfig(void)' ?( A: C6 L# L
  8. {
    4 p# B3 _  M. f) ]' r# \! Y
  9.   FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
    9 t8 M+ D+ n* X) S" Y; s1 {9 T
  10.   FSMC_NORSRAMTimingInitTypeDef  p;
    ( ]6 c' B$ u: x  B4 q9 H
  11.   GPIO_InitTypeDef GPIO_InitStructure;0 \1 K8 ?+ _, e+ s
  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 */
    . D6 E' Y2 X& l  T, Q0 S
  13.   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
    7 D3 W7 ?: `  j3 Q& o
  14.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |
    0 @: G9 {6 o) v% X, 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========================*/
    " D  M3 y" E- x
  16.   /*  Data /Address lines configuration */: m7 \1 D" K0 A* [; y
  17.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
    " G) C: D0 O' @5 y9 w
  18.           GPIO_Pin_14 | GPIO_Pin_15;
    ' C5 N2 u  i* ?+ t  x/ m
  19.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;5 \3 H' ?0 d2 L
  20.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    7 Y! i" m* W8 A! ~+ t" u4 m& k, W
  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 |
    ; I" [! J) g  |# s8 C' r9 C% G) Q
  22.           GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
    / i  s0 R) A% t9 M
  23.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;( e8 H2 ?3 e* s1 K
  24.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;. T9 [0 _: I& E& s% Z; @4 G( o1 a
  25.   GPIO_Init(GPIOE, &GPIO_InitStructure);</font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">  /*  Address lines configuration: A18*/9 D; f8 Y  e1 ~; ^3 @  e
  26.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;8 G( [4 V9 d1 s
  27.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    0 c. }1 N  c0 v# ^; b( g( u
  28.   GPIO_Init(GPIOD, &GPIO_InitStructure); </font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">  /*===========GPIO For the Control========================*/! ~9 O0 [. p3 X4 I2 A* Y) [
  29. /*!< NOE and NWE configuration */
    + Y5 x. G* [5 K7 x" x4 g+ Q
  30. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5;
    5 }9 Y. j' |6 a& e2 [

  31. . s, [: r0 q: z& R
  32. GPIO_Init(GPIOD, &GPIO_InitStructure);
    $ C2 n- H  f8 O) N
  33. $ T) A, [* ~3 Y% _+ `  m9 v
  34. /*!< NE1 configuration *// o+ y2 u1 Q: d# Q0 I) x, N$ v4 ]
  35.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;/ H! p; }1 Z2 j# i
  36.     GPIO_Init(GPIOD, &GPIO_InitStructure);
    # t! c/ M! y1 ]

  37. 4 w3 z9 c3 \1 P
  38. /*!< NADV configuration */" c! F6 z; \; T! i* N. p( d
  39. // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    7 ^$ ?$ L2 ^. H& `
  40. // GPIO_Init(GPIOB, &GPIO_InitStructure);
    / t" w% r* U2 T" h: v
  41. #ifdef LCD_USE_TE+ {5 l* ^' k3 C4 e  W# X
  42. /*TE :busy*/
    3 }4 B9 U4 ?# ]
  43.    GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LCD_TE;
    " {9 A2 g4 P: |  X
  44.    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    0 s% x& z/ k8 o0 q8 U6 ]+ \
  45.    GPIO_Init(GPIO_PORT_LCD_TE, &GPIO_InitStructure);
    5 [3 ^6 b# W, n3 b8 F- Q) E$ H
  46.     #endif
    ! {4 t" m. n7 V: S6 X! T! ?
  47. /*!< NBL0, NBL1 configuration */7 e5 c% X$ R" o4 u; C+ N, f7 M' I
  48. // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;; k4 `9 [) x6 a) Z: A+ h, o- X
  49. // GPIO_Init(GPIOE, &GPIO_InitStructure);
    $ C9 J+ C! z6 Y/ [# ]! j* K
  50.   GPIO_SetBits(GPIOD, GPIO_Pin_7);   //CS=1
    5 o5 h$ z1 n, k' Y, P
  51.   GPIO_SetBits(GPIOD, GPIO_Pin_14| GPIO_Pin_15 |GPIO_Pin_0 | GPIO_Pin_1);   $ `! x& P" j8 [7 E8 }0 G* u% a
  52.   GPIO_SetBits(GPIOE, GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10);  
    - }  s  I" C0 d
  53.   GPIO_ResetBits(GPIOE, GPIO_Pin_0);
    ) @0 w) B0 N/ ?4 H- Y
  54.   GPIO_ResetBits(GPIOE, GPIO_Pin_1);   //RESET=0: s2 h$ b% P" L
  55.   GPIO_SetBits(GPIOD, GPIO_Pin_4);      //RD=1: `, ?9 o' g$ ^" g3 {  Q1 P
  56.   GPIO_SetBits(GPIOD, GPIO_Pin_5);   //WR=1    1 _7 Y% N% n# p( ?* @$ h" c
  57. /*-- FSMC Configuration ------------------------------------------------------*/
    3 c2 X9 ]7 [' v+ I+ i" W4 G+ d

  58. " M' c) O% g% G9 }/ Q
  59. /*----------------------- SRAM Bank 1----------------------------------------*/
    1 |1 l1 l0 }9 V: C
  60.   /* FSMC_Bank1_NORSRAM1 configuration */7 w3 ]) X9 D2 p% ^3 A* B
  61.   p.FSMC_AddressSetupTime = 0x02;//1;* ~' j1 I2 ]3 q  l) h- Q
  62.   p.FSMC_AddressHoldTime = 0x00;//0;
    6 o8 k* H$ v3 {+ m! W
  63.   p.FSMC_DataSetupTime = 0x05;//5//2;
    " N% i2 G; a+ Z' b' \2 o
  64.   p.FSMC_BusTurnAroundDuration = 0;
    2 n. u6 d; V4 i& Y. ?
  65.   p.FSMC_CLKDivision = 0;: M5 @. J' a! e
  66.   p.FSMC_DataLatency = 0;
    2 {3 r" a  m# z9 N8 r! B2 `3 U1 t
  67.   p.FSMC_AccessMode = FSMC_AccessMode_B;//FSMC_AccessMode_A;
    ! _0 d" ?2 V2 ^( r
  68.   /* Color LCD configuration ------------------------------------
      s: }# N9 y% Y: M  i4 \% i
  69.      LCD configured as follow:
    ( i  g" N0 A3 \, H0 v
  70.         - Data/Address MUX = Enable
    * N* r$ h8 n1 P$ e2 d! |; l
  71.         - Memory Type = SRAM# w0 j$ p1 ~2 N$ V( b. g: e5 \
  72.         - Data Width = 16bit
    ; S9 J2 [4 P6 v4 O
  73.         - Write Operation = Enable
    7 u. X5 z, O% l, w
  74.         - Extended Mode = Enable/ b" ~7 {! ^) j; q5 s* I
  75.         - Asynchronous Wait = Disable */# G" `5 L# `$ s8 s# O+ _8 D
  76.   FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
    6 p* E$ f) e) v) {, ^- I
  77.   FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;  //hy@
    7 n# ?1 o! u* f8 h& M: v% p/ B
  78. // FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Enable;  //hy@ 2 B- b  e- O' r1 T# D3 O3 u6 o4 v
  79. // FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;//FSMC_MemoryType_NOR;//FSMC_MemoryType_SRAM;//
    0 e6 m& a# Q' c7 `
  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;( g; v9 J9 R+ M! k& Q) N& g
  81.   FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
    3 s( k7 i9 H  _( o5 O6 \* x
  82. //  FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
    - t4 `$ N/ v6 k, T  ?  j* n
  83.   FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
    + n$ F4 ^$ g% V
  84.   FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;7 G" Y$ f( F/ ^9 w- H0 Z
  85.   FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
    0 C! m4 U+ K: w* |" H
  86.   FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;7 Q& g8 {. {& w
  87.   FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;! r% u3 n( A. O( X: n. }
  88.   FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
    - \& c( Y* Z: [9 s5 D2 g* T
  89.   FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;0 q9 k) e4 P  y) Z/ F/ y- O
  90.   FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;2 q% l* t: O- y" m" ^0 u4 v
  91.   FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;  ]% q% e' h' Z% [' t  h* {
  92.   FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); & s! c4 V! f+ R* d5 _0 E
  93.   /* BANK 1 (of NOR/SRAM Bank 1~4) is enabled */
    8 R% X- n* k. c4 _2 q) f
  94.   FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);- v- e" _& D" z0 r' V
  95. }</font></div><font face="Tahoma" color="#000000">
    - {/ i& j9 F, G/ A$ v! W. m9 o3 ?
  96. </font><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">/**9 z: @3 s( B; w
  97.   * @brief  Initializes the LCD.
    1 p  ^1 ]! z& e9 I- r$ u
  98.   * @param  None/ B$ J; l( L4 H% Y6 N+ Y9 T
  99.   * @retval None
    # }' A+ z  ^. ?( @* F% z; C% w8 I
  100.   */
    * h- q  j  Q0 A3 H
  101. void IzLCDDisplayInit(void)+ I' D/ Y; T. F! a7 T. [% }+ \4 a$ U
  102. {</font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">/* Configure the FSMC Parallel interface -------------------------------------*/% F4 G' m% j/ d2 O* x' k. z
  103.   LCDFSMCConfig();2 D* r. E- R7 S2 `

  104. # k/ Q9 {! S' R8 w  u
  105.   DelayLoop(5); /* delay 50 ms */
    ' M2 e. W( R8 B- U/ f
  106.   //LCD_SetFont(&LCDDEFAULTFONT);: i/ l* W& P9 a2 _
  107.   LCDSetFont(&LCDDEFAULTFONT);! e/ M+ f& {+ Y9 E+ E0 z
  108.   InitSSD1963();</font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">
    & U. }* B9 K0 h+ B
  109. }</font></div>
复制代码

  n* O' Z* V/ u3 s; A7 p6 ?
收藏 评论0 发布时间:2022-1-29 01:04

举报

0个回答

所属标签

相似分享

官网相关资源

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