发新帖本帖赏金 20.00元(功能说明)我要提问
返回列表

星空派GD32F303开发板的文件读写及数码相框的实现

[复制链接]
1850|4
手机看帖
扫描二维码
随时随地手机跟帖
jinglixixi|  楼主 | 2021-11-14 22:26 | 显示全部楼层 |阅读模式
#申请原创#
星空派开发板是旗点科技推出的一款以GD32F303ZET6为核心的开发板,该GD32F303芯片同STM32F103 是 pin to pin级的兼容, 可直接实现芯片的替换及产品性能的升级。
该开发板的外设资源十分丰富,其资源布局见图1所示。
1.jpg
图1 资源布局
此外,该开发板的例程资源也十分的丰富,几乎遍及板上的各种硬件配置。
用于开发板并未随机配带显示屏,为此利用其所配置的LCD接口,添加了一个SPI接口的显示屏,从而可以免去接线的麻烦。
由于GD32F303所配置的程序空间只有512K,故在需要较大存储空间时,就只能依赖板载的FLASH存储芯片和SD卡。
所程序空间的限制,当进行图片的显示,即使以FLASH芯片来存储数据是一件麻烦的事,需要执行多次才能将程序中的图片数据分批地转存到FLASH芯片中。
因此较合理的使用方式是将图片文件存放到SD卡中,以供数据读取来再现图片内容。
由于在例程资源中,只提供了SD卡的读写,因此要进行文件的读写,需要自行移植文件系统。
在完成文件系统的移植后,即可提供串口来显示SD卡的存储容量,其结果如图2所示。
2.jpg
图2 读取SD卡容量
在此基础上,该如何读写文件呢?
1.读取函数及使用
基于文件系统的读取函数为:
uint8_t Fatfs_read(uint8_t *data,uint32_t len)
{
uint16_t i;
uint32_t tlen=0;
uint32_t bytesread;
uint8_t *pdata = data;
for(i=0;i<len/512;i++)
{
retSD=f_read(&openfile,pdata,512,&bytesread);
if(retSD)
{
printf("Read Error:%d\r\n",retSD);
break;
}else
{
tlen+=bytesread;
pdata += bytesread;
}
}
if(len%512)
{
retSD=f_read(&openfile,pdata,len%512,&bytesread);
if(retSD)
{
printf("\r\nRead Error:%d\r\n",retSD);
}else
{
tlen+=bytesread;
printf("Read data: %x\r\n",pdata);         
}
}
if(tlen) printf("\r\nReaded data len:%d\r\n",tlen);
printf("Read data over\r\n");
return retSD;
}

该函数的使用方式为:
Fatfs_open(SDCard,"text.txt",1);
Fatfs_read(filetxt,9);
for(i=0;i<9;i++)
{
printf("Read data: %x\r\n",filetxt[i]);     
}

其执行结果如图3所示,说明结果正确。
3.jpg
图3读取文件测试
2.写入函数及使用
基于文件系统的写入函数为:
uint8_t Fatfs_write(uint8_t *data,uint32_t len)
{
uint32_t byteswrite;
printf("\r\nBegin Write file...\r\n");
printf("Write data len:%d\r\n",len);      
retSD=f_write(&openfile,data,len,&byteswrite);
if(retSD)
{
printf("Write Error:%d\r\n",retSD);  
}else printf("Writed data len:%d\r\n",byteswrite);
printf("Write data over.\r\n");
return retSD;
}

该函数的使用方式为:
Fatfs_open(SDCard,"dat.txt",2);
Fatfs_write(filetxt,9);
Fatfs_close();

其执行结果如图4所示,说明结果正确。
4.jpg
图4写入文件测试
5.jpg
图5生成文件内容
既然已实现了文本文件的读写,那可否对二进制文件读写呢?
进行测试的程序为:
Fatfs_open(SDCard,"HY.BIN",1);
Fatfs_read(filetxt,9);
for(i=0;i<9;i++)
{
printf("Read data: %x\r\n",filetxt[i]);
}
Fatfs_close();

经测试,所读取的结果如图7所示,说明结果正确。
6.jpg
图6二进制文件内容
7.jpg
图7读取二进制文件
3.图片文件显示
实现多个图片文件再现的程序为:
 for(t=0;t<3;t++)
{
delay_ms(5000);
Address_set(0,0,LCD_W-1,LCD_H-1);
if(t==0) Fatfs_open(SDCard,"FJ.BIN",1);
if(t==1) Fatfs_open(SDCard,"HY.BIN",1);
if(t==2) Fatfs_open(SDCard,"YX.BIN",1);
for(j=0;j<300;j++)
{
Fatfs_read(filetxt,512);
for(i=0;i<512;i++)
{
LCD_WR_DATA8(filetxt[i]);
}
}
Fatfs_close();
}
该程序的执行结果如图8所示,说明结果正确。
8.jpg
图8显示图像文件
如此在为开发板配置了文件系统及读写功能后,就可轻松地实现图像文件显示及数码相框功能,也使开发板的性能有了大幅的提升,存储容量的限制得以彻底的摆脱。
此外,配合板载的FLASH、音频DAC、耳机等资源,可以FLASH芯片完成中文字库的构建,以音频DAC配合音频文件的读取来播放音乐或语音等。这样在星空派GD32F303开发板上要实现小型的多媒体应用便不再是难事了!


使用特权

评论回复

打赏榜单

21小跑堂 打赏了 20.00 元 2022-01-07
理由:恭喜通过原创文章审核!请多多加油哦!

zeshoufx| | 2021-11-15 08:19 | 显示全部楼层
楼主强大,,,,国产的都玩了个遍

使用特权

评论回复
jinglixixi|  楼主 | 2021-11-15 08:26 | 显示全部楼层
zeshoufx 发表于 2021-11-15 08:19
楼主强大,,,,国产的都玩了个遍

哪里,还有许多没接触过的!

使用特权

评论回复
WoodData| | 2021-11-15 15:46 | 显示全部楼层
楼主很强大啊,到处能看到大佬的身影,玩了不少开发板

使用特权

评论回复
jinglixixi|  楼主 | 2021-11-15 16:28 | 显示全部楼层
WoodData 发表于 2021-11-15 15:46
楼主很强大啊,到处能看到大佬的身影,玩了不少开发板

哈哈,岂敢岂敢!

使用特权

评论回复
返回列表 发新帖 本帖赏金 20.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则