OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6538|回复: 1

FSMC驱动屏的问题!

[复制链接]

12

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
248
金钱
248
注册时间
2011-7-24
在线时间
37 小时
发表于 2015-8-16 20:48:19 | 显示全部楼层 |阅读模式
5金钱
#define Bank1_LCD_C    ((uint32_t)0x60000000)                //Disp Reg ADDR
#define Bank1_LCD_D    ((uint32_t)0x61000000)                  //Disp Data ADDR       // A23 PE2
/*选定LCD指定寄存器*/
#define LCD_WR_REG(index)      ((*(__IO uint16_t *) (Bank1_LCD_C)) = ((uint16_t)index))
/*往LCD GRAM写入数据*/
#define LCD_WR_Data(val)       ((*(__IO uint16_t *) (Bank1_LCD_D)) = ((uint16_t)(val)))//u16
#define LCD_ILI9486_CMD(index)           LCD_WR_REG(index)
#define LCD_ILI9486_Parameter(val)         LCD_WR_Data(val)


/**************************************************
* @briefCD_GPIO_Init
* @param:
* @retval :
****************************************************/
void LCD_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE);
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
  //RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
  /*配置LCD 背光引脚*/
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;   
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
  /*配置LCD RST背光引脚*/
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;   
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;  
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  /*配置FSMC相对的数据线,FSMC D0-D15:PD 14 15 0 1,PE 7 8 9 10 11 12 13 14 15,PD 8 9 10*/
  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_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_Init(GPIOE, &GPIO_InitStructure);
/* 配置FSMC相对的控制信号:
  * PD4-FSMC_NOE  CD-RD
  * PD5-FSMC_NWE  CD-WR
  * PG12-FSMC_NE1CD-CS
  * PE2-FSMC_A23  CD-DC
*/
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7;
  GPIO_Init(GPIOD, &GPIO_InitStructure);  
  
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
  /*打开背光*/
  GPIO_SetBits(GPIOE,GPIO_Pin_0);
}
/**************************************************
* @briefCD_FSMC_Init
* @param:
* @retval :
****************************************************/
void LCD_FSMC_Init(void)
{   
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  ReadTimer;
  FSMC_NORSRAMTimingInitTypeDef  WriterTimer;
  
  
  ReadTimer.FSMC_AddressSetupTime = 0x01;         //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns
  ReadTimer.FSMC_AddressHoldTime = 0x00;         //地址保持时间(ADDHLD)模式A未用到       
  ReadTimer.FSMC_DataSetupTime = 0x0f;                 // 数据保存时间为16个HCLK,因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。
  ReadTimer.FSMC_BusTurnAroundDuration = 0x00;
  ReadTimer.FSMC_CLKDivision = 0x00;
  ReadTimer.FSMC_DataLatency = 0x00;
  ReadTimer.FSMC_AccessMode = FSMC_AccessMode_A;         //模式A
  
  WriterTimer.FSMC_AddressSetupTime = 0x02;         //0x01 地址建立时间(ADDSET)为1个HCLK  
  WriterTimer.FSMC_AddressHoldTime = 0x00;         //地址保持时间(A               
  WriterTimer.FSMC_DataSetupTime = 0x05;                 ////0x03 数据保存时间为4个HCLK       
  WriterTimer.FSMC_BusTurnAroundDuration = 0x00;
  WriterTimer.FSMC_CLKDivision = 0x00;
  WriterTimer.FSMC_DataLatency = 0x00;
  WriterTimer.FSMC_AccessMode = FSMC_AccessMode_A;         //模式A
   
   
   
  
  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  //FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_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 = &ReadTimer;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &WriterTimer;  
  
  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
  
  /* 使能 FSMC Bank1_SRAM Bank */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);   
}

  LCD_ILI9486_CMD(0XF9);
  LCD_ILI9486_Parameter(0x00);

为什么跑到 LCD_ILI9486_Parameter(0x00);就会重启;要不就会跑到这个中断里
/**
  * @brief  This function handles Hard Fault exception.
  * @param  None
  * @retval None
  */
void HardFault_Handler(void)
{
  /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {
  }
}


用的是IAR ?各路大神?原子哥!为何这样!小弟不解?
还希望各位指教下!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-8-16 22:27:47 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 03:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表