STM32F1与STM32CubeIDE快速入门FSCM驱动TFTLCDILI9325
STM32F1与STM32CubeIDE快速入门-FSCM驱动TFT-LCD(ILI9325)
FSCM驱动TFT-LCD(ILI9325)
文章目录
- FSCM驱动TFT-LCD(ILI9325)
1、FSCM介绍
STM32F10xxx 灵活静态存储器控制器 (Flexible Static Memory Controller,FSMC) 是一款嵌入式外部存储器控制器,允许 STM32F10xxx 微控制器与各种存储器接口,包括 SRAM、NOR 闪存、NAND 闪存和 LCD 模块。FSMC NOR Flash/SRAM bank 适用于 MCU 并行彩色 LCD 接口。

FSMC主要用于:
- 将 AHB 数据通信事务转换为适当的外部设备协议
- 外部设备的访问时序要求
所有外部存储器共享地址、数据和控制信号,但有自己的片选信号。 FSMC 一次只能访问一个外部设备。
FSMC可以连接同步或异步内存和16位PC内存卡,STM32的FSMC接口支持的内存包括SRAM、NANDFLASH、NORFLASH、PSRAM。
1.2 FSMC外部设备地址映射
FSMC的外部设备地址映像,STM32 FSMC将外部存储器分为4个固定大小为256M字节的存储器块:
- Block 1 用于 4 个 Norflash 或 PSRAM 存储设备。 Block 1 分为 4 个带有独立片选信号的 Norflash / PSRAM。
- Block 2和Block 3用于连接NANDFLASH(一个block驱动一个设备)
- Block 4 用于连接 PC 块设备
对于每个存储区域,要使用的内存类型由用户在配置寄存器中定义。

NOR/PSRAM 地址映射
Bank1 的 256M 字节空间由 28 条地址线 (Haddr [27: 0]) 寻址。 这里的Haddr是内部AHB地址总线,但也参与了外部存储器的寻址,其中Haddr[25:0]是从外部存储器地址FSMC_A[25:0],Haddr[26:27]对4个区进行寻址 . 如下表所示:

Haddr [25: 0] 包含外部存储器地址。 由于 Haddr 是字节地址,所以内存不同,发送到内存的地址会根据内存数据宽度的不同而不同,如下表所示:

1.1 FSMC NOR Flash/SRAM bank 描述
为了控制 NOR Flash/SRAM 存储器,FSMC 提供了以下特性:
- 选择要用于映射 NOR Flash/SRAM 存储器的 bank:有四个独立的 bank 可用于与 NOR Flash/SRAM/PSRAM 存储器接口,每个 bank 使用单独的芯片选择引脚进行选择。
- 启用或禁用地址/数据多路复用功能
- 选择要使用的存储器类型:NOR Flash/SRAM/PSRAM
- 定义外部存储器数据总线宽度:8/16 位
- 启用或禁用 NOR Flash 同步存储器的突发访问模式
- 配置等待信号的使用:启用/禁用、极性设置和时序配置
- 启用或禁用扩展模式:该模式用于访问具有不同时序配置的内存,以进行读写操作。
由于 NOR Flash/PSRAM 控制器同时支持异步和同步存储器,用户应根据存储器特性仅选择有用的参数。
FSMC 还提供了对多个参数进行编程以与外部存储器正确连接的可能性。 根据内存类型,某些参数未使用。
如果使用外部异步存储器,用户必须根据存储器数据表中指定的 AC 时序信息计算和设置以下参数:
- ADDSET:地址建立时间
- ADDHOLD:地址保持时间
- DATAST:数据建立时间
- ACCMOD:访问模式
该参数使 FSMC 能够灵活地访问各种异步静态存储器。 如果内存支持这种功能,则有四种扩展访问模式允许在读取内存时以不同的时序进行写访问。 当使能扩展模式时,FSMC_BTR 寄存器用于读操作,FSMC_BWR 寄存器用于写操作。
在使用同步存储器的情况下,用户必须计算和设置以下参数:
- CLKDIV:时钟分频比
- DATLAT:数据延迟
请注意,如果存储器支持这种模式,NOR Flash 存储器读取操作可以是同步的,而写入操作通常保持异步。
对同步NOR Flash进行编程时,存储器会自动在同步和异步模式之间切换,所以在这种情况下,必须正确设置所有参数。下图显示了两种模式下的时序图:

2、TFT-LCD与 FSMC接口
2.1 常用彩色液晶接口介绍
点阵 LCD 单元通常由硅嵌入式玻璃 LCD 驱动器控制,可以使用串行接口与微控制器连接。 这种类型的 LCD 单元具有用于显示的嵌入式 RAM,不需要任何特殊的微控制器功能。与点阵 LCD 单元不同,彩色 LCD 需要特定的控制器。
使用彩色 LCD 控制器意味着每个像素需要四根线:三根用于红、绿和蓝的模拟电压线(horizontal,水平)和一根用于选择的电压线(vertical,垂直)。
通常,彩色 LCD 可以通过两种方式连接:
- 带同步信号的 RGB 接口
- MPU(微处理器单元)接口(并行或串行)
所有图形 LCD 都带有芯片或玻璃上硅形式的内置驱动程序。 这些驱动程序在 RGB 信号和同步和像素控制之间进行转换。
许多 LCD 还带有一个 LCD 控制器,用于在 MPU 接口和 RGB 信号之间进行转换。 有些芯片既是驱动程序又是控制器。 控制器的作用是不断刷新LCD。
下表列出了集成控制器的 LCD 与需要 MPU LCD 控制器的 LCD 之间的区别(MCU中LCD控制器的优缺点):
| MCU中的LCD控制器 | LCD中的LCD控制器 |
|---|---|
| 需要外部 RAM(成本高) | RAM 包含在 LCD 控制器中 |
| LCD 的持续刷新导致高功耗和高 MCU 带宽使用 | MCU 接口仅在 LCD 显示变化时有效 |
| 适合菜单和界面,不适合电影、游戏、高端操作系统(需要 MPU 架构) | 适合菜单和界面,不适合电影、游戏、高端操作系统。 |
| 未经 MCU 验证(实际产品中仅设计了带 LCD 的 MPU) | 具有成本效益的 QVGA(240 × 320 像素)及以下。 广泛应用于家电和工业市场。 |
最常见的 LCD MPU 并行接口是 Intel 8080 (I80) 和 Motorola 6800 (M68) 类型。
下一节重点介绍如何将 LCD Intel 8080-like 和 Motorola 6800-like 接口与 STM32F10xxx FSMC 连接。
LCD控制器信号分为两种:数据信号和控制信号。
数据信号连接到 LCD 数据总线并取决于 LCD 色深(8 位、9 位、16 位、18 位或 24 位(真彩色))。
控制信号用于定义操作类型(读或写),以及操作是否包括寻址(写入命令) LCD 寄存器或显示 RAM。
下表描述了 LCD Intel 8080-like 和 Motorola 6800-like 接口的控制信号:

2.2 FSMC 与 LCD 模块接口的典型用途
STM32F10xxx FSMC 有四个不同的 64 MB 存储库,以支持 NOR 闪存/PSRAM 和类似的外部存储器。
外部存储器与控制器共享地址、数据和控制信号。
每个外部设备都通过唯一的芯片选择信号进行访问,但 FSMC 一次只能访问一个外部设备。 每个存储库都通过专用寄存器进行配置,包括不同的功能和时序参数。
正如我们在上面看到的,FSMC 提供了 LCD 控制器所需的所有信号。用于 LCD 接口的 FSMC 信号如下所述:
- FSMC [D0:D15]:FSMC 数据总线:16 位宽
- FSMC NEx:FSMC 片选
- FSMC NOE:FSMC 输出使能
- FSMC NWE:FSMC 写使能
- FSMC Ax:地址线,用于在 LCD 寄存器和 LCD 显示 RAM 之间进行选择,其中 x 可以是 0 到 25
信号名称中的前缀“N”表示信号低电平有效
LCD 地址取决于使用的 FSMC NOR Flash/PSRAM bank (NEx) 和选择的地址 (Ax) 来驱动 LCD RS 引脚。
例如:NE2 和 A4,LCD 基地址为 0x6400 0000 和 0x6400 0020;NE4 和 A0,LCD 基地址为 0x6C00 0000 和 0x6C00 0002。
2.3 将FSMC连接到Intel 8080-like (I80) 接口LCD
LCD Intel 8080 类 MPU 接口基于四个控制信号和一个数据总线,其宽度取决于 MPU 接口能力。如下表所示:
| LCD信号 | 信号描述 |
|---|---|
| RS | LCD 寄存器选择 |
| D0-D15 | 数据 D0-D15 |
C
S
‾
\overline {CS}
CS | 片选 |
|
R
D
‾
\overline {RD}
RD | 读操作:低电平有效 |
|
W
R
‾
\overline {WR}
WR | 写操作:低电平有效 |
FSMC 和 LCD Intel 8080 之间的典型连接如下图所示:

2.4 将 FSMC 连接到类似摩托罗拉 6800 (M68) 接口LCD
类似于 LCD 摩托罗拉 6800 的 MPU 接口基于四个控制信号和一个数据总线,其宽度取决于 MPU 接口能力。 如下表所示:
| LCD信号 | 信号描述 |
|---|---|
| RS | LCD 寄存器选择 |
| D0-D15 | 数据 D0-D15 |
C
S
‾
\overline {CS}
CS | 片选 |
| E | 读写启用/禁用 |
|
R
W
‾
R\overline {W}
RW | 读操作/写操作 |
下面两张图显示了 FSMC 和 类似 Intel 6800接口的 LCD之间的典型连接:


2.5 将LCD与STM32F10xxx的FSMC连接
STM32F101VC/D/E 和 STM32F103VC/D/E 是采用 100 引脚封装的高密度器件。 它们的 FSMC 信号数量减少。 下图描述了如何在100 引脚封装的器件上将彩色 LCD 与 FSMC 连接。

3、STM32CubeIDE中配置FSMC
STM32CubeIDE创建工程、系统配置、调试配置,在这里不再做介绍,请参考:
- STM32F1与STM32CubeIDE快速入门-开发环境搭建
- STM32F1与STM32CubeIDE快速入门-GPIO概述与点亮LED
- STM32F1与STM32CubeIDE快速入门-USART/UART串口通信
1)FSMC配置
本次使用开发板的硬件电路如下:

TFT-LCD驱动器芯片为ILI9325,分辨为:240x320。请根据使用的硬件进行配置。

FSMC的参数配置如下:

保存配置生成代码。
4、TFT-LCD的驱动实现
4.1 TFT-LCD驱动基本定义
1 | #ifndef \_ILI9325\_FSMC\_H\_ |
4.2 TFT-LCD寄存器操作
1 | // 向LCD发送命令 |
4.3 LCD初始化
1 | void LCD\_Init(void) { |
4.4 颜色转换
1 | uint32\_t RGB(uint8\_t r, uint8\_t g, uint8\_t b) |
4.5 基本图元绘制
4.5.1 填充矩形
1 | void LCD\_Rect\_Fill(uint16\_t Xpos, uint16\_t Ypos, uint16\_t Width, uint16\_t Height, uint32\_t color24) |
4.5.2 绘制直线
1 | void LCD\_Line(uint16\_t x1, uint16\_t y1, uint16\_t x2, uint16\_t y2, uint8\_t size, uint32\_t color24) |
4.5.3 绘制三角形
1 | void LCD\_Triangle(uint16\_t x1, uint16\_t y1, uint16\_t x2, uint16\_t y2, uint16\_t x3, uint16\_t y3, uint8\_t size, uint32\_t color24) |
4.5.4 填充三角形
1 | #define ABS(x) ((x) > 0 ? (x) : -(x)) |
4.5.5 绘制矩形
1 | void LCD\_Rect(uint16\_t x, uint16\_t y, uint16\_t w, uint16\_t h, uint8\_t size, |
4.5.6 绘制椭圆
1 | void LCD\_Ellipse(int16\_t x0, int16\_t y0, int16\_t rx, int16\_t ry, uint8\_t fill, |
4.5.7 绘制圆形
1 | void LCD\_Circle(uint16\_t x, uint16\_t y, uint8\_t radius, uint8\_t fill, |
4.5.8 绘制圆角矩形
1 | void LCD\_Rect\_Round(uint16\_t x, uint16\_t y, uint16\_t length, uint16\_t width, |
4.5.9 填充圆角矩形
1 | void LCD\_Rect\_Round\_Fill(uint16\_t x, uint16\_t y, uint16\_t length, |
4.5.10绘制字符及字体设置
1 | static void LCD\_Char(int16\_t x, int16\_t y, const GFXglyph \*glyph, |
4.5.11 设置屏幕方向
1 | void LCD\_SetOrientation(uint8\_t orientation) { |
4.6 驱动测试
在main.c代码中添加如下代码:
1 | /\* Private includes ----------------------------------------------------------\*/ |
4.7 字体数据
1)Font_8_Default
1 | const uint8\_t Font_8_DefaultBitmaps[] = { |
2)Font_5_Org
1 | const uint8\_t Font_5_OrgBitmaps[] = { |
3)Font_9_Serif_Bold
1 | const uint8\_t Font_9_Serif_BoldBitmaps[] = { |
4)Font_32_Segment_7_Num_Plus
1 | const uint8\_t Font_32_Segment_7_Num_PlusBitmaps[] = { |
5、STM32F1与STM32CubeIDE系列文章
5.1 STM32F1与STM32CubeIDE快速入门
- 5.1.5 STM32F1与STM32CubeIDE快速入门-中断、NVIC与EXTI概述 |
- 5.1.6 STM32F1与STM32CubeIDE快速入门-外部中断配置与功能实现
- 5.1.7 STM32F1与STM32CubeIDE快速入门-USART/UART串口通信
- 5.1.8 STM32F1与STM32CubeIDE快速入门-定时器(Timer)概述
- 5.1.9 STM32F1与STM32CubeIDE快速入门-定时器定时模式
- 5.1.10 STM32F1与STM32CubeIDE快速入门-定时器计数模式
- 5.1.11 STM32F1与STM32CubeIDE快速入门-定时器PWM模式
- 5.1.12 STM32F1与STM32CubeIDE快速入门-定时器编码(Encoder)模式
- 5.1.13 STM32F1与STM32CubeIDE快速入门-定时器输入捕获模式(Input Capture Mode)实现频率计数
- 5.1.14 STM32F1与STM32CubeIDE快速入门-DMA概述
- 5.1.15 STM32F1与STM32CubeIDE快速入门-USART通过DMA进行数据接收与发送
- 5.1.16 STM32F1与STM32CubeIDE快速入门-ADC概述
- 5.1.17 STM32F1与STM32CubeIDE快速入门-ADC轮询方式实现PWM调光器
- 5.1.18 STM32F1与STM32CubeIDE快速入门-ADC中断方式实现PWM调光器
- 5.1.19 STM32F1与STM32CubeIDE快速入门-ADC通过DMA方式与PWM实现调光器
- 5.1.20 STM32F1与STM32CubeIDE快速入门-DAC概述
- 5.1.21 STM32F1与STM32CubeIDE快速入门-SPI概述
- 5.1.22 STM32F1与STM32CubeIDE快速入门-M25P16串行闪存驱动
- 5.1.23 STM32F1与STM32CubeIDE快速入门-I2C概述
- 5.1.24 STM32F1与STM32CubeIDE快速入门-I2C驱动LCD1602显示屏(基于PCF8574)
- 5.1.25 STM32F1与STM32CubeIDE快速入门-独立看门狗(IWDG)
- 5.1.26 STM32F1与STM32CubeIDE快速入门-OLED-SSD1306-I2C驱动
- 5.1.27 STM32F1与STM32CubeIDE快速入门-USB虚拟串口(CDC)
- 5.1.28 STM32F1与STM32CubeIDE快速入门-SD卡驱动-SDIO+FatFs
- 5.1.29 STM32F1与STM32CubeIDE快速入门-USB+SDIO+FatFs实现U盘
- 5.1.30 STM32F1与STM32CubeIDE快速入门-DWT精确延时
- 5.1.31 STM32F1与STM32CubeIDE快速入门-芯片序列号读取
5.2 STM32F1与STM32CubeIDE编程实例
- 5.2.1 STM32F1与STM32CubeIDE编程实例-CMSIS-RTOS V2配置(基于FreeRTOS)
- 5.2.2 STM32F1与STM32CubeIDE编程实例-CMSIS-RTOS V2-线程管理
- 5.2.3 STM32F1与STM32CubeIDE编程实例-CMSIS-RTOS v2-延时
- 5.2.4 STM32F1与STM32CubeIDE编程实例-CMSIS-RTOS V2-定时器管理
- 5.2.5 STM32F1与STM32CubeIDE编程实例-CMSIS-RTOS V2-互斥(Mutex)管理
- 5.2.6 STM32F1与STM32CubeIDE编程实例-CMSIS-RTOS V2-信号量(Semaphore)
- 5.2.7 STM32F1与STM32CubeIDE编程实例-CMSIS-RTOS V2-消息队列
- 5.2.8 STM32F1与STM32CubeIDE编程实例-CMSIS-RTOS V2-事件标志(Event Flags)
文章来源: https://iotsmart.blog.csdn.net/article/details/124835147