基于stm32在lcd上显示sd卡中bmp图片的设计.docx
《基于stm32在lcd上显示sd卡中bmp图片的设计.docx》由会员分享,可在线阅读,更多相关《基于stm32在lcd上显示sd卡中bmp图片的设计.docx(42页珍藏版)》请在冰豆网上搜索。
基于stm32在lcd上显示sd卡中bmp图片的设计
上海第二工业大学
实训报告
课程名称:
电信专业综合实践
学生姓名:
xxxxxx
学号:
201x4820xxx201x4820xxx201x4820xxx
学院名称:
工学部
专业班级:
xx电信A1
基于STM32在LCD上显示SD卡中BMP图片的设计
摘要:
设计了一种基于STM32的处理器的按键式控制的BMP图片切换系统。
在设计过程中采用了SD卡中读取BMP格式图片及汉字字库,使LCD屏幕显示相关提示内容及设定格式的BMP图片。
完成了基于ARM最新Cortex-M3内核的处理器STM32的BMP图片切换系统的硬件电路和软件程序的设计,实现了一个能在内存有限的片上系统中进行BMP图片切换的系统。
关键词:
BMP图片;SD卡;ARM微控制器;STM32;片上系统
第一章绪论
1.1本课题设计的背景
随着国民经济的起飞,现代社会的不断进步,广告的在新时期又有了新的发展。
进入新世纪LCD显示屏的技术和产业都取得了长足的发展,作为重要的现代信息发布媒体之一,LCD显示屏在证券交易、金融、交通、体育、广告等领域被广泛的应用。
伴随社会信息化进程的推进,LCD显示屏技术也在不断的推陈出新,应用领域愈加广阔。
基于STM32的LCD显示可以更好的满足各种需求,也更便于操作和实现。
现基于STM32在液晶显示屏幕上显示文本及图形。
目前,显示技术和显示工业的发展迅速。
显示技术是传递视觉的信息技术。
液晶显示器件LCD是当今最有发展前途的一种平板显示器件,它具有很多独到的优异特性。
它具有显示信息多、易于多彩化、体积小、重量轻、功耗低、寿命长、价格低、无辐射、无污染、接口控制方便等优点。
截至目前,我国在液晶显示取得较大进步,我国LCD产业已经走过了近30年的历程.经历几次大的投资浪潮之后,我国内地已经成为世界最大的TN-LCD(扭曲液晶显示器)生产基地和主要的STN-LCD(超扭曲液晶显示器)生产基地,并且从2003年开始,涉足TFT-LCD(薄膜晶体管液晶显示器)领域.
1.2本课题设计内容
本次设计采用STM32ISO开发板,实现一个从SD卡读取图片内容及汉子库在LCD显示屏上显示由按键控制图片切换的功能。
本实验用到的硬件部分主要有STM32开发板、USB线、LCD液晶模块、SD卡、J-Link仿真器等主要部分组成。
STM32开法板涉及Keil5程序的读取,SD卡读取裁剪过的图片,最后通过J-Link仿真器加载后,在LCD显示屏上显示相关内容,中英文内容提示通过设置延时衔接,图片通过按键直接控制。
第二章实验方案总体设计
2.1详细设计
组成框图:
2.2相关硬件简介
本节实验功能简介:
开机的时候先初始化SD卡,如果SD卡初始化完成,则读取扇区0的数据,然后通过串口打印到电脑上。
如果没初始化通过,则在LCD上提示初始化失败。
同样用DS0来指示程序正在运行。
所要用到的硬件资源如下:
●STM32开发板
●USB线
●LCD液晶模块
●SD卡
●J-Link仿真器
2.2.1STM32开发板
STM32F103系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3。
该系列芯片按片内Flash的大小可分为三大类:
小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K)。
芯片集成定时器,CAN,ADC,SPI,I2C,USB,UART,等多种功能。
分为三大类:
LD(小于64K),
MD(小于256K),
HD(大于256K),
STM32F103VET6类属第三类。
STM32F103ZET6芯片介绍
●基于ARMCortex-M3核心的32 位微控制器,LQFP-144封装.
●512K 片内FLASH(相当于硬盘),64K片内RAM(相当于内存) ,片内FLASH 支持在线编程(IAP).
●高达72M 的频率,数据,指令分别走不同的流水线,以确保 CPU运行速度达到最大化 .
●通过片内BOOT区,可实现串口下载程序(ISP).
●片内双RC 晶振,提供8M和32K 的频率.
●支持片外高速晶振(8M),和片外低速晶振(32K).其中片外低速晶振可用于 CPU 的实时时钟,带后备电源引脚,用于掉电后的时钟行走.
●42个16位的后备寄存器(可以理解为电池保存的RAM),利用外置的纽扣电池,和实现掉电数据保存功能.
●支持 JTAG,SWD调试.配合廉价的J-LINK,实现高速低成本的开发调试方案.
●多达80个IO(大部分兼容5V逻辑),4个通用定时器,2个高级定时器,2个基本定时器,3路SPI接口,2路I2S 接口,2路I2C接口,5路USART,一个USB从设备接口,一个 CAN接口,SDIO接口,可兼容SRAM,NOR和NANDFlash 接口的16位总线-FSMC.
●3路共16通道的12位AD输入,2路共2 通道的12位 DA 输出.支持片外独立电压基准.
●CPU操作电压范围:
2.0-3.6V
STM32开发板引脚图
2.2.2USB线
USB开发涉及主机和设备,为了避免开发驱动程序,使用Windows自带的驱动程序。
所以设备枚举成HID类设备。
USB鼠标就是标准的USB-HID设备。
不过操作系统阻止了应用程序直接访问USB鼠标返回的报告。
所以本例使用自定义HID设备。
一来免去了开发驱动程序,二来自定义的HID设备应用程序和设备可以自由收发数据(仅指数据内容)。
USB是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。
USB接口即插即用和热插拔功能。
USB接口可连接127种外设,如鼠标和键盘等。
USB是在1994年底由英特尔等多家公司联合在1996年推出后,已成功替代串口和并口,已成为当今电脑与大量智能设备的必配接口。
USB版本经历了多年的发展,到如今已经发展为3.0版本. 对于大多数工程师来说,开发USB2.0接口产品主要障碍在于:
要面对复杂的USB2.0协议、自己编写USB设备的驱动程序、熟悉单片机的编程。
这不仅要求有相当的VC编程经验、还能够编写USB接口的硬件(固件)程序。
所以大多数人放弃了自己开发USB产品。
为了将复杂的问题简单化,西安达泰电子特别设计了USB2.0协议转换模块。
USB20D模块可以被看作是一个USB2.0协议的转换器,将电脑的USB2.0接口转换为一个透明的并行总线,就象单片机总线一样。
从而几天之内就可以完成USB2.0产品的设计。
本实验用到的USB线
2.2.3液晶显示器LCD控制器简介
液晶显示器(LiquidCrystalDisplay:
LCD)的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。
LCM(LCDModule)即LCD显示模组、液晶模块,是指将液晶显示器件,连接件,控制与驱动等外围电路,PCB电路板,背光源,结构件等装配在一起的组件。
LCD,由于液晶显示屏功耗低、体积小,承载的信息量大,因而被广泛用于信息输出、与用户进行交互。
由于STM32内部没有集成专用的液晶屏和触摸屏的控制接口,所以在显示面板中应自带含有驱动芯片的驱动电路(液晶屏和触摸屏的驱动电路是独立的),STM32芯片通过驱动芯片来控制液晶屏和触摸屏。
以本实验3.2寸液晶屏(240*320)为例,它使用ILI9341芯片控制液晶屏,通过XPT2046芯片控制触摸屏。
LCD为非发光性的显示装置,它需要借助背光源才能达到显示功能,LED控制器就是用来控制液晶屏中的LED背光源。
液晶显示器在内部电路结构上主要有以下几个部分构成:
1、 驱动板(也叫主板):
主要是用以接收、处理从外部送进来的模拟(VGA)或者数字(DVI)视频信号,并通过屏线送出信号去控制液晶屏(PANEL)正常工作。
驱动板上含有MCU单元,它是液晶显示器的检测控制中心和大脑。
2、 电源板:
用于将90~240V 的交流电压转变为12V、5V、3V 等的直流电供给显示器工作。
本实验用的STM32开发板
3、 背光板(也叫高压板):
用于将主板或电源板输出的12V 的直流电压转变为PANEL 需要的高频的1500~1800V 的高压交流电,用于点亮PANEL的背光灯。
电源板和背光板有时会做在一起也就是所谓的电源背光二合一板。
4、 液晶屏:
液晶显示用模块,它是液晶显示器的核心部件,其包含液晶板和驱动电路。
其中,液晶屏是液晶显示器内部最为关键的部件,它对液晶显示器的性能和价格具有决定性的作用。
本实验对应的背光板程序(程序很多不一一列举,仅取部分)
(1)ILI9341控制器结构
液晶屏的控制芯片内部结构非常复杂,最主要的是位于中间GRAM(GraphicsRAM),可以理解为显存。
GRAM中每个存储单元都对应着液晶面板的一个像素点。
它右侧的各种模块共同作用把GRAM存储单元的数据转化成液晶面板的控制信号,使像素点呈现特定的颜色,而像素点组合起来则成为一幅完整的图像。
接口与MCU进行通讯,MUC通过8080接口与ILI9341进行通讯,从而访问它的控制寄存器(CR)、地址计数器(AC)、及GRAM。
(2)像素点的数据格式
图像数据的像素点由红(R)、绿(G)、蓝(B)三原色组成,三原色根据其深浅程度被分为0~255个级别,它们按不同比例的混合可以得出各种色彩。
ILI9341最高能够控制18位的LCD,但为了数据传输简便,我们采用它的16位控制模式,以16位描述的像素点。
按照标准格式,16位的像素点的三原色描述的位数为R:
G:
B=5:
6:
5,描述绿色的位数较多是因为人眼对绿色更为敏感。
(3)ILI9341的通讯时序
目前,大多数的液晶控制器都使用8080或6800接口与MCU进行通讯,它们的时序十分相似,本实验以ILI9341使用的8080通讯时序进行分析.
ILI9341的8080接口有5条基本的控制信号线:
●用于片选的CSX信号线;
●用于写使能的WRX信号线;
●用于读使能的RDX信号线;
●用于区分数据和命令的D/CX信号线;
●(用于复位的RESX信号线。
见图23-2。
使用18条数据线的8080接口写命令时序
由图可知,写命令时序由CSX信号线拉低开始,D/CX信号线也置低电平表示写入的是命令地址(可理解为命令编码,如软件复位命令:
0x01),以WRX信号线为低,RDX信号为高表示数据传输方向为写入,同时,在数据线[17:
0]输出命令地址,在第二个传输阶段传送的为命令的参数,所以D/CX要置高电平,表示写入的是命令数据。
当我们需要向GRAM写入数据的时候,把CSX信号线拉低后,把D/CX信号线置为高电平,这时由D[17:
0]传输的数据则会被ILI9341保存至它的GRAM中。
(4)给整个屏幕上色
再次回到ILI9341_Init函数,它调用完ILI9341_REG_Config()初始化了液晶屏后,向ILI9341发送了一个命令——写GRAM内容,即后面发送的数据都被解析为显示到屏幕像素点的数据。
代码中使用for循环把语句ILI9341_Write_Data(GBLUE)执行了320*240次,即把所有像素点都显示为GBLUE颜色。
(5)液晶屏画点函数
LCD_Init()初始化了液晶屏后,可以控制液晶上每个像素点的颜色。
如果能够实现一个画点函数,在指定的(x,y)坐标像素点上显示指定的颜色,那么就能够实现一切液晶屏最复杂的显示功能,如在液晶屏指定位置显示形状、文字、图像,都可以通过调用画点函数或以类似的方式控制液晶的像素点。
本实验中的画点函数ILI9341_SetPointPixel()在bsp_ili9341_lcd.c文件中定义,见代码清单(5)。
代码清单(5):
ILI9341_SetPointPixel()函数
代码清单(5)
2.2.4J-LinkARM主要特点
J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。
配合IAR EWAR,ADS,KEIL,WINARM,RealView等集成开发环境支持所有ARM7/ARM9/ARM11,Cortex M0/M1/M3/M4, Cortex A5/A8/A9等内核芯片的仿真,与IAR,Keil等编译环境无缝连接,操作方便、连接方便、简单易学,是学习开发ARM最好最实用的开发工具。
产品规格:
电源USB供电,整机电流 <50mA 支持的目标板电压 1.2 ~ 3.3V,5V兼容 目标板供电电压 4.5 ~ 5V (由USB提供5V) 目标板供电电流 最大300mA,具有过流保护功能 工作环境温度 +5℃~ +60℃ 存储温度 -20℃ ~ +65℃ 湿度 <90%尺寸(不含电缆) 100mm x 53mm x 27mm 重量(不含电缆)70g 电磁兼容 EN 55022, EN 5502 。
J-Link连接线
2.2.5SD卡
SD卡(SecureDigitalMemoryCard)中文翻译为安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。
SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。
SD记忆卡虽然体积小质量轻,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。
SD卡控制器主要实现两大功能,一是产生控制时序,复位、初始化以及设置SD卡;二是从SD卡中读出或写入数据。
当处理器对初始化使能寄存器IER写使能操作时,主控模块启动SDlnit(复位/初始化模块),由SDlnit完成SD卡的初始化工作;当处理器将命令和地址分别写入命令控制寄存器CCR和地址偏移寄存器AOR时,主控模块启动SDcmd(命令控制)模块并将命令和地址传递给后者,由SDcmd模块完成与命令相应的操作。
初始化模块SDlnit的作用是完成SD卡的初始化工作。
当总线接口模块使能SDlnit后,SDinit通过SPITrans模块向SD卡发送复位命令(CMD40),然后等待复位命令的回执。
如果复位成功(返回值为Ox01),则继续向SD卡发送初始化命令(CMD41),然后等待初始化命令的回执并将执行结果返回给主控模块以便通知处理器。
对SD卡进行读写或其他操作前应首先将其初始化。
命令控制模块SDCmd的作用是完成SD卡命令、参数、命令校验值的发送和命令回执的读取(如果是读写操作,还要进行数据的发送和接收)。
主控模块使能SDCmd前会将SD命令、参数传递给后者。
这样SDCmd使能后,首先将得到的命令、参数通过主控模块发送到SD卡,然后等待命令回执。
如果当前命令是读、写之外的其他命令,则将执行结果返回给主控模块即可;如果是读、写命令,则收到正确的命令回执后,还要将数据接收并存至缓存或发送到SD卡。
选择器模块Mux的作用是根据当前操作从SDlnit模块和SDCmd模块的输出信号中选择一路送至SPITrans模块。
双口RAM是SD控制器的缓存,用来存储要送到SD卡和从SD卡上读取的数据。
SD记忆卡的结构
SD记忆卡具有机械式写入保护开关,以免至关重要的数据意外丢失。
卡两侧的导槽可防止其插反了方向,一个凹口可防止器械掉落或撞击时,卡跳出其插孔。
肋条可保护金属触点,以减少静电所引起的损坏可能性,或触碰损坏,如擦伤等。
端子护板:
保护结构可防止处理和插入期间,直接去针接触。
写入保护开关
可设置滑动开关来保护数据
可设置滑动开关来保护数据
可正确插入的楔形设计
这种形状有助于用户插入正确的方向。
凹口设计:
当卡受到物理冲击时,可防止卡从主设备上掉落
导槽:
可保证正确地插入主设备
2.3相关硬件原理图
硬件原理图表示电路板上各器件之间连接,主要涉及了硬件接口及硬件配置以及相应的连接线,方便了解STM32开发板的内部结构及相应芯片构造。
SD卡电路原理图:
SD卡一般支持2种操作模式:
(1)SD卡模式;
(2)SPI模式;
SD卡初始化过程:
(1)初始化STM32的SPI接口 使用低速模式 2. 延时至少74clock
(2)发送CMD0,需要返回0x01,进入Idle状态
(3)循环发送CMD55+ACMD41,直到返回0x00,进入Ready状态
(4)设置读写block大小为512byte
(5)把STM32的SPI设置为高速模式。
SD卡的复位:
(1)上电时要延时足够长的时间给SD卡一个准备过程,根据不同的卡设置不同的延时时间,SD卡初始化第一步在发送CMD命令之前,在片选有效的情况下首先要发送至少74个时钟,否则将有可能出现SD卡不能初始化的问题。
(2)然后发送CMD0,如果返回正确(0x01),在发送CMD1,如果返回正确(0x00)则初始化成功.
(本实验SD初始化对应的部分程序)
SD卡(最大支持32GB外扩)
LCD液晶屏
USB转串口
STM32电源电路由电容滤波、三端电压、电容滤波组成,其中的电容作用都是一样滤除电路中寄生的锯齿波,不同电容的容值通过的频率不一样,所以电路中使用了不同容值的电容把所有的锯齿波变为平滑的脉动波。
电源
在STM32F103系列的GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BSRR)和一个32位锁定寄存器(GPIOx_LCKR)。
GPIO口
按键电路
通过按键来选择系统的功能,完成对系统的访问控制。
本实验使用了两个按键,分别定义为上(key1)、下键(key2),上、下两个按键是对设置或访问的液晶显示对象进行选择,key1控制BMP图片顺序显示,key2控制BMP图片逆序显示,这样便实现了用按键来实现对系统的设置,按键电路的实现比较简单,具体电路实现如下:
KEY1(控制本实验的图片翻页-下翻)
KEY2(控制本实验的图片翻页-下翻)
LED灯(本实验图片页脚为奇数时LED灯亮)
第三章设计流程图
本实验设计流程是基于实验原理、实际的操作过程及实验现象的基础上绘制的。
第四章硬件设计
4.1中英文显示部分设计
显示屏要显示内容设置,由于程序中有定义的中英文显示程序(如下),实验程序较多,此处只显示部分程序,为定义字符及字符串,所以SD卡根目录命名为“HZLIB.bin”的汉子字库文件保存到SD卡中,STM32芯片通过文件系统读取汉字字库文件即可获得字库的数据。
4.2BMP图片部分设计
BMP图片格式BMP文件格式,又称为位图(Bitmap)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广泛使用的图像文件格式。
它是一种与硬件设备无关的图像文件格式,使用非常广。
它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。
而且JPEG是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别。
图像的扫描方式是按从左到右、从下到上的顺序。
BMP文件保存了一幅图像中所有的像素。
BMP格式可以保存单色位图、16色或256色索引模式像素图、24位真彩色图象,每种模式中单一像素点的大小分别为1/8字节,1/2字节,1字节和32字节。
目前最常见的是256位色BMP和24位色BMP。
Windows所使用的BMP文件,在开始处有一个文件头,大小为54字节。
保存了包括文件格式标识、颜色数、图像大小、压缩方式等信息,由于本实验我们仅讨论24位色不压缩的BMP,所以文件头中的信息基本上不需要注意,只有“大小”这一项比较有用。
本实验使用240x320像素bmp的图片,对应图片格式形式如下:
240*320像素BMP图片格式设置
BMP格式图片对应程序设置(仅取部分程序)
4.3SD卡读取的内容
由于本实验的LCD显示的相关内容是从SD卡读取的,所以这里需将程序目录里的“需放置SD卡文件”用读卡器读进SD卡,再将SD卡插入STM32开发板的卡槽内,待程序加载后仿真时相应程序直接调用汉子字库及BMP格式图片。
SD卡读取的内容包括以下部分:
第五章软件设计
5.1主函数部分程序设计
#include"stm32f10x.h"//库函数
#include"bsp_lcd.h"
#include"bsp_bmp.h"
#include"bsp_led.h"
#include"bsp_key.h"
voidDelay(__IOuint32_tnCount)//简单的延时函数
{
for(;nCount!
=0;nCount--);//当自变量不等于0时,自变量依次递减
}
inti=0;//初始值i=0
intmain(void)
{
Sd_fs_init();//初始化SDIO
LCD_Init();//LCD初始化
Key_GPIO_Config();//key配置
LED_GPIO_Config();//LED配置
ILI9341_DispString_EN_CH(20,5,"lcd¸高利石燕张冰",macBACKGROUND,macRED);//在第20行,第五列显示lcd,高利,石燕,张冰,背景为黑色,字体为红色
Delay(0xAFFFFF);
ILI9341_DispString_CH(50,50,"上海第二工业大学",macBACKGROUND,macRED);Delay(0xAFFFFF);//在第50行,第50列显示上海第二工业大学,背景为黑色,字体为红色
ILI9341_DispString_EN_CH(30,90,欢迎您--",macBACKGROUND,macRED);Delay(0xAFFFFF);//在第30行,第90列显示欢迎您—背景为黑色,字体为红色
ILI9341_DispString_EN(40,120,"begin",macBACKGROUND,macGREEN);Delay(0xAFFFFF);//在第40行,第120列显示begin背景为黑色,字体为绿色
while
(1){
LED1(ON);//LED灯亮
if(Key_Scan(macKEY1_GPIO_PORT,macKEY1_GPIO_PIN)==KEY_ON){
i++;
if(i>13)i=13;}//按key1键,图片按顺序显示下一张图片,直到i=13
if(Key_Scan(macKEY2_GPIO_PORT,macK