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

查看: 4717|回复: 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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版