OpenEdv-开源电子网

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

探索者开发板的音乐播放器的实验

[复制链接]

38

主题

144

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
284
金钱
284
注册时间
2017-3-18
在线时间
85 小时
发表于 2017-4-19 14:34:15 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 luojue10330 于 2017-4-19 15:03 编辑

第一个问题:
GPIO_PinAFConfig(GPIOB,GPIO_PinSource12,GPIO_AF_SPI2); //PB12,AF5  I2S_LRCK
GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_SPI2); //PB13,AF5  I2S_SCLK
GPIO_PinAFConfig(GPIOC,GPIO_PinSource3,GPIO_AF_SPI2); //PC3 ,AF5  I2S_DACDATA
GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_SPI2); //PC6 ,AF5  I2S_MCK
GPIO_PinAFConfig(GPIOC,GPIO_PinSource2,GPIO_AF6_SPI2); //PC2 ,AF6  I2S_ADCDATA  I2S2ext_SD是AF6!
前四行复用是AF5,为什么可以直接写成GPIO_AF_SPI2?

第二个问题:
如果只实现音乐播放功能,不要录音机的功能,是不是可以不接I2S_SDOUT(ADCDAT)这根线,即I2S不工作在全双工模式,而是单工模式?
捕获.JPG

最佳答案

查看完整内容[请看2#楼]

1,看宏定义值,好比骂人,傻逼,也可以骂成傻叉。意思都一样。 2,可以不接。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-4-19 14:34:16 | 显示全部楼层
1,看宏定义值,好比骂人,傻逼,也可以骂成傻叉。意思都一样。   2,可以不接。
回复

使用道具 举报

38

主题

144

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
284
金钱
284
注册时间
2017-3-18
在线时间
85 小时
 楼主| 发表于 2017-4-19 14:38:29 | 显示全部楼层
本帖最后由 luojue10330 于 2017-4-19 15:03 编辑

求大家帮忙解答一下。
回复

使用道具 举报

38

主题

144

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
284
金钱
284
注册时间
2017-3-18
在线时间
85 小时
 楼主| 发表于 2017-4-19 16:18:36 | 显示全部楼层
void I2S2_Init(u16 I2S_Standard,u16 I2S_Mode,u16 I2S_Clock_Polarity,u16 I2S_DataFormat)
{
    I2S_InitTypeDef I2S_InitStructure;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);//使能SPI3时钟
       
        RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2,ENABLE); //复位SPI3
        RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2,DISABLE);//结束复位
  
        I2S_InitStructure.I2S_Mode=I2S_Mode;//IIS模式
        I2S_InitStructure.I2S_Standard=I2S_Standard;//IIS标准
        I2S_InitStructure.I2S_DataFormat=I2S_DataFormat;//IIS数据长度
        I2S_InitStructure.I2S_MCLKOutput=I2S_MCLKOutput_Disable;//主时钟输出禁止
        I2S_InitStructure.I2S_AudioFreq=I2S_AudioFreq_Default;//IIS频率设置
        I2S_InitStructure.I2S_CPOL=I2S_Clock_Polarity;//空闲状态时钟电平
        I2S_Init(SPI2,&I2S_InitStructure);//初始化IIS

        SPI_I2S_DMACmd(SPI2,SPI_I2S_DMAReq_Tx,ENABLE);//SPI2 TX DMA请求使能.
    I2S_Cmd(SPI2,ENABLE);//SPI2 I2S EN使能.       
}
函数中为什么要先复位SPI3再停止复位??好多程序里都是这样。。有什么作用呢?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-4-19 19:21:26 | 显示全部楼层
luojue10330 发表于 2017-4-19 16:18
void I2S2_Init(u16 I2S_Standard,u16 I2S_Mode,u16 I2S_Clock_Polarity,u16 I2S_DataFormat)
{
    I2S ...

你按单片机的复位键,能一直按住么?一直按住,你单片机还会工作么?
动动脑。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

38

主题

144

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
284
金钱
284
注册时间
2017-3-18
在线时间
85 小时
 楼主| 发表于 2017-4-20 08:36:41 | 显示全部楼层
正点原子 发表于 2017-4-19 19:21
你按单片机的复位键,能一直按住么?一直按住,你单片机还会工作么?
动动脑。。。

回复

使用道具 举报

38

主题

144

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
284
金钱
284
注册时间
2017-3-18
在线时间
85 小时
 楼主| 发表于 2017-4-20 08:50:47 | 显示全部楼层
本帖最后由 luojue10330 于 2017-4-20 08:53 编辑
正点原子 发表于 2017-4-19 14:34
1,看宏定义值,好比骂人,傻逼,也可以骂成傻叉。意思都一样。   2,可以不接。

宏定义里确实找到了怎么一句:#define GPIO_AF6_SPI2         ((uint8_t)0x06)  /* SPI2 Alternate Function mapping (Only for STM32F411xE Devices) */
但是原子哥,明明写了Only for STM32F411xE Devices。。。探索者能怎么用吗:GPIO_PinAFConfig(GPIOC,GPIO_PinSource2,GPIO_AF6_SPI2)?
回复

使用道具 举报

38

主题

144

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
284
金钱
284
注册时间
2017-3-18
在线时间
85 小时
 楼主| 发表于 2017-4-20 08:58:36 | 显示全部楼层
正点原子 发表于 2017-4-19 19:21
你按单片机的复位键,能一直按住么?一直按住,你单片机还会工作么?
动动脑。。。

原子哥,还有个疑问。SPI_I2S配置寄存器SPI_I2SCFGR、SPI_I2S预分配器寄存器SPI_I2SPR的很多位都要求是在“I2S/SPI禁止的时候,设置该位”。那么,复位SPI2是不是起到禁止的作用呢?如果不是,该如何保证设置时是禁止的呢?
回复

使用道具 举报

10

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2017-11-8
在线时间
10 小时
发表于 2018-8-23 17:42:45 | 显示全部楼层

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)是什么原因导致的?
感谢原子哥及各位学友指导。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 10:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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