作者:蓝色星宇

转自:http://www.cnblogs.com/glguan/archive/2011/12/09/2282472.html

STM32+SSD1963+TFT(FSMC)已调试通过的代码。

其中要注意的两点:

1.外部访问地址需加volatile,否则keil MDK 优化会将部分代码优化掉,造成错误。

 volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。 
2. FSMC内部地址和外部实际地址有区别。如A18连线对应内部地址是A19。

// ssd1963 #d/c   -------- STM32F103VCT6 A18

#define LCD_COMM_ADD  *((volatile u16 *)0X60000000)
 #define LCD_DATA_ADD  *((volatile u16 *)0X60080000)

#define WriteCommand(cmd) {LCD_COMM_ADD = cmd;}
 #define WriteData(data)  {LCD_DATA_ADD = data;}

void LCDFSMCConfig(void)
{
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;
  GPIO_InitTypeDef GPIO_InitStructure;
/*-- FSMC Configuration ------------------------------------------------------*/

/* Enable FSMC, GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |
             RCC_APB2Periph_AFIO, ENABLE);

/*===========GPIO For the LCD_Bus========================*/ 
  /*  Data /Address lines configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
          GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 |
          GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOE, &GPIO_InitStructure);

/*  Address lines configuration: A18*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
  GPIO_Init(GPIOD, &GPIO_InitStructure);

/*===========GPIO For the Control========================*/
 /*!< NOE and NWE configuration */ 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5;
 
 GPIO_Init(GPIOD, &GPIO_InitStructure);
 
 /*!< NE1 configuration */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
 
 /*!< NADV configuration */
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
// GPIO_Init(GPIOB, &GPIO_InitStructure);
 #ifdef LCD_USE_TE
 /*TE :busy*/
   GPIO_InitStructure.GPIO_Pin = GPIO_PIN_LCD_TE;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
   GPIO_Init(GPIO_PORT_LCD_TE, &GPIO_InitStructure);
    #endif
 /*!< NBL0, NBL1 configuration */
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
// GPIO_Init(GPIOE, &GPIO_InitStructure);
  GPIO_SetBits(GPIOD, GPIO_Pin_7);   //CS=1
  GPIO_SetBits(GPIOD, GPIO_Pin_14| GPIO_Pin_15 |GPIO_Pin_0 | GPIO_Pin_1);   
  GPIO_SetBits(GPIOE, GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10);  
  GPIO_ResetBits(GPIOE, GPIO_Pin_0);
  GPIO_ResetBits(GPIOE, GPIO_Pin_1);   //RESET=0
  GPIO_SetBits(GPIOD, GPIO_Pin_4);      //RD=1
  GPIO_SetBits(GPIOD, GPIO_Pin_5);   //WR=1    
 /*-- FSMC Configuration ------------------------------------------------------*/
 
/*----------------------- SRAM Bank 1----------------------------------------*/
  /* FSMC_Bank1_NORSRAM1 configuration */
  p.FSMC_AddressSetupTime = 0x02;//1;
  p.FSMC_AddressHoldTime = 0x00;//0;
  p.FSMC_DataSetupTime = 0x05;//5//2;
  p.FSMC_BusTurnAroundDuration = 0;
  p.FSMC_CLKDivision = 0;
  p.FSMC_DataLatency = 0;
  p.FSMC_AccessMode = FSMC_AccessMode_B;//FSMC_AccessMode_A;
  /* Color LCD configuration ------------------------------------
     LCD configured as follow:
        - Data/Address MUX = Enable
        - Memory Type = SRAM
        - Data Width = 16bit
        - Write Operation = Enable
        - Extended Mode = Enable
        - Asynchronous Wait = Disable */
  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;  //hy@
 // FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Enable;  //hy@ 
 // FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;//FSMC_MemoryType_NOR;//FSMC_MemoryType_SRAM;//
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;//FSMC_MemoryType_SRAM;//

FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
//  FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; 
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); 
  /* BANK 1 (of NOR/SRAM Bank 1~4) is enabled */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}

/**
  * @brief  Initializes the LCD.
  * @param  None
  * @retval None
  */
void IzLCDDisplayInit(void)
{

/* Configure the FSMC Parallel interface -------------------------------------*/
  LCDFSMCConfig();
 
  DelayLoop(5); /* delay 50 ms */
  //LCD_SetFont(&LCDDEFAULTFONT);
  LCDSetFont(&LCDDEFAULTFONT);
  InitSSD1963();

}

STM32 FSMC TFT LCD相关推荐

  1. stm32 驱动 TFT LCD

    LCD/LCM的基本概念 液晶显示器(Liquid Crystal Display: LCD)的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状 ...

  2. 8、STM32 FSMC驱动LCD(ILI93xx)

    本文使用FSMC驱动LCD显示,关于建议先看之前的7.STM32 FSMC驱动SRAM一文 硬件连接: 一.CubeMx配置FSMC驱动LCD ILI93xx 此章只为快速使用LCD,不涉及原理.指令 ...

  3. STM32 FSMC接口驱动4.3寸TFT LCD屏

    STM32 FSMC接口驱动4.3寸TFT LCD屏 STM32的FSMC接口是并行总线接口,可以用于驱动存储芯片如FLASH/SRAM等,也可以用于驱动并口LCD屏. 这里以STM32F103VET ...

  4. STM32 驱动4.3寸TFT LCD 触摸屏

    STM32 驱动4.3寸TFT LCD 触摸屏 STM32的FSMC接口是并行总线接口,可以用于驱动存储芯片如FLASH/SRAM等,也可以用于驱动并口LCD屏.触摸屏是在显示屏上覆盖一层触摸感应的外 ...

  5. STM32 FSMC学习笔记+补充(LCD的FSMC配置)

    STM32 FSMC学习笔记+补充(LCD的FSMC配置) STM32 FSMC学习笔记 STM32 FSMC的用法--LCD 转载于:https://www.cnblogs.com/LittleTi ...

  6. STM32 FSMC 16位寻址 地址移位的解读

    一. 当 Bank1 接的是 16 位宽度存储器的时候:HADDR[25:1] FSMC_A[24:0]. 当 Bank1 接的是 8 位宽度存储器的时候:HADDR[25:0] FSMC_A[2 ...

  7. STM32 FSMC 驱动16脚12864lcd液晶显示屏

    写在前面 在学习了两天STM32 FSMC后,总算是拿这个东西做了第一个应用,关于FSMC是什么东西怎么用,CSDN中有很多介绍,但是,估计新手刚看都是一头雾水(我就是),不过,你仍必须反反复复地看, ...

  8. 单片机设计_车牌识别系统(STM32 OV7670 TFT)

    想要更多项目私wo!!! 一.电路设计 此系统由STM32最小系统开发板.TFT液晶显示模块和OV7670摄像头模块组成的. 基于STM32+OV7670+TFT液晶屏. 车牌识别系统原理图 二.运行 ...

  9. DDR200T TFT - LCD 显示屏 显示图片 NucleiStudio 蜂鸟E203 详细教程 RISC-V

    DDR200T TFT - LCD 显示屏 显示图片 NucleiStudio 蜂鸟E203 详细教程 RISC-V 前言 IMG2LCD软件生成RGB565格式图片 使用取模软件对图片取模 实验结果 ...

最新文章

  1. Powershell AWS 自动化管理 (6) - IAM
  2. django之ORM介绍与基本用法(一)
  3. sap转换成基本订单单位
  4. 【BZOJ-2938】病毒 Trie图 + 拓扑排序
  5. 手把手教你将pyqt程序打包成exe(2)
  6. 【在线报表设计】提升报表外观的15个技巧
  7. 13 张图带你学懂 Kubernetes Service(转载)
  8. mysql报错Attempted to open a previously opened tablespace的解决办法
  9. Elasticsearch--进阶-filter过滤---全文检索引擎ElasticSearch工作笔记014
  10. Game HDU - 5242 树链思想
  11. git删除中间某个commit
  12. v-if与v-show
  13. hive udaf_Hive 混合函数 UDTF UDF UDAF详解
  14. pixhawk position_estimator_inav.cpp再分析
  15. 移动硬盘与电脑连接后 计算机中找不到,移动硬盘连接电脑后不显示盘符怎么办...
  16. 为什么在很多应用中常采用正态分布/高斯分布、中心极限定理
  17. AWTRIX像素灯DIY制作过程
  18. 【转】十大30秒内即可理解的科学理论
  19. Android屏幕刷新——源码分析
  20. npm start运行成功界面,及网址运行界面

热门文章

  1. MySQL删除行之后空间没有被释放
  2. 【AWS云从业者基础知识笔记】——模块7:监控和分析
  3. ubuntu18.04 RoboCup实物
  4. unity 3d如何隐藏物体
  5. 如何在远程计算机上播放音乐,如何用iPhone远程遥控电脑播放音乐教程
  6. 第一周校内OI模拟赛总结(day1day2)
  7. Appium-Long Press(长按)
  8. Linux红帽RHEL 7/8 系统重置root用户密码
  9. 8421码5421码2421码和余3码的区别
  10. 转:SQL Server:获取当前日期是本月的第几周