硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3755|回复: 2
收起左侧

[STM32CubeF4] 使用HAL库初始化FSMC上的TFT驱动部分

[复制链接]

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2019-12-16 09:57:26 | 显示全部楼层 |阅读模式
本帖最后由 caicaptain2 于 2019-12-16 09:59 编辑

近期研究了RTE和HAL库的工作。把以前的一个标准库的FSMC配置函数转化成HAL库,还费了点周折。贴出来给大家参考。
特别注意的是,HAL库中定义的一些变量内容有变化,需关注。
这个函数里面,驱动TFT的端口只是用了并口16位和一个地址位A17。
  1. /*
  2. *********************************************************************************************************
  3. *        函 数 名: LCD_CtrlLinesConfig
  4. *        功能说明: 配置LCD控制口线,FSMC管脚设置为复用功能
  5. *        形    参:无
  6. *        返 回 值: 无
  7. *********************************************************************************************************
  8. */
  9. static void LCD_CtrlLinesConfig(void)
  10. {
  11.         GPIO_InitTypeDef GPIO_InitStructure;
  12.         /* 使能 GPIO时钟 */
  13.         __HAL_RCC_GPIOD_CLK_ENABLE();
  14.         __HAL_RCC_GPIOE_CLK_ENABLE();
  15.         GPIO_InitStructure.Pin                          =GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5 |
  16.                                     GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_14 |
  17.                                     GPIO_PIN_15;

  18.         GPIO_InitStructure.Mode                         = GPIO_MODE_AF_PP;
  19.         GPIO_InitStructure.Speed                        = GPIO_SPEED_FREQ_VERY_HIGH;
  20.         GPIO_InitStructure.Pull                         =GPIO_NOPULL;
  21.         GPIO_InitStructure.Alternate                    =GPIO_AF12_FSMC;//这是新参数,必须配置
  22.         HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);

  23. /* 设置 PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),
  24.          PE.14(D11), PE.15(D12) 为复用推挽输出 */
  25.         GPIO_InitStructure.Pin                          = GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 |
  26.                                     GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |
  27.                                     GPIO_PIN_15;
  28.         HAL_GPIO_Init(GPIOE, &GPIO_InitStructure);

  29.         /* 设置 PD.12(A17 (RS))  为复用推挽输出 2018-6-19 */
  30.     GPIO_InitStructure.Pin                          = GPIO_PIN_12;
  31.         HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);
  32.         
  33.         /* 设置 PD7 (LCD/CS)) 为复用推挽输出 FSMC_NE1  2018-6-19*/
  34.         GPIO_InitStructure.Pin                          = GPIO_PIN_7;
  35.         HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);
  36.         
  37.         /* 设置PD11(TFT忙信号) 为输入 基本没有用 2018-6-19*/
  38.         GPIO_InitStructure.Pin                          = GPIO_PIN_11;
  39.         GPIO_InitStructure.Mode                         = GPIO_MODE_INPUT;
  40.         GPIO_InitStructure.Speed                        = GPIO_SPEED_FREQ_HIGH ;   
  41.         GPIO_InitStructure.Pull                         = GPIO_PULLDOWN;
  42.         GPIO_InitStructure.Alternate                    =0;
  43.         HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);
  44. }

  45. /*
  46. *********************************************************************************************************
  47. *        函 数 名: LCD_FSMCConfig
  48. *        功能说明: 配置FSMC并口访问时序
  49. *        形    参:无
  50. *        返 回 值: 无
  51. *********************************************************************************************************
  52. */
  53. static void LCD_FSMCConfig(void)
  54. {
  55.     FSMC_NORSRAM_InitTypeDef                         init        ={0};
  56.         FSMC_NORSRAM_TimingTypeDef  timingWrite         ={0};
  57.                
  58.                 /* 使能FSMC时钟 */
  59.         __HAL_RCC_FSMC_CLK_ENABLE();

  60.         timingWrite.AddressSetupTime                    = 4;
  61.         timingWrite.AddressHoldTime                     = 0;
  62.         timingWrite.DataSetupTime                       = 6;
  63.         timingWrite.BusTurnAroundDuration               = 1;
  64.         timingWrite.CLKDivision                         = 0;
  65.         timingWrite.DataLatency                         = 0;
  66.         timingWrite.AccessMode                          = FSMC_ACCESS_MODE_A;

  67. //        /* - BANK 1 (of NOR/SRAM Bank 1~4) is enabled */
  68.                 init.NSBank                                 = FSMC_NORSRAM_BANK1;
  69.                 init.DataAddressMux                         = FSMC_DATA_ADDRESS_MUX_DISABLE;
  70.                 init.MemoryType                             = FSMC_MEMORY_TYPE_SRAM;
  71.                 init.MemoryDataWidth                        = FSMC_NORSRAM_MEM_BUS_WIDTH_16;
  72.                 init.BurstAccessMode                        = FSMC_BURST_ACCESS_MODE_DISABLE;
  73.                 init.AsynchronousWait                       = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
  74.                 init.WaitSignalPolarity                     = FSMC_WAIT_SIGNAL_POLARITY_LOW;
  75.                 init.WrapMode                               = FSMC_WRAP_MODE_DISABLE;
  76.                 init.WaitSignalActive                       = FSMC_WAIT_TIMING_BEFORE_WS;
  77.                 init.WriteOperation                         = FSMC_WRITE_OPERATION_ENABLE;
  78.                 init.WaitSignal                             = FSMC_WAIT_SIGNAL_DISABLE;
  79.                 init.ExtendedMode                           = FSMC_EXTENDED_MODE_DISABLE; //禁止扩展模式,读写采用同一时序
  80.                 init.WriteBurst                             = FSMC_WRITE_BURST_DISABLE;
  81.                 init.ContinuousClock                        =FSMC_CONTINUOUS_CLOCK_SYNC_ONLY;//HAL库新增的变量
  82.                 init.WriteFifo                              =FSMC_WRITE_FIFO_ENABLE;//HAL库新增的变量
  83.                 init.PageSize                               =FSMC_PAGE_SIZE_NONE;//HAL库新增的变量

  84.                 FSMC_NORSRAM_Init(FSMC_Bank1,&init);<font color="red">//初始化,使能三部曲
  85.                 FSMC_NORSRAM_Timing_Init(FSMC_Bank1,&timingWrite,FSMC_NORSRAM_BANK1);
  86.                 /* - BANK 1 (of NOR/SRAM Bank 1~4) is enabled */
  87.                 __FMC_NORSRAM_ENABLE(FSMC_Bank1,FSMC_NORSRAM_BANK1);
  88. }
复制代码




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106749
QQ
发表于 2019-12-16 10:19:46 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

2

主题

4

回帖

10

积分

新手上路

积分
10
发表于 2019-12-27 18:34:17 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-4 02:31 , Processed in 0.158901 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表