OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4373|回复: 2

STM32F4开发板的音乐播放器实验问题

[复制链接]

10

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2017-11-8
在线时间
10 小时
发表于 2018-8-23 11:13:20 | 显示全部楼层 |阅读模式
STM32F4开发指南V1.1-库函数版本中第四十八章 音乐播放器实验
书中P660页写到“SD卡读取到的24位WAV数据流,是低字节在前,高字节在后,比如,我们读到一个声道的数据(24位),存储在buf[3]里面,那么要通过SPI-DR发送这个24位数据,过程如下:SPI_DR=((u16)buf[2]<<8+buf[1];SPI_DR=((u16)buf[0]<<8;然而在P672页的wav_buffill填充函数中对于24位数据转换处理后的结果却是buf[0]=p[1],buf[1]=p[2],buf[3]=p[0]......
我的问题是:
(1)对于24位的WAV数据流,wav_buffill函数并没有将WAV数据流的高字节p[2]赋值给缓冲区的首地址buf[0],这是为什么?
(2)为何 是低字节在前,高字节在后的,什么原则导致的?
(3)加入SD卡读取到的是16位WAV数据流,是否也是低字节在前,高字节在后的?如果是,为何wav_buffill函数并没有对16位WAV数据流进行转换处理?
(4)该开发板的下一个实验(第四十九章 录音机实验)进行了WAV录音并保存为SD卡内的WAV数据流文件,然而该实验里并看不出WAV数据流是低字节在前,高字节在后的,那么问题(2)是什么原因导致的?
感谢原子哥及各位学友指导。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-8-30 11:26:45 | 显示全部楼层
1,你看寄存器版本,F4开发指南,617页,图48.1.3.3: 1111.png
I2S协议设置的24位数据,是高字节的前,低字节在后,所以传输0X8EAA33的时候,第一次写入DR的是:0X8EAA(buf[2]<<8+buf[1])
第二次才是写入0X33(buf[0])
2,这是WAV文件格式规定(低字节在前,高字节在后)
3,是的,因为STM32是小端模式(不懂自己百度),读取出来的u16数据,默认就是高位地址存放高位数据,地位地址存放低位数据,因此不需要转换。
4,我们录音是录制的16位,不支持24位录音。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2017-11-8
在线时间
10 小时
 楼主| 发表于 2018-8-30 14:57:33 | 显示全部楼层
感谢原子哥的回答,学习了!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 06:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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