#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)
/**************************************************
*
@brief
CD_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_NE1
CD-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);
}
/**************************************************
*
@brief
CD_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 ?各路大神?原子哥!为何这样!小弟不解?
还希望各位指教下!
一周热门 更多>