历史上的今天
返回首页

历史上的今天

今天是:2024年09月20日(星期五)

正在发生

2018年09月20日 | STM32 FSMC TFT LCD

2018-09-20 来源:eefocus

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();


}


推荐阅读

史海拾趣

Cornerstone Sensors公司的发展小趣事

品质是Cornerstone Sensors的生命线。公司建立了严格的质量管理体系,从原材料采购、生产制造到产品测试等各个环节都进行严格把控。同时,公司还注重品牌建设,通过参加行业活动、发布技术文章、提供专业培训等方式提升品牌影响力。Cornerstone Sensors的产品逐渐成为行业内公认的高品质代表,赢得了广泛的口碑和市场份额。

EUCHNER公司的发展小趣事

EUCHNER公司一直是一个家族企业,其企业精神和创新精神在家族成员中得以传承。随着公司的发展,EUCHNER逐渐扩张其业务范围,不仅在欧洲市场建立了稳固的地位,还开始进军全球市场。公司通过不断的技术创新和产品升级,逐渐在工控配件领域建立了良好的声誉。

CETC公司的发展小趣事

为了进一步提升公司的国际影响力,CETC开始积极布局海外市场。公司先后在美国、欧洲等地设立了研发中心和分支机构,与当地企业开展深度合作,共同研发适应市场需求的产品。同时,CETC还积极参加国际电子展会和论坛,展示公司的最新技术和产品,吸引了众多国际客户的关注。通过这些努力,CETC成功打开了海外市场的大门,为公司的长远发展注入了新的动力。

E-San Electronic Co Ltd公司的发展小趣事

随着市场的不断变化和消费者需求的升级,E-San Electronic Co Ltd意识到技术创新是企业持续发展的关键。公司投入大量资金和资源,建立了自己的研发团队,并与多所高校和研究机构建立了合作关系。经过数年的努力,公司成功研发出了一系列具有自主知识产权的核心技术,这些技术不仅提升了产品的性能和质量,也为企业赢得了更多的市场份额。

Easy Magnet Corp公司的发展小趣事

为了拓宽市场渠道,Easy Magnet Corp公司积极寻求与国际知名企业的合作。通过与国外企业的技术交流和合作研发,公司不仅获得了先进的生产技术和管理经验,还成功地将产品推向了国际市场。这一过程中,公司不仅提升了品牌影响力,还增强了自身的研发实力和市场竞争力。

Faraday Electronics Inc公司的发展小趣事

在Faraday Electronics Inc的发展历程中,企业文化的塑造起到了至关重要的作用。公司一直注重培养员工的创新精神和团队合作精神,鼓励员工积极参与技术创新和市场拓展。同时,公司还注重营造积极向上的工作氛围和企业文化,让员工在工作中感受到归属感和成就感。这种积极向上的企业文化不仅激发了员工的工作热情和创新精神,还为公司的发展提供了源源不断的动力。

请注意,以上故事均为虚构,仅用于展示电子行业公司可能的发展路径和故事类型。

问答坊 | AI 解惑

调查一下 大家喜欢使用什么类型的单片机

我们下面想搞一个单片机的自制活动,希望大家能够告知,希望使用什么样的单片机,以便我们有针对性地开展这个活动,谢谢大家支持。还有一点,大家针对arm7的学习热情高么?网上有u-linuk的自制资料,如果大家学习热情比较高,我们也可以搞一个那样 ...…

查看全部问答>

protel设计经验谈

很好的资料大家下吧…

查看全部问答>

建议出台坛规

各位坛友:        针对大量坛友只潜水,不冒泡。我们要制定坛规,对长期潜水的坛友,采取重典!…

查看全部问答>

求一MCU自断电电路

来自EEWORLD合作群:499581  群主:wangkj…

查看全部问答>

可轻易检测短路、开路和不良电源连接的方法

设计人员为远程工业应用产生一个清晰的信号时,常常需要面对一大堆挑战,而当中他们必须能够为系统检测出短路、开路和不良电源连接的情况。一般来说,设计人员都会使用额外的分立电路来完成这个任务,但其实除了这个方法以外,在芯片上加上诊断功能 ...…

查看全部问答>

djyos0.4.0版发布了

0.4.0版本的看点: 1、重新编写的makefile文件,自动生成连接脚本文件,使工程中增减源文件和目录更加简单,只需要简单修改该目录下的makefile文件,总控makefile和连接脚本文件均不需要修改。 2、开始有了shell的雏形,虽然只有少数几条命令。 ...…

查看全部问答>

关于截图不能成功

//拷贝截图到文件,lpRect 代表选定区域 HBITMAP CIECaptureDlg::CopyScreenToBitmap(LPRECT lpRect,BOOL bSave) {          HDC       hScrDC, hMemDC;         ...…

查看全部问答>

WinCE socket问题,急盼

socket创建后,句柄值为1,这个正常吗? 在recv前,select返回-1,可是recv却总是返回-1,请问是什么原因。 谢谢…

查看全部问答>

调查:STM32F103xx内置USB模块,多少人需要它做USB的设备?

该USB模块和配套的库函数已经通过USB-IF的认证,通过ST提供的开发套件,可以很方便地开发USB的应用。如果很多人感兴趣的话,我们准备在不久将来主持有关的技术培训。…

查看全部问答>

zigbee2006协议规范

这段时间一直在看cc2500,共享给大家一个zigbee2006协议规范,希望对大家有用。…

查看全部问答>