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

【经验分享】STM32 FSMC TFT LCD

[复制链接]
STMCU小助手 发布时间:2022-1-29 01:04
STM32+SSD1963+TFT(FSMC)已调试通过的代码。
其中要注意的两点:
1.外部访问地址需加volatile,否则keil MDK 优化会将部分代码优化掉,造成错误。
 volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。
2. FSMC内部地址和外部实际地址有区别。如A18连线对应内部地址是A19。
  1. <div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">// ssd1963 #d/c   -------- STM32F103VCT6 A18
  2. </font></div><font face="Tahoma" color="#000000">
  3. </font><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">#define LCD_COMM_ADD  *((volatile u16 *)0X60000000)
  4. #define LCD_DATA_ADD  *((volatile u16 *)0X60080000)
  5. </font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000"> #define WriteCommand(cmd) {LCD_COMM_ADD = cmd;}
  6. #define WriteData(data)  {LCD_DATA_ADD = data;}</font></div><font face="Tahoma" color="#000000">
  7. </font><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">void LCDFSMCConfig(void)
  8. {
  9.   FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  10.   FSMC_NORSRAMTimingInitTypeDef  p;
  11.   GPIO_InitTypeDef GPIO_InitStructure;
  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 */
  13.   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
  14.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |
  15.              RCC_APB2Periph_AFIO, ENABLE);</font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">/*===========GPIO For the LCD_Bus========================*/
  16.   /*  Data /Address lines configuration */
  17.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
  18.           GPIO_Pin_14 | GPIO_Pin_15;
  19.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  20.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  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 |
  22.           GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  23.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  24.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  25.   GPIO_Init(GPIOE, &GPIO_InitStructure);</font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">  /*  Address lines configuration: A18*/
  26.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  27.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  28.   GPIO_Init(GPIOD, &GPIO_InitStructure); </font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">  /*===========GPIO For the Control========================*/
  29. /*!< NOE and NWE configuration */
  30. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5;

  31. GPIO_Init(GPIOD, &GPIO_InitStructure);

  32. /*!< NE1 configuration */
  33.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  34.     GPIO_Init(GPIOD, &GPIO_InitStructure);

  35. /*!< NADV configuration */
  36. // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  37. // GPIO_Init(GPIOB, &GPIO_InitStructure);
  38. #ifdef LCD_USE_TE
  39. /*TE :busy*/
  40.    GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LCD_TE;
  41.    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  42.    GPIO_Init(GPIO_PORT_LCD_TE, &GPIO_InitStructure);
  43.     #endif
  44. /*!< NBL0, NBL1 configuration */
  45. // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
  46. // GPIO_Init(GPIOE, &GPIO_InitStructure);
  47.   GPIO_SetBits(GPIOD, GPIO_Pin_7);   //CS=1
  48.   GPIO_SetBits(GPIOD, GPIO_Pin_14| GPIO_Pin_15 |GPIO_Pin_0 | GPIO_Pin_1);   
  49.   GPIO_SetBits(GPIOE, GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10);  
  50.   GPIO_ResetBits(GPIOE, GPIO_Pin_0);
  51.   GPIO_ResetBits(GPIOE, GPIO_Pin_1);   //RESET=0
  52.   GPIO_SetBits(GPIOD, GPIO_Pin_4);      //RD=1
  53.   GPIO_SetBits(GPIOD, GPIO_Pin_5);   //WR=1   
  54. /*-- FSMC Configuration ------------------------------------------------------*/

  55. /*----------------------- SRAM Bank 1----------------------------------------*/
  56.   /* FSMC_Bank1_NORSRAM1 configuration */
  57.   p.FSMC_AddressSetupTime = 0x02;//1;
  58.   p.FSMC_AddressHoldTime = 0x00;//0;
  59.   p.FSMC_DataSetupTime = 0x05;//5//2;
  60.   p.FSMC_BusTurnAroundDuration = 0;
  61.   p.FSMC_CLKDivision = 0;
  62.   p.FSMC_DataLatency = 0;
  63.   p.FSMC_AccessMode = FSMC_AccessMode_B;//FSMC_AccessMode_A;
  64.   /* Color LCD configuration ------------------------------------
  65.      LCD configured as follow:
  66.         - Data/Address MUX = Enable
  67.         - Memory Type = SRAM
  68.         - Data Width = 16bit
  69.         - Write Operation = Enable
  70.         - Extended Mode = Enable
  71.         - Asynchronous Wait = Disable */
  72.   FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  73.   FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;  //hy@
  74. // FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Enable;  //hy@
  75. // FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;//FSMC_MemoryType_NOR;//FSMC_MemoryType_SRAM;//
  76.   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;
  77.   FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  78. //  FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
  79.   FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  80.   FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  81.   FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  82.   FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  83.   FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  84.   FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  85.   FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  86.   FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  87.   FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
  88.   FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
  89.   /* BANK 1 (of NOR/SRAM Bank 1~4) is enabled */
  90.   FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
  91. }</font></div><font face="Tahoma" color="#000000">
  92. </font><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">/**
  93.   * @brief  Initializes the LCD.
  94.   * @param  None
  95.   * @retval None
  96.   */
  97. void IzLCDDisplayInit(void)
  98. {</font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">/* Configure the FSMC Parallel interface -------------------------------------*/
  99.   LCDFSMCConfig();

  100.   DelayLoop(5); /* delay 50 ms */
  101.   //LCD_SetFont(&LCDDEFAULTFONT);
  102.   LCDSetFont(&LCDDEFAULTFONT);
  103.   InitSSD1963();</font></div><div align="left"><font style="font-size: 13px" face="Tahoma" color="#000000">
  104. }</font></div>
复制代码

收藏 评论0 发布时间:2022-1-29 01:04

举报

0个回答

所属标签

相似分享

官网相关资源

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