打印

STM32的SPI求助

[复制链接]
4560|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lphaff|  楼主 | 2012-5-25 11:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
需要对一个SPI接口的AD进行读数据,
这个AD的SPI时序图如下:

我这里将STM32的SPI配置成:
极性为0,相位为第一个沿,即为下降沿
数据位为8个bit
我的理解是,这个AD的SPI接口要写3次数据
第一个字节写成0000 0110B,
Start是AD的起始位,SGL/DIFF是AD选择单端输入还是差分输入模式
D2,D1,D0是AD的通道选择位
第二个字节写成0000 0000B
第三个字节写成0000 0000B
按照这个时序图,是不是在写第二个字节的时候
SPI的MISO引脚就应该能收到数据了?
因为AD的数据输出要在MCU写第二个字节的时候才有输出
是不是意味着,如果,我对AD芯片只写第一个字节的话
那STM32就无法准确读到AD输出的数据?
谢谢各位老大了。
沙发
lphaff|  楼主 | 2012-5-25 11:34 | 只看该作者
我对这个理解有障碍是因为,
在51单片机模拟SPI时序的时候
完成 一次AD的写,和读,总共只用了17个CLK。
前面5个高低电平模拟的时钟用来配置,
后面12个高低电平模拟的时钟 用来读数
如下:
for(i=0; i<4; i++)
                                  {       
                                        AD_SCK = 0;       
                                    if(cInDat & 0x08)
                                            AD_SDI = 1;
                                    else
                                            AD_SDI = 0;
                                        AD_SCK = 1;        
                                        cInDat <<= 1;                                    
                                  }   

                        for( i=0; i<13; i++ )
                                  {
                                    AD_SCK = 0;
                                        Delay1us(1);   
                                    if(AD_SDO)
                                              nOutDat++;
                                    AD_SCK = 1;
                                        nOutDat <<= 1;   
                                  }
                        AD_SCS = 1;  
                        nOutDat &= 0x0FFF;                                                         // mask out 12-bit result
                        Temp[j]=nOutDat;
                        }
                return nOutDat;
而在这里我使用硬件SPI的时候,数据位为8位
相当于要么给8个CLK,
要么,就给16个CLK

使用特权

评论回复
板凳
lphaff|  楼主 | 2012-5-25 11:34 | 只看该作者
如果,我的SPI不给AD写数据,而AD有数据输出的时候
STM32的SPI怎么收到AD的数据呢?
因为我的理解是,STM32的SPI作为MASTER,
所以,如果从设备有数据输出,必须要主设备给出时钟才行

使用特权

评论回复
地板
lphaff|  楼主 | 2012-5-25 12:11 | 只看该作者
总结:
SPI接收不宜用中断。
用中断本身就是为了省去查询等待的麻烦
而SPI的速率本身就可以做到很高了
再用中断,其性价比不间的更高。

使用特权

评论回复
5
ilovezeno| | 2012-5-25 13:58 | 只看该作者
总结:
SPI接收不宜用中断。
用中断本身就是为了省去查询等待的麻烦
而SPI的速率本身就可以做到很高了
再用中断,其性价比不间的更高。
lphaff 发表于 2012-5-25 12:11
用DMA啊,这种比较快的慢速设备用中断可能太慢,用查询太低效率,用DMA妥妥的。

使用特权

评论回复
6
lxj19901115| | 2012-9-23 20:46 | 只看该作者
要把你AD接口的数据传到SPI,可以透传

使用特权

评论回复
7
天行漫步| | 2014-11-14 20:06 | 只看该作者
有用STm32的做从设备的吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

540

帖子

2

粉丝