同学做了块板,液晶接口是用FSMC的模式B-NOR,试着移植下程序,那么问题来了
挖掘技术哪家强?
去,不是这个问题
具体问题,现象描述如下:
0)BOOT0=0
1)下载 正常运行,串口返回"GO.."和LCD_id,屏幕正常显示
2)断电,上电 串口只返回“GO...”,液晶白屏
3)BOOT0=1,BOOT1=0,复位 无返回,液晶黑屏
BOOT0=0,复位 串口返回"GO.."和LCD_id,屏幕刷屏很慢
4)BOOT0=1,BOOT1=1,复位 无返回,液晶黑屏
BOOT0=0,复位 串口返回"GO.."和LCD_id,屏幕正常显示
修改过的代码:
main():
[mw_shl_code=c,true] int main(void)
{
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
USART1_Config(); //串口初始化为115200
printf("GO...........\n"); //打印LCD ID
LCD_Init();//函数内串口打印LCD_id[/mw_shl_code]
[mw_shl_code=c,true]//后面和原子哥的例程是一样的... ...[/mw_shl_code]
LCD_init():
[mw_shl_code=c,true]void LCD_Init(void)
{
LCD_GPIO_Config(); //初始化使用到的GPIO
LCD_FSMC_Config(); //初始化FSMC模式
LCD_Rst(); //复位LCD液晶屏
delay_ms(50); // delay 50 ms
LCD_WriteReg(0x0000,0x0001);
//后面和原子哥的例程是一样的... ...[/mw_shl_code]
地址修改:
[mw_shl_code=c,true]#define LCD_BASE ((u32)0x6001fffe)
#define LCD ((LCD_TypeDef *) LCD_BASE)
[/mw_shl_code]
LCD_GPIO_Config(void):
[mw_shl_code=c,true]void LCD_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 使能FSMC时钟*/
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
/* 使能FSMC对应相应管脚时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE , ENABLE);
[/mw_shl_code]
[mw_shl_code=c,true]//引脚配置.......[/mw_shl_code]
[mw_shl_code=c,true] /* tft control gpio init */
GPIO_ResetBits(GPIOB, GPIO_Pin_1); // 修改---for新LCD板
GPIO_SetBits(GPIOE, GPIO_Pin_1);
GPIO_ResetBits(GPIOD, GPIO_Pin_3);
GPIO_SetBits(GPIOD, GPIO_Pin_6);
}
[/mw_shl_code]
LCD_FSMC_Config():
[mw_shl_code=c,true]void LCD_FSMC_Config(void)
{
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef p;
p.FSMC_AddressSetupTime = 0x02; //地址建立时间
p.FSMC_AddressHoldTime = 0x00; //地址保持时间
p.FSMC_DataSetupTime = 0x05; //数据建立时间
p.FSMC_BusTurnAroundDuration = 0x00; //总线恢复时间
p.FSMC_CLKDivision = 0x00; //时钟分频
p.FSMC_DataLatency = 0x00; //数据保持时间
p.FSMC_AccessMode = FSMC_AccessMode_B; //在地址数\据线不复用的情况下,ABCD模式的区别不大
//本成员配置只有使用扩展模式才有效
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; //NOR FLASH的BANK1
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; //数据线与地址线不复用
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR; //存储器类型NOR FLASH
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; //数据宽度为16位
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; //本成员配置仅在突发模式下有效。NWAIT信号在什么时期产生
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; //本成员的配置只在突发模式下有效,禁用NWAIT信号
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; //禁止突发写操作
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; //写使能
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; //禁止扩展模式,扩展模式可以使用独立的读、写模式
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; //配置读写时序
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; //配置写时序
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
/* 使能 FSMC Bank1_SRAM Bank */
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}
[/mw_shl_code]
[mw_shl_code=c,true][/mw_shl_code]
LCD_Rst():
[mw_shl_code=c,true]void LCD_Rst(void)
{
GPIO_ResetBits(GPIOE, GPIO_Pin_1); //低电平复位
delay_us(10000);
GPIO_SetBits(GPIOE, GPIO_Pin_1 );
delay_us(12000);
}
[/mw_shl_code]
|