STM32 FSMC TFT LCD

发布者:Turquoise最新更新时间:2018-09-20 来源: eefocus关键字:STM32  FSMC  TFT  LCD 手机看文章 扫描二维码
随时随地手机看文章

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 引用地址:STM32 FSMC TFT LCD

上一篇:为STM32移植FATFS,读取SD卡上FAT12/16/32文件系统
下一篇:STM32 USB IAP 步骤

推荐阅读最新更新时间:2024-03-16 16:14

stm32之PVD可编程电压监测器(掉电保存数据)
前言:stm32系列提供了可编程电压检测器PVD,它是实时检测VDD的电压,当检测到电压低于或者高于PVD设置的阈值时,会想内核产生一个PVD中断(EXTI线中断)以使内核在复位前进行紧急处理。该电压阈值可通过PWR_CSR设置。 PVD可配置8个等级: 代码设计: #include stm32f10x.h #include stdio.h static void EXTI_Configuration(void); static void PVD_NVIC_Configuration(void); static void USART1_Config(void); static void Delay(__IO u
[单片机]
<font color='red'>stm32</font>之PVD可编程电压监测器(掉电保存数据)
Stm32 iic初始化介绍
1.iic介绍: iic (Inter_Integrated Circuit)集成电路总线,是一种二线制的同步串行总线,一共有着SCL(时钟线)和SDA(数据线) 2.配置步骤: 1 :iic的初始化 按照对GPIO口的设置来配置iic相关的端口(这里以Stm32F103rc为例) 注:可以使用定义的方法先定义相应端口 //IO方向设置 #define SDA_IN() {GPIOC- CRH&=0XFFFF0FFF;GPIOC- CRH|=8 12;}//1000 上拉输入 #define SDA_OUT() {GPIOC- CRH&=0XFFFF0FFF;GPIOC- CRH|=3 12;}//0011
[单片机]
<font color='red'>Stm32</font> iic初始化介绍
stm32f2xx与stm32f10x在正交编码器应用定时器初始化中的区别
注意: 如果stm32f2xx系列上面的网址的代码要做适当修改。 以下说重点:stm32f2xx系列,在调试中对GPIO的初始化,切记选择GPIO_Mode_AF模式,即端口复用。 随后,要做端口映射处理,即调用:GPIO_PinAFConfig()函数。 这2个方式不选择,timer是不会有反应的 本人是stm32f207,花了4天惨痛代价。 以下贴代码: /* Private define ------------------------------------------------------------*/ #define ENCODER_TIMER TIM3 //
[单片机]
STM32掌机教程5,程序框架,随机,加命与升级
随机生成地鼠   随机数是游戏里边非常重要的组成部分,贪吃蛇随机刷新下一个食物,俄罗斯方块随机生成下一个方块,大富翁扔骰子,都是随机的。甚至微信群红包,金额也是随机的。正是因为这些事件不可预测,游戏才充满趣味性。我们地鼠的生成,当然也要随机。   然而,计算机产生的随机数,都是“伪随机”。伪,指的是说它是随机的,但是却都是有规律可循的。对于C语言,可以直接调用一个随机数生产函数srand()。但是这个函数需要种子。随机数是由随机种子根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就不会变。也就是说,伪随机数也是某种对应映射的产物,而这个自变量就是种子。   如果你每次调用srand()时都提
[单片机]
GSM/GPS车载系统中LCD中文显示的编程方法
  目前,在许多行业(如公安、公交和银行等)中,GPS车辆调度系统已经相当普及,GPS车辆调度系统的相关研究也成为业界的一大热门课题。本文LCD中文显示的一种编码方法是笔者在设计GPS车载终端通信系统时使用的方法。   1 问题的提出   一个GPS车辆终端在硬件上主要包括以下几部分:   GPS接收模块,用于接收GPS卫星发回的GPS定位信号。   GSM通信模块,用于实现终端模块与监控中心的无线通信。   中央控制单元,对信号接收、短消息通信及人机交互等工作进行控制。   键盘、显示单元,用于人机交互,显示监控中心的命令。   在GPS车辆终端系统的开发过程中,出于系统功能和产品成本的综合考虑,大多数设计者都会选
[单片机]
GSM/GPS车载系统中<font color='red'>LCD</font>中文显示的编程方法
各品牌力推LED当十一主角 LCD下岗有多远
      五一彩电圈的热销记忆似乎仍未褪去,转眼十一也已不远,记者在对连锁卖场的采访中了解到,从各品牌的产品布局来看,LED毫无疑问地会成为十一黄金周的绝对主角,LED高调的背后是否意味着LCD即将低调下岗?       台前:品牌商力捧LED       眼下已进入八月底,尽管距离十一彩电黄金大战还有一个多月,但各品牌已开始进入战略部署阶段,记者在南京国美电器采访时了解到,今年十一LED的销量占比突破实实在在的40%应该不在话下,从目前各品牌的出样布局来看,LED产品已占到所有出样产品的6成以上。老字号长虹更是率先发起了大规模的LED普及风暴,以实实在在的优惠价格来刺激LED销量。       此外,针对老百姓最
[家用电子]
stm32驱动ad9854程序分享_ad9854构成信号发生器电路
AD9854概述 AD9854数字合成器是高集成度的器件,它采用先进的DDS技术,片内整合了两路高速、高性能正交D/A转换器通过数字化编程可以输出I、Q两路合成信号。在高稳定度时钟的驱动下,AD9854将产生一高稳定的频率、相位、幅度可编程的正弦和余弦信号,作为本振用于通信,雷达等方面。AD9854的DDS核具有48位的频率分辨率(在300M系统时钟下,频率分辨率可达1uHZ)。输出17位相位截断保证了良好的无杂散动态范围指标。AD9854允许输出的信号频率高达150MHZ,而数字调制输出频率可达100MHZ。通过内部高速比较器正弦波转换为方波输出,可用作方便的时钟发生器。 ad9854优势和特点 00MHz内部时钟速率
[单片机]
<font color='red'>stm32</font>驱动ad9854程序分享_ad9854构成信号发生器电路
STM32 IAR无法调试下载bin文件到芯片
自己从21IC活动1元购得1块STM32F302R8T6的Nucleo开发板.加上近排看了到了国人自己实现的RT-THREAD系统,于是很想在板子上跑跑这个系统. 由于RT-THREAD无现成的IAR工程,官网指导的PDF主要是用Keil实现建立工程,由于我习惯STM8学习就是使用IAR。因此,决心用IAR来建立RT-THREAD工程. 那么按照STM8S的方式建立了STM32的工程,按照RT-THREAD官网相关的指导,加上自己的一些分析,好不容易编译过去了. 但按IAR的下载按钮,会弹出如下错误框 在一些QQ群上询问了一下,有人说芯片选错了.其实也许芯片选错也会有这样的问题,但是我用官网的
[单片机]
<font color='red'>STM32</font> IAR无法调试下载bin文件到芯片
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved