0x00 开发板介绍
这学期学的STM32开发,实验室里的开发板型号为PZ6808L-F4
整个板子是这样的
这块板子是F103和F407双核的,但我学的一直就是F407,所以本文所有问题只针对F407。
由于期末实践需要用到这一块4.3寸TFT屏幕显示图片,过程遇到了一些问题,在此做个记录。
0X01 SD卡存储BMP图片
首先是尝试使用了普中给的例程【42. 数码相框-BMP图片显示实验】
(提示:普中例程里的库tftlcd需要替换,否则屏幕无法正常点亮)
普中的【普中STM32F4XX开发攻略】内对该实验例程有一些说明,但也有一些不符。比如这个攻略里的屏幕是3.5寸的,开发板的屏幕却是4.3寸的。
文档中这个提示一定要注意,要在SD卡根目录创建一个名为“图片”的文件夹,然后再把BMP格式的图放进去才能显示。而且对BMP图片的格式有一定要求。
经过多次尝试才试出来了这个例程可解析的BMP格式如下图
软件Image2Lcdv3.2,xx软件园下载,勿使用高速下载器 本地下载就行
选择24位真彩
、水平扫描
,左下角勾选包含图像头数据
以及自底向顶扫描
和高位在前
就行,那个自右至左扫描无所谓。(经过尝试,原图最好是jpg或者gif比较好,png不知道为啥会糊)
由于该软件的24位似乎对宽高有限制,高度最多只能480,还没达到屏幕的极限,所以我又用格式工厂试了下,意外的可以使用,限制下宽高就行。
经过测试,该屏幕的宽度是480,高度800,显示效果如下:
宽度极限480
高度极限800
图片是反着显示的(左右上下貌似都反了),大概是BMP解析的问题吧,有空再研究,现在先赶ddl去了…
现在大概赶完了作业,补充一点内容
0x02 C语言数组格式图片
图片同样是使用Image2Lcd v3.2
这个工具进行转换的。
参数请选择16位真彩
,水平扫描
,其他都别勾选(如上图)。
使用普中tftlcd库中的一个函数LCD_ShowPicture
,代码如下:
// x\y是图片开始的横纵坐标, wide\high是图片宽高,pic是图片数组名
void LCD_ShowPicture(u16 x, u16 y, u16 wide, u16 high,u8 *pic)
{
u16 temp = 0;
long tmp=0,num=0;
LCD_Set_Window(x, y, x+wide-1, y+high-1);
num = wide * high*2 ;
do
{
temp = pic[tmp + 1];
temp = temp << 8;
temp = temp | pic[tmp];
LCD_WriteData_Color(temp);//逐点显示
tmp += 2;
}
while(tmp < num);
}
注意:图片大小不能太大,因为会使代码文件变得过大。
效果图如下
还有一种是把bin文件放SD卡用FATFS文件系统读,因为读取速度快所以可以放视频(比如Bad Apple),但是我太菜了整不出来,之后研究研究再说。。
2023.7.25更新
因为一直有人问普中资料所以说一下,因为我已经毕业了所以早都删了,但是网上能找到资料,善用搜索啊同志们
http://prechin.net/forum.php?mod=viewthread&tid=35264
2025.2.6更新
发现普中官方删了分享= =
翻了下旧号网盘还有的资料,要下快下吧
通过网盘分享的文件:普中STM32-PZ6808L-F4开发板资料
链接: https://pan.baidu.com/s/1WJ0qd6-WYL6ti3D7TkaL3g?pwd=s6na 提取码: s6na