你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

I2S数据接收问题

[复制链接]
白马非马-403930 提问时间:2016-3-31 18:25 /
利用stm32的I2S接口接收麦克风ics43432发来的24位数据,只接收左声道的(右声道麦克风没接)。
有两个问题:
1、接收24位的数据需要对I2S数据寄存器读两次,这样操作是否正确?连续读两次的话收到的数据是一模一样的,如果增加判断语句,会不会造成CHSIDE标志(左右声道标志)的错误(参考手册上说每次从SPI_DR寄存器读取数据时CHSIDE标志都会更新)
while(SPI_I2S_GetFlagStatus(I2Sx,SPI_I2S_FLAG_RXNE)!=SET);
buf0[num]=SPI_I2S_ReceiveData(I2Sx);
num++;
while(SPI_I2S_GetFlagStatus(I2Sx,SPI_I2S_FLAG_RXNE)!=SET);
buf0[num]=SPI_I2S_ReceiveData(I2Sx);               //24bit数据需要连续接收两次

2、判断当前传输的是哪个声道的判断语句应该放在什么位置?在仿真过程中环境声音是很小的,但是总会收到连续的一堆F,我的SD端口设置为上拉电阻,如果麦克风数据输出为高阻,SD收到的肯定是1,所以我怀疑应该是这个判定语句出问题了,我接收到的有一部分是右声道的数据,

if(SPI_I2S_GetFlagStatus(I2Sx,I2S_FLAG_CHSIDE)==0),这句判定语句应该放在哪个操作之后呢?


求解答,谢谢~

收藏 评论3 发布时间:2016-3-31 18:25

举报

3个回答
adlu 回答时间:2016-4-5 09:40:18
STM32的I2S是传输的是立体声数据,数据是左右声道交替的,不能说只接收一个声道。如果要实现单声道,可以在接收完整的一帧数据之后,分离出单声道。

I2S接口传输的是音频数据流,最好使用DMA控制传输,按照数据块进行处理,而不是按照数据帧处理。
白马非马-403930 回答时间:2016-4-5 17:56:17
adlu 发表于 2016-4-5 09:40
STM32的I2S是传输的是立体声数据,数据是左右声道交替的,不能说只接收一个声道。如果要实现单声道,可以在 ...

谢谢您,我把判定声道的语句放到接收语句之后就可以了
之前也是想过用DMA接收I2S的,但是现在只需要左声道的数据,用DMA只能等全收完以后再把左声道取出来。
另外我还要用串口把I2S数据发给上位机处理,串口速度跟不上,两个DMA时序不太好协调,串口总是发不完。
(之前也发帖询问过串口和I2S两个DMA配置问题,您回复了说串口速率太慢,但是目前硬件条件决定了只能用串口发orz,我用的I2S采样频率只有3k,需要采集的信号频率大概是几百Hz,然而串口还是发不完,特别纠结,所以才这样接收数据的)
ziziran 回答时间:2020-10-8 15:11:43
我也遇到同样的问题,想问一下,具体设置是如何设置的

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版