基于STM32的便携式BMP图片解码系统设计方案

在现代便携式设备的应用过程中,常常需要在系统中显示一些图片,而在各种图片格式中,bmp又是最具代表性的一种图片格式。
bmp是一种与硬件设备无关的图像文件格式,使用非常广泛。它采用位映射存储格式,除了图像深度可选以外,bmp文件的图像深度可选1、4、8及24 bit.bmp文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。
典型的bmp图像文件由3部分组成:位图文件头数据结构,它包含bmp图像文件的类型、显示内容等信息;位图信息数据结构,它包含有bmp图像的宽、高、压缩方法,以及定义颜色等信息。
arm公司作为全球32位低功耗处理器设计领域的领导者,曾经设计过很多高性能低功耗的处理器,广泛应用于各种便携式手持系统中,意法半导体公司的stm32处理器采用arm公司最新的v7体系架构的内核cortex-m3,它的速度比arm7快三分之一,功耗低四分之三,同时集成了分支预测,单周期乘法,硬件除法等功能,大大提高了处理器的数据处理能力,同时采用最新的thumb-2指令集,有效地降低了代码的密度,提高了程序的执行救率,通过对功耗和性能的分析,本文中采用的处理器为stm32f103rbt6,它可以实现最新的在应用中编程,使得系统的软件更新更加容易实现,达到了性能和功耗的平衡,可以应用于很多领域,如工业控制,温度测量等。
1 系统的工作原理
本系统以stm32f103rbt6为核心,采用晶彩光电的am240320tft液晶模块作为显示器,完成对解码后图片的显示,需要显示的图片存储在sd卡中,处理器通过spi方式读取sd卡里面的图片信息,由于stm32内部ram很小,不能作为整幅图片的缓冲区,所以本系统的设计过程中采用了用时间换空间的方式,即采用了边解码边显示的方法,省去了外部数据ram,随之而来的就是显示的速度比直接调到内存中要慢一些。
1.1 stm32f系列arm微控制器简介
stm32f103rbt6使用高性能的arm cortex-m3 32位的risc内核,工作频率为72 mhz,内置高速存储器(高达128 k字节的闪存和20 k字节的sram),丰富的增强i/o端口和连接到两条apb总线的外设。所有型号的器件都包含2个12位的adc、3个通用16位定时器和一个pwm定时器,还包含标准和先进的通信接口:多达2个i2c和spi、3个usart、一个usb和一个can.供电电压2.0~3.6 v,一系列的省电模式保证低功耗应用的要求。
1.2 tft液量显示模块简介
tft液晶显示屏是薄膜晶体管型液晶显示屏。tft液晶为每个像素都设有一个半导体开关,每个像素都可以通过点脉冲直接控制,因而每个节点都相对独立,并可以连续控制,不仅提高了显示屏的反应速度,同时可以精确控制显示色阶,所以,tft液晶的笆彩更真。本文中采用的tft液晶屏分辨率位320x240,采用的控制芯片为ili9320,自带总大小为172 820(240x320x1818)的显存,模块的16位数据线与显寸的对应关系为565方式,它支持多种控制输入信号。本文中采用的是8080接口,通过io模拟8080总线协议。
1.3 sd卡的特点
sd卡(secure digital memory card)中文翻译为安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛应用于便携式装置,例如数码相机、个人数码助理(pda)和多媒体播放器等。sd卡一般支持2种操作模式:sd卡模式和spi模式,本系统的设计过程中采用spi模式完成sd卡的读写操作。
1.4 fat文件系统简介
常用的文件系统有fat12/16/32等,fat12是最古老的文件系统,只能管理8 m左右的空间。现在基本淘汰了。fat16则可以管理2 g的空间(通过特殊处理也能管理2 g以上的空间),而fat32则能管理到2 tb(2 048 gb)的空间。fat32较fat16的优势还在于fat32采用了更小的簇,可以更有效的保存信息,而不会造成多的浪费。
本系统设计过程中采用了fat32文件系统,它的主要组成部分如下:
mbr称为主引导记录区,该区存储了分区表等信息,位于sd卡的扇区0(物理扇区),在其分区信息里面记录了dbr所在的位置,sd卡一般只会有一个分区,所以也就只要找到分区1的dbr所在位置就可以了。
dbr称为操作系统引导记录区,如果没有mbr,那么dbr就位于0扇区;如果有,则必须通过mbr区得到dbr所在的地址,然后读出dbr信息。在dbr区,可以知道每个扇区所占用的字节数、每个簇的扇区数、fat表的份数、每个fat表的扇区敷、跟目录簇号、fat表1所在的扇区等一系列非常重要的信息。
fat称为文件分配表(fat表),一个卡上会存在2个fat表,一个用作备份,一个使用。fat表一般紧随dbr,另一个fat表则紧随第一个fat表,这样只要知道了第一个fat表的位置及大小,那么第二个fat表的位置也就确定了。fat表记录了每个文件的位置和区域,是一种链式结构。
fdt称为文件根目录表,这个区域固定为32个扇区,假设每个扇区为512个字节。那么根目录下最多存放512个文件(假设都用短文件名存储,每个短文件名占32个字节)。文件目录表是另一个重要的部分,fat文件系统中(仅以短文件名介绍),文件目录项在目录表下以32个字节的方式记录。
2 系统硬件设计
2.1 供电部分电路设计
整个系统中的元件均为3.3 v器件。由于系统供电采用电池或者直流电源供电,通过三端稳压芯片lm1117-3.3,为主控芯片stm32f103 rbt6供电,用二极管in4007串接在电源正极,为系统提供电源反接保护。供电部分原理如图1所示。
图1 系统供电部分原理图
2.2 液晶显示部分电路设计
液晶显示部分主要由微控制器stm32f103rbt6驱动am240320lstnqw-00h完成人机界面状态的显示,通过发送命令字,完成液晶模块的初始化,完成对内容的显示,显示部分的硬件电路接口图如图2所示。
图2 系统液晶接口原理图
2.3 sd卡读写部分的硬件设计
处理器主机可以选择sd卡模式和spi模式中任意一种模式同sd卡通信,sd卡模式允许4线的高速数据传输。spi模式允许简单的通过spi接口来和sd卡通信,这种模式同sd卡模式相比就是丧失了速度。通过读取sd卡中的文件,识别出各个目录下的图片数据,然后对数据进行解码。驱动液晶完成图片的显示,sd卡接口部分电路如图3所示。
图3 sd卡接口原理图
3 bmp图片的解码算法
3.1 bmp文件组成
bmp文件由文件头、位图信息头、颜色信息和图形数据4部分组成。bmp文件头数据结构舍有bmp文件的类型、文件大小和位图起始位置等信息,它占14个字节。bmp位图信息头数据用予说明位图的尺寸等信息,它占40个字节。bmp颜色表用于说明位图中的颜色,它有若干个表项,每一个表项定义一种颜色。位图信息头和颜色表组成位图信息,位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上,windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充。
3.2 bmp图片的读取显示算法
首先根据读取到的bmp图片数据得到bmp的头部信息,得到文件类型,大小和文件的起始位置,然后读取bmp位图信息头,这里面记录了图片的格式的信息,如bmp图片的宽度和高度,以及每个像素所占的位数,下面举例来说明bmp图片的解码过程。
常用的bmp图片格式有24位真彩图,16位图,和32位图,解码过程略有不同,下面分别介绍,首先是24位图,当根据bmp的头文件信息得到数据的起始地址之后,从起始地址开始读数据,假设每次读入512字节,由于am240320tft采用16位的565方式显示,即就是说需要把每个像素所占的24位致据,也就是3个字节,转换为16位的数据,即2个字节,这里以前3个字节为例来说明解码算法:
其中codor为需要提供给液晶显示器每个像素点的颜色值,tmp_color为解码过程中的临时变量,数组temp存储24位格式的像素值。同样也可以解码16位颜色图和32位颜色图,解码16位颜色图的算法比较简单,只需要解出连续的两个值然后组合成16位的565格式的颜色值送到液晶显示,其解码算法如下:
在32位图的解码过程中需要注意一个问题,就是32位图中实际上只使用了24位存储像素值,也就是32位中的前3位,最后一位没有存储像素值信息,所以在解码的过程中只需要解码前3位,将第4位跳过,具体解码算法如下:
3.3 stm32解码并显示bmp图片程序
在bmp图片解码过程中,有两种方式:一种是将bmp图片数据从外部sd卡中调入内存中,从内存中解码,解码后将图片数据显示在tft屏上;第二种方式是一边从sd卡中读数据一边解码显示,两种方式各有优缺点。第一种方式的优点是由于整个解码过程全部在内存中进行,所以解码的速度比较快,显示图片的速度快。由于一般处理器内部ram都是有限的,而这种方式对ram的消耗特别大,所以采用这种方式需要外扩sram.第二种方式是从sd卡总边读取边解码,例如一般fat32文件簇的大小都是512字节,所以可以以簇为单位来读取图片信息,然后显示接着读取下一簇,这种方式的缺点是,由于sd卡的spi方式速度较慢,解码一张320x240的图片大概需要1s,但是这种方式对系统的内存消耗比较低,比较适合于没有外部ram的系统。本系统中,采用第二种方式进行解码显示,stm32采用外部8 mhz的晶振作为输入时钟,内部锁相环将时钟倍频到72 mhz作为系统时钟,采用gpio口模拟8080时序并行驱动2.8寸tft屏,屏幕分辨率为320x240,处理器首先完成各种外设初始化,接着初始化fat文件系统,然后从sd卡中读取一簇的数据,解码显示,接着读取下一簇。整个程序的流程图如图4所示。
图4 bmp解码流程图
4 结论
本文采用了基于arm的cortex-m3内核的stm32,它基于最新armv7架构,设计了一个bmp图片解码系统,完成了在2.8寸tft屏上解码并显示bmp图片,通过读取sd卡中的图片数据,边读取边解码显示,实现了在内存有限的处理器中的bmp图片的解码算法。

iPhone12 mini出现跌价?
柔性触控技术将为未来手机屏幕的发展形态提供动力
智能家居有多智能:断网了也能用
人工智能不断发展成熟,知识工作者成最大受益群体
QT如何配置交叉编译工具?
基于STM32的便携式BMP图片解码系统设计方案
国产统一操作系统UOS宣布与晟元数据安全完成兼容适配工作 进一步提升了实用性
三星手机中国市场回暖,3月环比增速第一
Exail发布第一款三轴量子惯性传感器,迈向无漂移导航系统的里程碑
如何使用NRF24L01无线发射器和接收器
英特尔存储技术新突破 耗电将降低至少25倍
运动控制器的通信功能有哪些呢?
解析程序员为什么需要理解 CPU?
中国安防行业企业排名
一文详解FC和FB的区别与用法
简单的Voltus功耗分析
矢量控制器和正弦波控制器的区别
电池修复技术—短路故障通过电压可以解决吗
全球OLED显示面板出货量占比持续提高,国内OLED产线建设加快
苹果公司正在开发MagSafe电池组