这个是我在使用STM32F207 里面的FSMC 控制 LCD 一些初始化代码。
/* *************************
**
**配置FSMC 和LCD 使用的一些GPIO
****************************/
void LCD_GPIOPINConfigure(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*init LCD DBpin DB0 ~ DB15*/
GPIO_PinAFConfig(GPIOD,GPIO_PinSource0,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource1,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource8,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource9,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource10,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_FSMC);
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_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource7,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource8,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource9,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource10,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource11,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource12,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource13,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource14,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource15,GPIO_AF_FSMC);
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_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStructure);
/*FSMC_A10 -- LCD_RS ---- PG0*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_Init(GPIOG,&GPIO_InitStructure);
GPIO_PinAFConfig(GPIOG, GPIO_PinSource0,GPIO_AF_FSMC);
/*GPIOG1 LCD_RESET --------PG1 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOG,&GPIO_InitStructure);
/*初始化RESET 引脚为高电平*/
GPIO_SetBits(GPIOG,GPIO_Pin_1);
/* PD4---FSMC_NOE , PD5 ----FSMC_NWE*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource4,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_FSMC);
/*PD7 ---FSMC_NE1----------ALTERNATE*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_PinAFConfig(GPIOD,GPIO_PinSource7,GPIO_AF_FSMC);
}
void LCD_FSMCConfig(void)
{
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef p;
/* FSMC_Bank1_NORSRAM1 timing configuration */
p.FSMC_AddressSetupTime = 0x01;/*地址建立时间期限*/
p.FSMC_AddressHoldTime = 0x00;/*地址的持续时间*/
p.FSMC_DataSetupTime = 0x05;/*设定数据时间期限*/
p.FSMC_BusTurnAroundDuration = 0x00;/*总线转向时间*/
p.FSMC_CLKDivision = 0x00;/*CLK时钟输出信号的HCLK周期数表示时间???*/
p.FSMC_DataLatency = 0x00;/*指定在获得第一个数据前的时钟周期*/
p.FSMC_AccessMode = FSMC_AccessMode_B;
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;/*指定的FSMC块*/
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; /*地址和数据值不复用的数据总线*/
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;/*Enables or disables the Wrapped burst access mode for Flash*/
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;/*启用指定的FSMC块的写操作*/
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);
/* Enable FSMC Bank1_SRAM Bank */
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}
但是我在使用这个调试代码的时候从示波器上面看出来的波形是这个样子的!!
示波器的解法:
1:接的RD 2:WE 3:NE1
测试代码:
for(;;)
{
*((volatile u16*)(LCD_RAMBASE)) = 1;
delay_us(2);
*((volatile u16*)(LCD_RAMBASE+ 0xfa)) = 2;
delay_us(2);
*((volatile u16*)(LCD_RAMBASE+ 0xfb)) = 3;
delay_us(2);
*((volatile u16*)(LCD_RAMBASE+ 0xfc)) = 4;
delay_us(2);
*((volatile u16*)(LCD_RAMBASE+ 0xfd)) = 5;
delay_us(2);
*((volatile u16*)(LCD_RAMBASE+ 0xfe)) = 6;
delay_us(2);
Test[0] = *((volatile u16*)(LCD_RAMBASE)) ;
delay_us(2);
Test[1] = *((volatile u16*)(LCD_RAMBASE+ 0xfa));
delay_us(2);
Test[2] = *((volatile u16*)(LCD_RAMBASE+ 0xfb));
delay_us(2);
Test[3] = *((volatile u16*)(LCD_RAMBASE+ 0xfc));
delay_us(2);
Test[4] = *((volatile u16*)(LCD_RAMBASE+ 0xfd));
delay_us(2);
Test[5] = *((volatile u16*)(LCD_RAMBASE+ 0xfe));
delay_us(2);
}
麻烦原子哥给看看!!!老板在后面催呢。。。
|