关于stm32f103VE 使用FSMC控制LCD 应该如何初始化FSMC??求指点

2019-08-14 07:38发布

原子哥的资料里是103ZE的 可我的只有100脚 没有F G 的管脚啊 那么该怎么配置? ?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
36条回答
_tank_
2019-08-14 17:59
回复【2楼】Badu_Space:
---------------------------------
还是不可以 GPIO的设置直接粘贴你的代码  RS采用A16 FSMC选用bank1 第一分区   可返回的id只是0

把代码贴一下吧

void FSMC_LCD_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure; 
       
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef readWriteTiming;
  FSMC_NORSRAMTimingInitTypeDef writeTiming; 

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE); //使能FSMC时钟 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE); //开启外设时钟 
  // RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //开启复用时钟 

/* 初始化GPIOD为复用推挽输出 */ 
/* PD.0为FSMC_D2    D.1为FSMC_D3 */ 
/* PD.4为FSMC_NOE    D.5为FSMC_NWE */ 
/* PD.7为FSMC_NE1 */ 
/* PD.8为FSMC_D13    D.9为FSMC_D14    D.10为FSMC_D15 */ 
/* PD.11为FSMC_A16 */ 
/* PD.14为FSMC_D0    D.15为FSMC_D1 */ 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO翻转速度为50MHz 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //设置为复用推挽输出 

    GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化GPIO相关结构体 

/* 初始化GPIOE为复用推挽输出 */ 
/* PE.7为FSMC_D4    E.8为FSMC_D5 */ 
/* PE.9为FSMC_D6    E.10为FSMC_D7 */ 
/* PE.11为FSMC_D8    E.12为FSMC_D9 */ 
/* PE.13为FSMC_D10    E.14为FSMC_D11 */ 
/* PE.5为FSMC_D12 */ 
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翻转速度为50MHz 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //设置为复用推挽输出 

GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化GPIO相关结构体



    readWriteTiming.FSMC_AddressSetupTime = 0x01;  //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns
    readWriteTiming.FSMC_AddressHoldTime = 0x00;  //地址保持时间(ADDHLD)模式A未用到
    readWriteTiming.FSMC_DataSetupTime = 0x0f;  // 数据保存时间为16个HCLK,因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。
    readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
    readWriteTiming.FSMC_CLKDivision = 0x00;
    readWriteTiming.FSMC_DataLatency = 0x00;
    readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;  //模式A 
    

writeTiming.FSMC_AddressSetupTime = 0x00;  //地址建立时间(ADDSET)为1个HCLK  
    writeTiming.FSMC_AddressHoldTime = 0x00;  //地址保持时间(A
    writeTiming.FSMC_DataSetupTime = 0x03;  ////数据保存时间为4个HCLK
    writeTiming.FSMC_BusTurnAroundDuration = 0x00;
    writeTiming.FSMC_CLKDivision = 0x00;
    writeTiming.FSMC_DataLatency = 0x00;
    writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;  //模式A 

 
    FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;//  这里我们使用NE4 ,也就对应BTCR[6],[7]。
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 不复用数据地址
    FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM;  //SRAM   
    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//存储器数据宽度为16bit   
    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable; 
    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_Enable; // 读写使用不同的时序
    FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //读写时序
    FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming;  //写时序

    FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //初始化FSMC配置

    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  // 使能BANK1  
}

结构体为:
typedef struct
{
u16 LCD_REG;
u16 LCD_RAM;
} LCD_TypeDef;
#define LCD_BASE        ((u32)(0x60000000 | 0x0001FFFE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)

帮我看看吧

一周热门 更多>