FSMC-TFTLCD显示实验

具体代码看我上传文件

TFTLCD简介(ILI9488型号)

LCD开发步骤

1)设置 STM32F1 与 TFTLCD 模块相连接的 IO 要让 TFTLCD 模块显示,首先得初始化 TFTLCD 模块与 STM32F1 相连的 IO 口,以便控制 TFTLCD。这里我们用使用的是 STM32F1 的 FSMC,FSMC 将在后面小 节向大家详细介绍。 (2)初始化 TFTLCD 模块(写入一系列设置值) 初始化 IO 口,接着就是对 TFTLCD 进行配置,首先就是要复位下 LCD,由于 模块的复位引脚是接在 STM32F1 复位上的,所以直接按下开发板复位键即可,然 后就是初始化序列,即向 LCD 控制器写入一系列的设置值(比如 RGB 格式、LCD 显示方向、伽马校准等),这部分代码一般 LCD 厂商会提供,我们直接使用这些 初始化序列即可,无需深入研究。关于这些设置值可以在你所使用的彩屏模块驱 动芯片数据手册内查找到,只不过这些数据手册全是英文的,其实也不是很难, 我们用到的只是几个设置值而已,不认识的可以百度翻译下。初始化完成之后, LCD 就可以正常使用了。 (3)将要显示的内容写到 TFTLCD 模块内 这一步需要按照:设置坐标→写 GRAM 指令→写 GRAM 来实现,但是这个步 骤,只是一个点的处理,如果我们想要显示字符或数字,就必须要多次使用这个 步骤,从而达到显示字符或数字的目的,一般我们会设计一个函数来封装这些过 程(实现字符或数字的显示),之后只需调用该函数,就可以实现字符或数字的 显示了

FSMC简介

FSMC开发步骤

1)FSMC 初始化 FSMC 的初始化主要是配置 FSMC_BCRx, FSMC_BTRx,FSMC_BWTRx 这三个寄 存器,固件库内提供了 3 个初始化函数对这些寄存器配置。FSMC 初始化库函数 如下: FSMC_NORSRAMInit(); FSMC_NANDInit(); FSMC_PCCARDInit(); 这三个函数分别用来初始化 4 种类型存储器。这里根据名字就很好判断对 应关系。用来初始化 NOR 和 SRAM 使用同一个函数 FSMC_NORSRAMInit()。所以 我们之后使用的 FSMC 初始化函数为 FSMC_NORSRAMInit()。该初始化函数原型 是: void FSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct); 这个函数只有一个参数,是一个结构体指针变量,结构体类型是 FSMC_NORSRAMInitTypeDef,其内成员变量非常多,因为 FSMC 相关的配置项非常 多。下面我们简单介绍下它的成员: 1. typedef struct 2. { 3. uint32_t FSMC_Bank; 4. uint32_t FSMC_DataAddressMux; 5. uint32_t FSMC_MemoryType; 6. uint32_t FSMC_MemoryDataWidth; 7. uint32_t FSMC_BurstAccessMode; 8. uint32_t FSMC_AsynchronousWait; 9. uint32_t FSMC_WaitSignalPolarity; 10. uint32_t FSMC_WrapMode; 11. uint32_t FSMC_WaitSignalActive; 12. uint32_t FSMC_WriteOperation; 13. uint32_t FSMC_WaitSignal; 14. uint32_t FSMC_ExtendedMode; 15. uint32_t FSMC_WriteBurst; 16. FSMC_NORSRAMTimingInitTypeDef* FSMC_ReadWriteTimingStruct; 17. FSMC_NORSRAMTimingInitTypeDef* FSMC_WriteTimingStruct; 18. }FSMC_NORSRAMInitTypeDef; 从这个结构体我们可以看出,前面有 13 个基本类型(unit32_t)的成员变 量,这 13 个参数是用来配置片选控制寄存器 FSMC_BCRx。最后面还有两个 SMC_NORSRAMTimingInitTypeDef 指针类型的成员变量。前面我们讲到,FSMC 有 读时序和写时序之分,所以这里就是用来设置读时序和写时序的参数了,也就是 说,这两个参数是用来配置寄存器 FSMC_BTRx 和 FSMC_BWTRx,后面我们会讲解 到。下面我们就来看看这些成员: FSMC_Bank:用来设置使用到的存储块标号和区号,本章实验我们是使用的 存储块 1 区号 4,所以选择值为 FSMC_Bank1_NORSRAM4。 FSMC_DataAddressMux:用于配置 FSMC 的数据线与地址线是否复用。FSMC 支持数据与地址线复用或非复用两种模式。在非复用模式下 16 位数据线及 26 位地址线分开始用;复用模式则低 16 位数据/地址线复用,仅对 NOR 和 PSRAM 有效。在复用模式下,推荐使用地址锁存器以区分数据与地址。本实验使用 FSMC 模拟 8080 时序,仅使用一根地址线 A10 提供 8080 的 RS 信号,所以不需要复用, 即设置为 FSMC_DataAddressMux_Disable。 FSMC_MemoryType:用来设置FSMC外接的存储器类型,可选类型为 NOR FLASH 模式、PSARM 模式及 SRAM 模式。我们这里把 TFTLCD 当做 SRAM 使用,所以选择 值为 FSMC_MemoryType_SRAM。 FSMC_MemoryDataWidth:用来设置 FSMC 接口的数据宽度,可选择 8 位还是 16 位,这里我们是 16 位数据宽度,所以选择值为 FSMC_MemoryDataWidth_16b。 FSMC_WriteOperation:用于配置写操作使能,如果禁止了写操作,FSMC 不 会产生写时序,但仍可从存储器中读出数据。本实验需要向 TFTLCD 内写数据, 所以要写使能,配置为 FSMC_WriteOperation_Enable(写使能)。 FSMC_ExtendedMode:用于配置是否使用扩展模式,在扩展模式下,读时序 和写时序可以使用独立时序模式。如读时序使用模式 A,写时序使用模式 B,这 些 A、B、C、D 模式实际上差别不大,主要是在使用数据/地址线复用的情况下, FSMC 信号产生的时序不一样。 FSMC_BurstAccessMode:用于配置访问模式。FSMC 对存储器的访问分为异 步模式和突发模式(同步模式)。在异步模式下,每次传送数据都需要产生一个确 定的地址,而突发模式可以在开始时提供一个地址之后,把数据成组地连续写入。 本实验使用异步模式 FSMC_BurstAccessMode_Disable。 FSMC_WaitSignalPolarity(配置等待信号极性)、FSMC_WrapMode(配置是否 使用非对齐方式)、FSMC_WaitSignalActive(配置等待信号什么时期产生)、 FSMC_WaitSignal(配置是否使用等待信号)、FSMC_WriteBurst(配置是否允许 突发写操作),这些成员均需要在突发模式开启后配置才有效。本实验使用的是 异步模式,所以这些成员的参数没有意义。 FSMC_ReadWriteTimingStruct 和 FSMC_WriteTimingStruct:用于设置读 写时序。这两个变量都是 FSMC_NORSRAMTimingInitTypeDef 结构体指针类型。 这两个参数在初始化的时候分别用来初始化片选控制寄存器 FSMC_BTRx 和写操 作时序控制寄存器 FSMC_BWTRx。FSMC_NORSRAMTimingInitTypeDef 结构体如下: 1. typedef struct 2. { 3. uint32_t FSMC_AddressSetupTime;//地址建立时间 4. uint32_t FSMC_AddressHoldTime;//地址保持时间 5. uint32_t FSMC_DataSetupTime;//数据建立时间 6. uint32_t FSMC_BusTurnAroundDuration;//总线恢复时间 7. uint32_t FSMC_CLKDivision;//时钟分频 8. uint32_t FSMC_DataLatency;//数据保持时间 9. uint32_t FSMC_AccessMode;//访问模式 10. }FSMC_NORSRAMTimingInitTypeDef; 这些成员主要用于设计地址建立保持时间,数据建立时间等配置,这些时间 是由 HCLK 经过成员时钟分频得来的,该分频值在成员 FSMC_CLKDivision(时钟 分频)中设置,其中 FSMC_AccessMode(访问模式)成员的设置只在开启了扩展模 式才有效,而且开启了扩展模式后,读时序和写时序的设置可以是独立的。本实 验中我们需要读写速度不一样,所以开启了扩展模式并且对于参数 FSMC_DataSetupTime 设置了不同的值。此结构体其实就是对 FSMC_BTRx 和 FSMC_BWTRx 寄存器操作,大家可以查看中文参考手册寄存器说明。 本实验中的时序设置是根据 ILI9481 的数据手册设置的,调试的时候可以先 把这些值设置得大一些,然后慢慢靠近数据手册要求的最小值,这样会取得比较 好的效果。时序的参数设置对 LCD 的显示效果有一定的影响。 了解结构体成员功能后,就可以进行配置,本章实验配置代码如下: 1. FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; 2. FSMC_NORSRAMTimingInitTypeDef FSMC_ReadTimingInitStructure; 3. FSMC_NORSRAMTimingInitTypeDef FSMC_WriteTimingInitStructure; 4. 5. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE); //使能 FSMC 时钟 6. 7. FSMC_ReadTimingInitStructure.FSMC_AddressSetupTime = 0x01; //地址建立时间 (ADDSET)为 2 个 HCLK 1/36M=27ns 8. FSMC_ReadTimingInitStructure.FSMC_AddressHoldTime = 0x00; //地址保持时间 (ADDHLD)模式 A 未用到 9. FSMC_ReadTimingInitStructure.FSMC_DataSetupTime = 0x0f; // 数据保存时间 为 16 个 HCLK,因为液晶驱动 IC 的读数据的时候,速度不能太快,尤其对 1289 这个 IC。 10. FSMC_ReadTimingInitStructure.FSMC_BusTurnAroundDuration = 0x00; 11. FSMC_ReadTimingInitStructure.FSMC_CLKDivision = 0x00; 12. FSMC_ReadTimingInitStructure.FSMC_DataLatency = 0x00; 13. FSMC_ReadTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A; //模式 A 14. 15. FSMC_WriteTimingInitStructure.FSMC_AddressSetupTime = 0x15; //地址建立时间 (ADDSET)为 16 个 HCLK 16. FSMC_WriteTimingInitStructure.FSMC_AddressHoldTime = 0x15; //地址保持时 间 17. FSMC_WriteTimingInitStructure.FSMC_DataSetupTime = 0x05; //数据保存时 间为 6 个 HCLK 18. FSMC_WriteTimingInitStructure.FSMC_BusTurnAroundDuration = 0x00; 19. FSMC_WriteTimingInitStructure.FSMC_CLKDivision = 0x00; 20. FSMC_WriteTimingInitStructure.FSMC_DataLatency = 0x00; 21. FSMC_WriteTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A; //模式 A 22. 23. 24. FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;// 这里我们使用 NE4 ,也就对应 BTCR[6],[7]。 25. FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 不复用数据地址 26. FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_Memo ryType_SRAM; //SRAM 27. FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;// 存储器数据宽度为 16bit 28. FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable; // FSMC_BurstAccessMode_Disable; 29. FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_ Low; 30. FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disabl e; 31. FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; 32. FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_Befo reWaitState; 33. FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; // 存储器写使能 34. FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; 35. FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; // 读写使用不同的时序 36. FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; 37. FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_ReadTimingInitS tructure; //读写时序 38. FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_WriteTimingInitStru cture; //写时序 39. 40. FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); //初始化 FSMC 配置 (2)使能(开启)FSMC 固件库提供了不同的库函数来初始化各种存储器,同样也提供了不同类型的 存储器使能函数,如下: void FSMC_NORSRAMCmd(uint32_t FSMC_Bank, FunctionalState NewState); void FSMC_NANDCmd(uint32_t FSMC_Bank, FunctionalState NewState); void FSMC_PCCARDCmd(FunctionalState NewState); 这 3 个函数支持不同种类的存储器,从函数名来看也非常好理解。我们把 TFTLCD 当作 SRAM 使用,即使用第一个函数。该函数第一个参数用来选择存储器 的区域,第二个参数用来使能或者失能。 将以上几步全部配置好后,我们就可以使用 STM32F1 的 FSMC 了

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值