#申请原创#
星空派开发板是旗点科技推出的一款以GD32F303ZET6为核心的开发板,该GD32F303芯片同STM32F103 是 pin to pin级的兼容, 可直接实现芯片的替换及产品性能的升级。 该开发板的外设资源十分丰富,其资源布局见图1所示。 图1 资源布局 此外,该开发板的例程资源也十分的丰富,几乎遍及板上的各种硬件配置。 用于开发板并未随机配带显示屏,为此利用其所配置的LCD接口,添加了一个SPI接口的显示屏,从而可以免去接线的麻烦。 由于GD32F303所配置的程序空间只有512K,故在需要较大存储空间时,就只能依赖板载的FLASH存储芯片和SD卡。 所程序空间的限制,当进行图片的显示,即使以FLASH芯片来存储数据是一件麻烦的事,需要执行多次才能将程序中的图片数据分批地转存到FLASH芯片中。 因此较合理的使用方式是将图片文件存放到SD卡中,以供数据读取来再现图片内容。 由于在例程资源中,只提供了SD卡的读写,因此要进行文件的读写,需要自行移植文件系统。 在完成文件系统的移植后,即可提供串口来显示SD卡的存储容量,其结果如图2所示。 图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读取文件测试 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写入文件测试 图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二进制文件内容 图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显示图像文件 如此在为开发板配置了文件系统及读写功能后,就可轻松地实现图像文件显示及数码相框功能,也使开发板的性能有了大幅的提升,存储容量的限制得以彻底的摆脱。 此外,配合板载的FLASH、音频DAC、耳机等资源,可以FLASH芯片完成中文字库的构建,以音频DAC配合音频文件的读取来播放音乐或语音等。这样在星空派GD32F303开发板上要实现小型的多媒体应用便不再是难事了!
|