优胜从选择开始,我们是您最好的选择!—— 中州期刊联盟(新乡市博翰文化传媒有限公司)
0373-5939925
2851259250@qq.com
我要检测 我要投稿 合法期刊查询
您的位置:网站首页 > 优秀论文 > 其他论文 > 正文

基于FSMC总线的嵌入式系统多显示终端驱动设计

作者:黄克亚来源:《液晶与显示》日期:2022-08-09人气:1451

嵌入式系统均需配备显示设备以指示程序运行状态和输出控制结果。薄膜晶体管液晶显示器(TFT-LCD)因为功耗低、辐射小、颜色鲜艳、显示内容丰富等优点而成为嵌入式系统的主流,但是其控制复杂,需要移植厂家提供的底层驱动程序1-2。数码管亮度高、稳定可靠、价格便宜,在家用电器、工业控制和传感检测等领域有着广泛的应用,是嵌入式学习的经典器件。

为提高数据传输速度,降低软硬件设计难度,并行接口是数码管、液晶显示器与微控制器(MCU)连接的首选。但并口需要占用大量I/O口资源,以6位数码管为例,共有6个位选信号和8个段选信号,TFT-LCD显示模块则有6个控制信号和16位数据线。设计系统时,为了编程方便,一般希望位选信号、段选信号、LCD数据线分别占用连续的16位端口,而这些I/O引脚又离散地分布于芯片的四周,上述技术需求给微控制器引脚资源分配和PCB布线带来极大的挑战,同时降低了实验装置的可靠性,而破解这一难题的方法就是将二者均挂接在FSMC总线上,同时进行信号线复用。

2 FSMC总线

灵活静态存储控制器(Flexible Static Memory Controller, FSMC)能够连接同步、异步存储器和16位PC存储卡,支持SRAM、NAND Flash、NOR Flash和PSRAM等类型存储器。FSMC连接的所有外部存储器共享地址、数据和控制信号,但有各自的片选信号,所以FSMC一次只能访问一个外部器件3-4

图1所示,FSMC将外部存储器1 GB空间划分为固定大小为256 MB的4个存储块(Bank),Bank1可连接多达4个NOR Flash或PSRAM/SRAM存储器件,Bank2和Bank3用于访问NAND Flash存储器,每个存储区域连接一个设备,Bank4用于连接PC Card设备。其中Bank1又被分为4个区(Sector),每个区管理64 MB空间,每个区都有独立的寄存器对所连接的存储器进行配置。

图1  FSMC存储区域划分

Fig.1  Division of FSMC storage area


表1所示,Bank1的256 MB空间由28根地址线(HADDR[27:0])寻址。这里HADDR是内部AHB总线地址,其中HADDR[25:0]来自外部存储器地址FSMC_A[25:0],对应引脚地址信号;而HADDR[27: 26]对4个区进行寻址,由系统自动完成,无外部引脚对应信号。

表1  Bank1存储区选择表
Tab.1  Bank1 storage area selection table
Bank1所选区片选信号地址范围HADDR
[27:26][25:0]
第1区FSMC_NE10X6000 0000-0X63FF FFFF00FSMC_A[25:0]
第2区FSMC_NE20X6400 0000-0X67FF FFFF01
第3区FSMC_NE30X6800 0000-0X6BFF FFFF10
第4区FSMC_NE40X6C00 0000-0X6FFF FFFF11

在设计或分析系统时需要特别注意HADDR[25:0]的对应关系。

当Bank1连接的是8位宽度存储器时,总线和外设均采用字节编址,二者一一对应,即:HADDR[25:0]→FSMC_A[25:0]。

当Bank1连接的是16位宽度存储器时,总线字节编址,存储器双字节寻址,此时总线26地址中最低位HADDR[0]用来表示16位数据的高位或低位,高25位HADDR[25:1]对应16位宽的存储器单元地址,即:HADDR[25:1]→FSMC_A[24:0],相当于总线地址右移了一位5-6

3 系统硬件设计

作者设计的嵌入式系统实验装置结构框图如图2所示,其重点展示TFT-LCD和数码管的FSMC总线连接关系,其他模块,如CMSIS-DAP调试器、LED流水灯、独立/矩阵按键等虽也为实验装置重要组成部分,但不是本文讨论重点,故未绘制。实验装置主控芯片选择基于ARM Cortex-M4内核,性能出色的STM32F407ZGT6微控制器,该芯片拥有完备的FSMC接口系统,块1的4个子区可同时连接4个NOR Flash/PSRAM/SRAM存储设备。实验装置配备双显示终端,数码显示器为6位14.22 mm (0.56 in)共阳数码管,PNP三极管S8550驱动;液晶显示器为70.82 mm (2.8 in)全彩TFT-LCD显示模块,240像素×320像素,2.8~3.3 V供电,ILI9341驱动,16位8080并行接口。

图2  实验装置FSMC连接结构框图

Fig.2  FSMC connection structure block diagram of experimental device


3.1 FSMC与TFT-LCD连接

在STM32内部,FSMC起到桥梁作用,其一端通过内部高速总线AHB连接到Cortex内核,另一端则是面向扩展存储器的外部总线,既能够进行信号类型的转换,又能够进行信号宽度和时序的调整,提供多种读写模式,使之对内核而言没有区别7-8。模式A比较适合连接至Bank1的NOR Flash/PSRAM/SRAM存储器,其读写时序如图3所示9。信号线主要包括26位地址线A[25:0],16位数据线D[15:0],片选信号NE[x],输出使能NOE,写入使能NEW。

图3  FSMC模式A读写时序

Fig.3  Read and write timing of FSMC mode A


TFT-LCD显示模块信号线包括:数据线D[15:0],寄存器/存储器选择RS,读使能RD,写使能WR,片选CS,复位RST。通常使用标准的16位8080并口与微控制器连接,其读写时序如图4所示10

图4  8080接口读写时序

Fig.4  Read and write timing of 8080 interface


对比图3图4读写时序和二者控制信号可以发现,TFT-LCD模块,除了已连接至系统复位电路的RST信号外,其他信号均可由FSMC接口提供,所以FSMC连接PSRAM/SRAM的工作模式适合于连接TFT-LCD显示模块。如图2所示,项目实施时选择FSMC总线的Bank1.Sector4连接TFT-LCD,FSMC_NE4接LCD片选信号CS,FSMC_NOE接LCD读引脚RD,FSMC_NWE接LCD写引脚WR,选择FSMC_A6地址线连接LCD的寄存器/存储器选择信号RS,FSMC_D[15:0]接LCD的16位数据线D15~D0,LCD工作于16位8080接口模式。

3.2 FSMC与数码管连接

图2所示,数码管和TFT-LCD同时挂接在STM32F4的FSMC总线上,二者共享数据线,为使二者输出信号互不影响,需要将向数码管送出的数据信号进行锁存,锁存器选择2片74HC573D,锁存引脚LE高电平传输,低电平封锁。选择FSMC总线的Bank1.Sector3连接6位共阳数码管,所以FSMC_NE3作为数码管的片选信号,但是NE3是低电平有效,与锁存器传输信号正好相反,所以FSMC_NE3需要经反相器U2连接U3的两片74HC573D的锁存引脚LE。由于只需要一路反相器,系统实施时采用由1个PMOS管和1个NMOS管构成的单路CMOS反相器。数码管8个段选线和6个位选线共14条信号线由FSMC_D[13:0]控制,需要经过锁存模块U3锁存,FSMC_D[7:0]接一片锁存器输入端,锁存器输出端接数码管段选线dp~a,FSMC_D[13:8]接另一片锁存器的输入端,锁存器的输出端接数码管位选线DS6~DS1。

上述设计实现了数码管和TFT-LCD数据线和控制线的时分复用,减少了微控制器GPIO需求,节约了CPU资源,降低了PCB布线难度,提升了系统可靠性。

4 系统软件设计

4.1 FSMC初始化

系统底层软件设计的任务是完成显示设备的读写,因为显示设备均挂接在FSMC总线上,所以要实现显示设备数据访问,首先就需要FSMC初始化。

4.1.1 FSMC读写时序

FSMC有多种时序模型用于NOR Flash/PSRAM/SRAM的访问,对TFT-LCD来说,读取操作比较慢,写入操作比较快,使用模式A的读写分离时序控制比较方便,可以使读写操作均获得较高性能表现。数码管控制只涉及写,且没有速度要求,任何模式均可以满足要求,为了和LCD保持一致,也采用模式A进行控制。

访问NOR Flash/PSRAM/SRAM的模式A的读取时序如图3(a)所示,写入时序如图3(b)所示,在这两个时序中都只需要设置地址建立时间ADDSET和数据建立时间DATAST这两个参数,它们都用HCLK的时钟周期个数表示,其中ADDSET最小值为0,最大值为15,DATAST最小值为1,最大值为255。根据参考文献[9]说明,实际的地址建立时间是ADDSET个HCLK周期,数据建立时间是(DATAST+1)个HCLK周期。

4.1.2 FSMC初始化

FSMC工作模式灵活多变,控制寄存器众多,直接操作寄存器很难完成,一般采用基于库函数的开发方式,而库函数又分为标准库和硬件抽象层(Hardware Abstraction Layer,HAL)库。借助STM32推出的图形化配置软件STM32CubeMX的HAL库开发,只需要输入几个关键参数,即可自动完成FSMC接口初始化工作。自动化程度高,是未来嵌入式开发的技术方向。

(1) 数码管FSMC初始化设置

在STM32CubeMX软件中,打开图5所示的设置界面,首先设置Mode选项内容,配置NOR Flash/PSRAM/SRAM/ROM/LCD 3,即选择Bank1.Sector3连接数码管,片选信号:NE3,存储器类型:LCD Interface,LCD的RS信号:A6,数据宽度:16位。随后配置Configuration选项内容,其中大部参数采用默认即可,使能扩展模式,使其支持分开设置读写时序。对数码管的访问只有写不需要读,所以读时序参数可以任意设置;写时序中无需送出地址信号,所以写时序地址建立时间设置为0,以使其选中芯片后立即送出数据。因片选信号需要经过反相器送给锁存芯片以完成数据传输,所以数据送出后需要保持一定的时间,数据建立时间需要设置大一些,作者设置的是160。所有需要配置的信息在图5中均使用红色框线标出。

图5  数码管FSMC初始化界面

Fig.5  FSMC initialization interface of digital tube


(2) LCD的FSMC初始化设置

图6所示,TFT-LCD的FSMC初始化基本上和图5的数码管FSMC初始化设置是一样的,不同的地方均使用蓝色框线标出。LCD连接到FSMC的Bank1.Sector4,所以此时需要配置NOR Flash/PSRAM/SRAM/ROM/LCD 4,片选信号也相应地调整为NE4。FSMC总线选择模式A分开设置读写时序控制LCD显示屏,由于LCD读速度要比写速度慢得多,所以在设置读时序时时间参数尽量设置大一些,作者将ADDSET和DATAST分别设置为15和59。对于STM32F407微控制器,在168 MHz主频时,HCLK约为6 ns,其对应的地址建立时间为15×6 ns=90 ns,数据建立时间为(59+1)×6 ns=360 ns。LCD写时序的时间参数设置适当小一些,作者将ADDSET和DATAST分别设置为9和8,两个参数对应的时间数值均约为54 ns。上述参数设置对70.82 mm (2.8 in)TFT-LCD的常规驱动芯片ILI9341来说可以保证其稳定运行,并留有足够的裕量。

图6  LCD的FSMC初始化界面

Fig.6  FSMC initialization interface of LCD


完成上述配置后,STM32CubeMX会自动将FSMC总线用到的GPIO引脚配置为FSMC复用推挽模式,无须上拉或下拉,并在FSMC初始化程序中完成调用,大大减轻了用户编程工作量。

4.2 数码管显示程序设计

STM32CubeMX完成FSMC初始化后,生成Keil MDK工程,在工程的主函数中会自动调用初始化函数,此时就可以直接访问数码管或LCD。6位共阳数码管采用PNP三极管S8550驱动,所以位选码是低电平有效,段选码也是低电平相应笔划点亮。假设我们需要将DS1、DS3、DS5三个数码管上面均显示的数字“1”,则应送出的显示码如表2所示,即向FSMC总线送出一个16进制数据0xEAF9,即可实现显示控制。

表2  数码管控制实例显示码对应表
Tab.2  Corresponding table of digital tube control example display code
名称//DS6DS5DS4DS3DS2DS1dpgfedcba
FSMCD15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0
数值1110101011111001
HEXEAF9

数据管是挂接在FSMC总线的Bank1.Sector3上的,由表1可知,这一区域对应的地址范围为0x6800 0000-0x6BFF FFFF,只要向这个64 MB单元中任一地址送数据,即可将显示码发送至数据线,并自动产生片选信号FSMC_NE3,反相后形成锁存信号,完成数据锁存。为此选择这一区域的首地址0x6800 0000,转换为指针型常量,将其赋值给uint16_t型指针型变量SEG_ADDR,向该地址写数据即可实现显示控制,十分简单。

4.3 LCD显示程序设计

相比于数码管显示控制,LCD显示程序则要复杂得多,分为底层驱动、基础显示和高层应用3部分。基础显示程序和高层应用程序一般由显示屏厂家直接提供,且在移植了底层驱动程序之后,一般无需任何更改,就可直接使用,所以本文重点讨论的是基于FSMC的底层驱动程序的实现。

对TFT-LCD寄存器和存储器一体化控制简单、便捷的方法是定义一个LCD数据访问结构体,包含寄存器和存储器2个16位无符号型成员。并确定该结构体的基地址为0x6C00007E,其中HADDR[27:‍26]=11,表明选择的是Bank1.Sector4,即片选信号FSMC_NE4有效。

结构体第一个成员LCD_REG地址和LCD结构体的基地址相同,即:0x6C00007E,第二个成员LCD_RAM地址为基地址加2,即:0x6C000080。如果只观察HADDR低8位,即LCD->LCD_REG的HADDR[7:‍0]=0111 1110,LCD->LCD_RAM‍的‍HADDR‍[7:‍0]‍=1000 0000,由于FSMC外接16位存储器时内外地址对应关系为HADDR[25:1]→FSMC_A[24:0],相当于右移1位。由此可知LCD->LCD_REG的FSMC_A[6:‍0]=011 1111,FSMC_A6(RS)=0,读写LCD寄存器;LCD->LCD_RAM的FSMC_A[6:‍0]=100 0000,FSMC_A6(RS)=1,读写LCD存储器。在FSMC配置过程中选择不同的地址线连接LCD的RS信号,其基地址的确定亦可举一反三。

有了上述定义并确定好基地址之后,通过选择结构体的不同成员,即可实现对不同存储对象的访问,编程简洁、高效、直观。结合LCD驱动芯片ILI934110控制时序,将读写控制代码封装成LCD基本读写函数,即为LCD底层驱动程序,供基础显示程序和高层应用程序调用。

由于技术发展历史原因,一般LCD控制程序是用标准库编写的,所以还需将标准库程序向HAL库程序移植,一般步骤为:在STM32CubeMX中配置并自动生成FSMC初始化代码,含LCD和数码管两部分;定义LCD结构体、确定基地址,编写LCD底层驱动程序;将原LCD初始化程序中的FSMC初始化和复用引脚配置代码删除,其余部分保留;移植基础显示和高层应用代码,经过上述步骤即可完成LCD显示代码移植。

5 系统运行测试

为检验电路功能和观察运行效果,依据系统设计成果,完成样品生产、组装和测试工作。

第一步:数码管显示测试。编写数码管动态显示时间程序,在6位数码管上显示时、分、秒数值,各占两位数码管,且在小时和分钟的末尾显示一个小数点。

第二步:LCD显示测试。在完成显示程序移植之后,调用显示函数分别进行字符、字符串、整型、浮点数等文字信息显示测试;调用图形处理函数进行画点、画线、画圆、矩形、三角形、指定区域填充等图形显示测试;制作汉字字库并存于字库文件当中,调用中文显示函数进行多种字号汉字显示测试。

第三步:综合测试。设计了一个综合实例,系统主程序是一个电子万年历,实时采集现场温湿度信息,合并实验装置设计信息,所有信息均显示于TFT-LCD显示屏上,同时将当前时间高亮显示于数码管,便于远距离观看,测试结果如图7所示。由于项目综合性较强,主程序处理任务较多,而数码管动态显示是阻塞运行的,CPU占有率较高,作者采用定时器中断的方式依次刷新需要显示的数码管,在主程序中只需要对显示数组赋值即可,使两个显示设备显示控制方式基本相同,提升了系统运行效率。

图7  实验装置综合测试图

Fig.7  Comprehensive test diagram of experimental device


第四步:对比测试。分别使用FSMC总线、GPIO并口、SPI串口连接数码管和TFT-LCD双显示设备,运行测试程序,使用STM32定时器记录LCD刷整屏时间,测试条件和测试结果如表3所示。由表3可知,SPI串口显示速度很慢,对于有刷新频率要求的场合原则上不使用。FSMC接口和GPIO并口测试时使用相同的TFT-LCD模块和微控制器,工作于同一主频,使测试数据更具可比性。由表中数据计算得出,FSMC接口相比于微控制器并口控制,减少了38.2%的GPIO引脚资源占有率,LCD刷屏速度提高了17.6倍。以上数据视软硬件设置情况会有小幅波动,但是大致范围不会变化。

表3  显示终端驱动接口对比测试
Tab.3  Comparison test of display terminal driver interface
驱动接口TFT-LCD显示模块微控制器及主频I/O引脚数刷屏时间/ms
FSMC70.82 mm (2.8 in) 240×320 ILI9341STM32F407ZGT6 168 MHz21 (20+01)2.9
并口70.82 mm (2.8 in) 240×320 ILI9341STM32F407ZGT6 168 MHz34 (20+14)53.9
SPI60.96 mm (2.4 in) 240×320 ILI9341STM32F103ZET6 72 MHz19 (05+14)1 497.2

测试结果表明,采用FSMC总线同时连接数码管和TFT-LCD显示屏各项显示功能均很好完成,刷新速度快,画面清晰流畅,系统稳定可靠,项目设计达到了预期目标。

6 结论

本文设计了一款嵌入式系统多显示终端实验装置,将数码显示器和TFT-LCD均挂接在STM32微控制器的高速FSMC总线上,实现数据信号和控制信号时分复用。LCD的8080控制时序和数码显示器地址锁存信号均由硬件自动产生,FSMC初始化亦可通过STM32CubeMX图形化配置工具轻松完成,软件设计工作量显著减少。相比于微控制器直接并口控制,减少了38.2%的GPIO引脚资源占有率,LCD刷屏速度提高了17.6倍。系统设计方案具有较高的数据访问性能,降低了软硬设计难度,提高了系统可靠性。


关键字:优秀论文

网络客服QQ: 沈编辑

投诉建议:0373-5939925    投诉建议QQ:

招聘合作:2851259250@qq.com (如您是期刊主编、文章高手,可通过邮件合作)

地址:河南省新乡市金穗大道东段266号中州期刊联盟 ICP备案号:豫ICP备2020036848

【免责声明】:中州期刊联盟所提供的信息资源如有侵权、违规,请及时告知。

版权所有:中州期刊联盟(新乡市博翰文化传媒有限公司)

关注”中州期刊联盟”公众号
了解论文写作全系列课程

核心期刊为何难发?

论文发表总嫌贵?

职院单位发核心?

扫描关注公众号

论文发表不再有疑惑

论文写作全系列课程

扫码了解更多

轻松写核心期刊论文

在线留言