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

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

[复制链接]
5528|7
 楼主| 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.读取函数及使用
基于文件系统的读取函数为:
  1. uint8_t Fatfs_read(uint8_t *data,uint32_t len)
  2. {
  3. uint16_t i;
  4. uint32_t tlen=0;
  5. uint32_t bytesread;
  6. uint8_t *pdata = data;
  7. for(i=0;i<len/512;i++)
  8. {
  9. retSD=f_read(&openfile,pdata,512,&bytesread);
  10. if(retSD)
  11. {
  12. printf("Read Error:%d\r\n",retSD);
  13. break;
  14. }else
  15. {
  16. tlen+=bytesread;
  17. pdata += bytesread;
  18. }
  19. }
  20. if(len%512)
  21. {
  22. retSD=f_read(&openfile,pdata,len%512,&bytesread);
  23. if(retSD)
  24. {
  25. printf("\r\nRead Error:%d\r\n",retSD);
  26. }else
  27. {
  28. tlen+=bytesread;
  29. printf("Read data: %x\r\n",pdata);         
  30. }
  31. }
  32. if(tlen) printf("\r\nReaded data len:%d\r\n",tlen);
  33. printf("Read data over\r\n");
  34. return retSD;
  35. }

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

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

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

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

经测试,所读取的结果如图7所示,说明结果正确。
6.jpg
图6二进制文件内容
7.jpg
图7读取二进制文件
3.图片文件显示
实现多个图片文件再现的程序为:
  1. for(t=0;t<3;t++)
  2. {
  3. delay_ms(5000);
  4. Address_set(0,0,LCD_W-1,LCD_H-1);
  5. if(t==0) Fatfs_open(SDCard,"FJ.BIN",1);
  6. if(t==1) Fatfs_open(SDCard,"HY.BIN",1);
  7. if(t==2) Fatfs_open(SDCard,"YX.BIN",1);
  8. for(j=0;j<300;j++)
  9. {
  10. Fatfs_read(filetxt,512);
  11. for(i=0;i<512;i++)
  12. {
  13. LCD_WR_DATA8(filetxt[i]);
  14. }
  15. }
  16. Fatfs_close();
  17. }
该程序的执行结果如图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
楼主很强大啊,到处能看到大佬的身影,玩了不少开发板

哈哈,岂敢岂敢!
heyajie808 发表于 2022-4-11 11:56 | 显示全部楼层
请问开发板在哪买的?旗点智能科技的网站打不开
 楼主| jinglixixi 发表于 2022-4-11 21:54 | 显示全部楼层
heyajie808 发表于 2022-4-11 11:56
请问开发板在哪买的?旗点智能科技的网站打不开

当时活动申请的,时间久了可能不好搞了。
yangxiaor520 发表于 2022-4-12 08:16 来自手机 | 显示全部楼层
刷新速率慢了点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部