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

查看: 4750|回复: 0

请教STM32中SPI的若干问题

[复制链接]

3

主题

6

回帖

0

蝴蝶豆

新手上路

最后登录
2018-5-31
发表于 2010-5-27 18:42:35 | 显示全部楼层 |阅读模式
1、我用STM32F103VC处理器,工作在72M HZ下,SPI1用作操作FLASH(工作在主模式下),SPI2用作采集PCM语音数据(工作在从模式下)。SPI1采用PCLK 4分频,SPI2的时钟为来自通信模块的2.048M HZ的时钟。当SPI2采集到来自PCM的256个数据后,将这些数据通过SPI1写入到FLASH中(在SPI1写入FLASH中时,SPI2仍在对PCM的数据进行接收),SPI1写入数据到FLASH是采用查询写入的方式,直到256个字节写入完成才退出,而SPI2接收PCM数据采用中断方式(中断优先级最高),故两者在程序的时序上应该不会有影响。但是,从程序执行的结果来看,在每组256字节的数据中,头几个字节的数据总是乱的(并不是真正在SPI2 MOSI线上的数据),但是过了头几个数据,后面的数据又完全正常了。所以,我怀疑SPI1 和 SPI2同时工作的时候是否互相存在影响,而且SPI2相对应该是在一个比较高的频率上。不知各位高手对这方面是否有所了解,还望不吝赐教。
2、我尝试将该处理器SPI2设置为I2S模式,并且将I2S标准设置为PCM标准,由于模块只有短帧同步,I2S中我也设置了短帧同步。当模块有语音数据送出时,PCM的时钟是一直在往外送的,频率为2.048M,语音的采样频率为8K HZ,16bit数据,即在两个短帧之间有256个时钟信号,在256个时钟信号的前16个时钟信号时,模块在MOSI线上有语音数据输出,而其后的15个16bit位宽的时间里,没有语音数据,即语音数据占了总带宽的1/16。我将I2S控制器设置为数据寄存器空中断,但是这样,1帧会触发16个中断,而且自我感觉中间还会错过若干个时钟,导致数据位偏移。我看了手册,I2S控制器里面似乎没有对帧进行同步的机制,那如何才能做到1帧里面触发一个中断,而不是触发16次中断呢?那在I2S中设置为短帧同步还是长帧同步不也是没什么区别了么?不知道是我哪里理解有错还是哪里没搞明白。。。
        谢谢各位大牛赐教!
回复

使用道具 举报

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