|
本帖最后由 caicaptain2 于 2019-12-16 09:59 编辑
近期研究了RTE和HAL库的工作。把以前的一个标准库的FSMC配置函数转化成HAL库,还费了点周折。贴出来给大家参考。
特别注意的是,HAL库中定义的一些变量内容有变化,需关注。
这个函数里面,驱动TFT的端口只是用了并口16位和一个地址位A17。
- /*
- *********************************************************************************************************
- * 函 数 名: LCD_CtrlLinesConfig
- * 功能说明: 配置LCD控制口线,FSMC管脚设置为复用功能
- * 形 参:无
- * 返 回 值: 无
- *********************************************************************************************************
- */
- static void LCD_CtrlLinesConfig(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- /* 使能 GPIO时钟 */
- __HAL_RCC_GPIOD_CLK_ENABLE();
- __HAL_RCC_GPIOE_CLK_ENABLE();
- GPIO_InitStructure.Pin =GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 |
- GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_14 |
- GPIO_PIN_15;
- GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStructure.Pull =GPIO_NOPULL;
- GPIO_InitStructure.Alternate =GPIO_AF12_FSMC;//这是新参数,必须配置
- HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);
- /* 设置 PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),
- PE.14(D11), PE.15(D12) 为复用推挽输出 */
- GPIO_InitStructure.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;
- HAL_GPIO_Init(GPIOE, &GPIO_InitStructure);
- /* 设置 PD.12(A17 (RS)) 为复用推挽输出 2018-6-19 */
- GPIO_InitStructure.Pin = GPIO_PIN_12;
- HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);
-
- /* 设置 PD7 (LCD/CS)) 为复用推挽输出 FSMC_NE1 2018-6-19*/
- GPIO_InitStructure.Pin = GPIO_PIN_7;
- HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);
-
- /* 设置PD11(TFT忙信号) 为输入 基本没有用 2018-6-19*/
- GPIO_InitStructure.Pin = GPIO_PIN_11;
- GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
- GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH ;
- GPIO_InitStructure.Pull = GPIO_PULLDOWN;
- GPIO_InitStructure.Alternate =0;
- HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);
- }
- /*
- *********************************************************************************************************
- * 函 数 名: LCD_FSMCConfig
- * 功能说明: 配置FSMC并口访问时序
- * 形 参:无
- * 返 回 值: 无
- *********************************************************************************************************
- */
- static void LCD_FSMCConfig(void)
- {
- FSMC_NORSRAM_InitTypeDef init ={0};
- FSMC_NORSRAM_TimingTypeDef timingWrite ={0};
-
- /* 使能FSMC时钟 */
- __HAL_RCC_FSMC_CLK_ENABLE();
- timingWrite.AddressSetupTime = 4;
- timingWrite.AddressHoldTime = 0;
- timingWrite.DataSetupTime = 6;
- timingWrite.BusTurnAroundDuration = 1;
- timingWrite.CLKDivision = 0;
- timingWrite.DataLatency = 0;
- timingWrite.AccessMode = FSMC_ACCESS_MODE_A;
- // /* - BANK 1 (of NOR/SRAM Bank 1~4) is enabled */
- init.NSBank = FSMC_NORSRAM_BANK1;
- init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;
- init.MemoryType = FSMC_MEMORY_TYPE_SRAM;
- init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16;
- init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE;
- init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
- init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
- init.WrapMode = FSMC_WRAP_MODE_DISABLE;
- init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
- init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE;
- init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;
- init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE; //禁止扩展模式,读写采用同一时序
- init.WriteBurst = FSMC_WRITE_BURST_DISABLE;
- init.ContinuousClock =FSMC_CONTINUOUS_CLOCK_SYNC_ONLY;//HAL库新增的变量
- init.WriteFifo =FSMC_WRITE_FIFO_ENABLE;//HAL库新增的变量
- init.PageSize =FSMC_PAGE_SIZE_NONE;//HAL库新增的变量
- FSMC_NORSRAM_Init(FSMC_Bank1,&init);<font color="red">//初始化,使能三部曲
- FSMC_NORSRAM_Timing_Init(FSMC_Bank1,&timingWrite,FSMC_NORSRAM_BANK1);
- /* - BANK 1 (of NOR/SRAM Bank 1~4) is enabled */
- __FMC_NORSRAM_ENABLE(FSMC_Bank1,FSMC_NORSRAM_BANK1);
- }
复制代码
|
|