数码之家

 找回密码
 立即注册
搜索
查看: 5824|回复: 13

[STM] STM32之 FAT32文件读写成功

[复制链接]
发表于 2021-2-14 10:57:01 | 显示全部楼层 |阅读模式
本帖最后由 inthsunshine 于 2021-2-14 11:43 编辑

一直对音频录放很有兴趣,学习了stm32不久,就蠢蠢欲动,去年下半年做了块板子,当时调试好adc和dac,以及串行flash录放,音质挺好的, 自己写代码录制的声音,还是有点小激动;但tf卡部分没完成,后来冬天天冷就搁置了,这次春节回家带着板子回老家继续



春节回家优化了tf的块读写,然后向FAT32前进, 我没有采用现成开源的fatfs之类的,主要是我的stm32硬件比较弱,F072的片子,没有sdio接口, 用的是SPI模式和tf卡通信,SPI毕竟速度比较慢,用fatfs恐怕会拖累原本薄弱的性能,所以决定自己写fat32的代码,查阅资料后,发现其实也简单, 读取MBR和DBR的关键参数,定位FAT表,根目录位置,以及簇位置,



在电脑上往卡上拷入文件,用stm32读取,成功,接下来测试写, 往tf卡写入一个几K的文本文件,拿到电脑上,可以正确识别和打开,内容什么都一致,所以写文件也没问题

因为最终是要读写wav文件(mp3考虑日后再支持)
试图读取头信息,也正确

采样率 0x17700=96000
位数0x18=24
数据率0x8CA00=576KB/s (96000*2*3)
音频数据长度=0x107AC00
所以
时间=音频数据长度/数据率=0x107AC00/0x8CA00=30秒

主要的问题解决了,接下来就是整合在一起,优化程序,包括操作界面。。。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 1家元 +50 收起 理由
家睦 + 50

查看全部打赏

发表于 2021-2-14 20:46:18 | 显示全部楼层
大师级别的,刚开始学51
回复 支持 反对

使用道具 举报

发表于 2021-2-17 13:10:05 来自手机浏览器 | 显示全部楼层
FAT32厉害了,完全对这个不了解。
回复 支持 反对

使用道具 举报

发表于 2021-2-18 11:01:26 | 显示全部楼层
@inthsunshine 你用来分析文件格式的工具是啥?看着挺好用的
回复 支持 反对

使用道具 举报

发表于 2021-2-18 11:27:26 | 显示全部楼层
能分享一下吗?刚好想做I2S接口音频的录制。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-18 13:34:42 | 显示全部楼层
本帖最后由 inthsunshine 于 2021-2-18 13:38 编辑
sadate 发表于 2021-2-18 11:01
@inthsunshine 你用来分析文件格式的工具是啥?看着挺好用的

MDK的调试窗口,是我自己定义的结构体:sweat:  想看分区/FAT32信息,可以用DiskGenius,   想直接看扇区,可以用winhex工具
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-18 13:36:49 | 显示全部楼层
网络孤客 发表于 2021-2-18 11:27
能分享一下吗?刚好想做I2S接口音频的录制。

和tf卡接口的数据是用dma传送,结构比较分散,不好移植
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-21 09:44:39 | 显示全部楼层
昨天试验成功删除文件功能,从电脑拷入1Gbyte多的大文件(占用10几万个簇),删除后,再用软件检查,目录项, FAT表空间都能正常释放

完成读取,创建,和删除文件,这3个最基本的文件操作
回复 支持 反对

使用道具 举报

发表于 2022-2-21 09:42:43 | 显示全部楼层
你好,最近也在做这一块,能否分享到代码 522080520@qq.com谢谢了
回复 支持 反对

使用道具 举报

发表于 2022-3-25 10:14:23 | 显示全部楼层
直接用HAL库函数不香吗?
回复 支持 反对

使用道具 举报

发表于 2022-3-25 10:38:41 | 显示全部楼层
楼主厉害了。
不知道对长文件名和汉字文件名支持吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-25 13:33:15 | 显示全部楼层
本帖最后由 inthsunshine 于 2022-3-25 13:46 编辑
jjbboox 发表于 2022-3-25 10:38
楼主厉害了。
不知道对长文件名和汉字文件名支持吗?

只实现最基本的功能, 你说的这些还没去弄, 原理上能支持(板子上留了1个中文字库芯片还没焊), 做这个算一次尝试吧

不过用SPI去驱动tf并不是好办法, 无法发挥tf的性能(如果读写数据量少的应用倒可以),  应该用带SDIO的会更高效, 以后可能改用SDIO搞个板玩玩

当时录的播放视频
https://player.youku.com/embed/XNTgzNjI2NTc2OA==

回复 支持 反对

使用道具 举报

发表于 2022-3-25 15:21:15 | 显示全部楼层
inthsunshine 发表于 2022-3-25 13:33
只实现最基本的功能, 你说的这些还没去弄, 原理上能支持(板子上留了1个中文字库芯片还没焊), 做这个算一次 ...

貌似好多年前也干过一样的事情。
发在老站上了。
http://bbs.mydigit.cn/read.php?tid=2430748
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-25 16:54:44 | 显示全部楼层
jjbboox 发表于 2022-3-25 15:21
貌似好多年前也干过一样的事情。
发在老站上了。
http://bbs.mydigit.cn/read.php?tid=243 ...

不错, 玩单片机搞音频播放还是蛮有意思的, 顺便还能熟悉下DMA啊中断的配合使用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-5 21:08 , Processed in 0.234000 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表