| 本帖最后由 any012 于 2016-1-30 14:42 编辑 
 其他元件都是SCL空闲电平为高电平,然后是上升沿采样。
 只有一个是上升沿时数据改变,下降沿时采样。
 现在想到的办法是:
 把SPI设置为SCL空闲电平为高电平,第二个边沿数据采样;
 和这个期间通讯前,更改SPI模式,改为SCL空闲电平为低电平,仍是第二个边沿数据采样;
 通讯结束后,再把SPI模式改回来。
 
 
 结果,通讯不成功,用示波器观测了下MOSI和SCL信号,不同步,有时候SCL信号出现了几个以后才有MOSI信号,并且这个间隔是在变化的。
 
 
 #include "adg738.h"
//¸ÃоƬÊÇϽµÑزÉÑù£¬¹ÊÐèÒª¸ü¸Ä¿ÕÏÐµçÆ½
void ADG738_Set(unsigned char value)
{
        SPI_InitTypeDef SPI_InitStructure;
        
        SPI_Cmd(SPI3, DISABLE);
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
        SPI_InitStructure.SPI_CRCPolynomial = 7;
        SPI_Init(SPI3, &SPI_InitStructure);
        SPI_Cmd(SPI3, ENABLE);
        
        ADG738_CS(OFF);
        SPI3_ReadWriteByte(value);
        ADG738_CS(ON);
        
        SPI_Cmd(SPI3, DISABLE);
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
        SPI_Init(SPI3, &SPI_InitStructure);
        SPI_Cmd(SPI3, ENABLE);
}
----------------------20160130------------------------------
 主楼更新下手册,及读写时续截图。
 好像有两位朋友怀疑是CS不对,不知道这么猜测有什么依据?
 
 
   
 
  ADG738 .pdf
(103.64 KB, 下载次数: 0) 
 |